github.com/cozy/cozy-stack@v0.0.0-20240603063001-31110fa4cae1/web/settings/external_ties_test.go (about)

     1  package settings_test
     2  
     3  import (
     4  	"errors"
     5  	"testing"
     6  
     7  	"github.com/cozy/cozy-stack/model/cloudery"
     8  	"github.com/cozy/cozy-stack/model/instance/lifecycle"
     9  	"github.com/cozy/cozy-stack/model/session"
    10  	csettings "github.com/cozy/cozy-stack/model/settings"
    11  	"github.com/cozy/cozy-stack/pkg/config/config"
    12  	"github.com/cozy/cozy-stack/tests/testutils"
    13  	"github.com/gavv/httpexpect/v2"
    14  )
    15  
    16  func TestExternalTies(t *testing.T) {
    17  	config.UseTestFile(t)
    18  	testutils.NeedCouchdb(t)
    19  	setup := testutils.NewSetup(t, t.Name())
    20  	testInstance := setup.GetTestInstance(&lifecycle.Options{
    21  		Locale:      "en",
    22  		Timezone:    "Europe/Berlin",
    23  		Email:       "alice@example.com",
    24  		ContextName: "test-context",
    25  	})
    26  	sessCookie := session.CookieName(testInstance)
    27  
    28  	svc := csettings.NewServiceMock(t)
    29  	ts := setupRouter(t, testInstance, svc)
    30  
    31  	t.Run("WithBlockingSubscription", func(t *testing.T) {
    32  		blockingSubscription := cloudery.BlockingSubscription{Vendor: "ios"}
    33  
    34  		svc.On("GetExternalTies", testInstance).Return(&csettings.ExternalTies{
    35  			HasBlockingSubscription: true,
    36  			BlockingSubscription:    &blockingSubscription,
    37  		}, nil).Once()
    38  
    39  		e := testutils.CreateTestClient(t, ts.URL)
    40  		obj := e.GET("/settings/external-ties").
    41  			WithCookie(sessCookie, "connected").
    42  			WithHeader("Accept", "application/vnd.api+json").
    43  			Expect().Status(200).
    44  			JSON(httpexpect.ContentOpts{MediaType: "application/vnd.api+json"}).
    45  			Object()
    46  
    47  		data := obj.Value("data").Object()
    48  		data.HasValue("type", "io.cozy.settings")
    49  		data.HasValue("id", "io.cozy.settings.external-ties")
    50  
    51  		attrs := data.Value("attributes").Object()
    52  		attrs.HasValue("has_blocking_subscription", true)
    53  		attrs.Value("blocking_subscription").Object().HasValue("vendor", "ios")
    54  	})
    55  
    56  	t.Run("WithoutBlockingSubscription", func(t *testing.T) {
    57  		svc.On("GetExternalTies", testInstance).Return(&csettings.ExternalTies{}, nil).Once()
    58  
    59  		e := testutils.CreateTestClient(t, ts.URL)
    60  		obj := e.GET("/settings/external-ties").
    61  			WithCookie(sessCookie, "connected").
    62  			WithHeader("Accept", "application/vnd.api+json").
    63  			Expect().Status(200).
    64  			JSON(httpexpect.ContentOpts{MediaType: "application/vnd.api+json"}).
    65  			Object()
    66  
    67  		data := obj.Value("data").Object()
    68  		data.HasValue("type", "io.cozy.settings")
    69  		data.HasValue("id", "io.cozy.settings.external-ties")
    70  
    71  		attrs := data.Value("attributes").Object()
    72  		attrs.HasValue("has_blocking_subscription", false)
    73  		attrs.NotContainsValue("blocking_subscription")
    74  	})
    75  
    76  	t.Run("WithClouderyError", func(t *testing.T) {
    77  		svc.On("GetExternalTies", testInstance).Return(nil, errors.New("unauthorized")).Once()
    78  
    79  		e := testutils.CreateTestClient(t, ts.URL)
    80  		e.GET("/settings/external-ties").
    81  			WithCookie(sessCookie, "connected").
    82  			WithHeader("Accept", "application/vnd.api+json").
    83  			Expect().Status(500).
    84  			Body().Contains("unauthorized")
    85  	})
    86  }