github.com/cozy/cozy-stack@v0.0.0-20240603063001-31110fa4cae1/web/settings/clients_usage_test.go (about) 1 package settings_test 2 3 import ( 4 "testing" 5 6 "github.com/cozy/cozy-stack/model/instance/lifecycle" 7 "github.com/cozy/cozy-stack/model/oauth" 8 csettings "github.com/cozy/cozy-stack/model/settings" 9 "github.com/cozy/cozy-stack/pkg/config/config" 10 "github.com/cozy/cozy-stack/pkg/consts" 11 "github.com/cozy/cozy-stack/tests/testutils" 12 "github.com/gavv/httpexpect/v2" 13 "github.com/stretchr/testify/require" 14 ) 15 16 func TestClientsUsage(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 scope := consts.Settings + " " + consts.OAuthClients 27 _, token := setup.GetTestClient(scope) 28 29 svc := csettings.NewServiceMock(t) 30 ts := setupRouter(t, testInstance, svc) 31 32 flagship := oauth.Client{ 33 RedirectURIs: []string{"cozy://flagship"}, 34 ClientName: "flagship-app", 35 ClientKind: "mobile", 36 SoftwareID: "github.com/cozy/cozy-stack/testing/flagship", 37 Flagship: true, 38 } 39 require.Nil(t, flagship.Create(testInstance, oauth.NotPending)) 40 41 t.Run("WithoutLimit", func(t *testing.T) { 42 testutils.WithFlag(t, testInstance, "cozy.oauthclients.max", float64(-1)) 43 44 e := testutils.CreateTestClient(t, ts.URL) 45 obj := e.GET("/settings/clients-usage"). 46 WithHeader("Authorization", "Bearer "+token). 47 Expect().Status(200). 48 JSON(httpexpect.ContentOpts{MediaType: "application/vnd.api+json"}). 49 Object() 50 51 data := obj.Value("data").Object() 52 data.HasValue("type", "io.cozy.settings") 53 data.HasValue("id", "io.cozy.settings.clients-usage") 54 55 attrs := data.Value("attributes").Object() 56 attrs.NotContainsKey("limit") 57 attrs.HasValue("count", 1) 58 attrs.HasValue("limitReached", false) 59 attrs.HasValue("limitExceeded", false) 60 }) 61 62 t.Run("WithLimitNotReached", func(t *testing.T) { 63 testutils.WithFlag(t, testInstance, "cozy.oauthclients.max", float64(2)) 64 65 e := testutils.CreateTestClient(t, ts.URL) 66 obj := e.GET("/settings/clients-usage"). 67 WithHeader("Authorization", "Bearer "+token). 68 Expect().Status(200). 69 JSON(httpexpect.ContentOpts{MediaType: "application/vnd.api+json"}). 70 Object() 71 72 data := obj.Value("data").Object() 73 data.HasValue("type", "io.cozy.settings") 74 data.HasValue("id", "io.cozy.settings.clients-usage") 75 76 attrs := data.Value("attributes").Object() 77 attrs.HasValue("limit", 2) 78 attrs.HasValue("count", 1) 79 attrs.HasValue("limitReached", false) 80 attrs.HasValue("limitExceeded", false) 81 }) 82 83 t.Run("WithLimitReached", func(t *testing.T) { 84 testutils.WithFlag(t, testInstance, "cozy.oauthclients.max", float64(1)) 85 86 e := testutils.CreateTestClient(t, ts.URL) 87 obj := e.GET("/settings/clients-usage"). 88 WithHeader("Authorization", "Bearer "+token). 89 Expect().Status(200). 90 JSON(httpexpect.ContentOpts{MediaType: "application/vnd.api+json"}). 91 Object() 92 93 data := obj.Value("data").Object() 94 data.HasValue("type", "io.cozy.settings") 95 data.HasValue("id", "io.cozy.settings.clients-usage") 96 97 attrs := data.Value("attributes").Object() 98 attrs.HasValue("limit", 1) 99 attrs.HasValue("count", 1) 100 attrs.HasValue("limitReached", true) 101 attrs.HasValue("limitExceeded", false) 102 }) 103 104 t.Run("WithLimitExceeded", func(t *testing.T) { 105 testutils.WithFlag(t, testInstance, "cozy.oauthclients.max", float64(0)) 106 107 e := testutils.CreateTestClient(t, ts.URL) 108 obj := e.GET("/settings/clients-usage"). 109 WithHeader("Authorization", "Bearer "+token). 110 Expect().Status(200). 111 JSON(httpexpect.ContentOpts{MediaType: "application/vnd.api+json"}). 112 Object() 113 114 data := obj.Value("data").Object() 115 data.HasValue("type", "io.cozy.settings") 116 data.HasValue("id", "io.cozy.settings.clients-usage") 117 118 attrs := data.Value("attributes").Object() 119 attrs.HasValue("limit", 0) 120 attrs.HasValue("count", 1) 121 attrs.HasValue("limitReached", true) 122 attrs.HasValue("limitExceeded", true) 123 }) 124 }