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 }