github.com/cozy/cozy-stack@v0.0.0-20240603063001-31110fa4cae1/web/shortcuts/shortcuts_test.go (about) 1 package shortcuts 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/cozy/cozy-stack/pkg/config/config" 8 "github.com/cozy/cozy-stack/pkg/consts" 9 "github.com/cozy/cozy-stack/tests/testutils" 10 "github.com/gavv/httpexpect/v2" 11 ) 12 13 const targetURL = "https://alice-photos.cozy.example/#/photos/629fb233be550a21174ac8e19f0043af" 14 15 func TestShortcuts(t *testing.T) { 16 if testing.Short() { 17 t.Skip("an instance is required for this test: test skipped due to the use of --short flag") 18 } 19 20 var shortcutID string 21 22 config.UseTestFile(t) 23 testutils.NeedCouchdb(t) 24 setup := testutils.NewSetup(t, t.Name()) 25 // _ = setup.GetTestInstance() 26 _, token := setup.GetTestClient(consts.Files) 27 28 ts := setup.GetTestServer("/shortcuts", Routes) 29 t.Cleanup(ts.Close) 30 31 // ts.Config.Handler.(*echo.Echo).HTTPErrorHandler = weberrors.ErrorHandler 32 33 t.Run("CreateShortcut", func(t *testing.T) { 34 e := testutils.CreateTestClient(t, ts.URL) 35 36 obj := e.POST("/shortcuts"). 37 WithHeader("Content-Type", "application/vnd.api+json"). 38 WithHeader("Authorization", "Bearer "+token). 39 WithBytes([]byte(`{ 40 "data": { 41 "type": "io.cozy.files.shortcuts", 42 "attributes": { 43 "name": "sunset.jpg.url", 44 "url": "` + targetURL + `", 45 "metadata": { 46 "target": { 47 "cozyMetadata": { 48 "instance": "https://alice.cozy.example/" 49 }, 50 "app": "photos", 51 "_type": "io.cozy.files", 52 "mime": "image/jpg" 53 } 54 } 55 } 56 } 57 }`)). 58 Expect().Status(201). 59 JSON(httpexpect.ContentOpts{MediaType: "application/vnd.api+json"}). 60 Object() 61 62 data := obj.Value("data").Object() 63 64 data.ValueEqual("type", "io.cozy.files") 65 shortcutID = data.Value("id").String().NotEmpty().Raw() 66 67 attrs := data.Value("attributes").Object() 68 attrs.ValueEqual("type", "file") 69 attrs.ValueEqual("name", "sunset.jpg.url") 70 attrs.ValueEqual("mime", "application/internet-shortcut") 71 72 cozyMeta := attrs.Value("cozyMetadata").Object() 73 cozyMeta.Value("createdAt").String().DateTime(time.RFC3339) 74 cozyMeta.Value("createdOn").String().Contains("https://testshortcuts_") 75 76 target := attrs.Value("metadata").Object().Value("target").Object() 77 target.ValueEqual("app", "photos") 78 target.ValueEqual("_type", "io.cozy.files") 79 target.ValueEqual("mime", "image/jpg") 80 }) 81 82 t.Run("GetShortcut", func(t *testing.T) { 83 e := testutils.CreateTestClient(t, ts.URL) 84 85 obj := e.GET("/shortcuts/"+shortcutID). 86 WithHeader("Accept", "application/json"). 87 WithHeader("Authorization", "Bearer "+token). 88 Expect().Status(200). 89 JSON(httpexpect.ContentOpts{MediaType: "application/vnd.api+json"}). 90 Object() 91 92 data := obj.Value("data").Object() 93 data.ValueEqual("type", "io.cozy.files.shortcuts") 94 data.ValueEqual("id", shortcutID) 95 96 attrs := data.Value("attributes").Object() 97 attrs.ValueEqual("name", "sunset.jpg.url") 98 attrs.ValueEqual("dir_id", "io.cozy.files.root-dir") 99 attrs.ValueEqual("url", targetURL) 100 101 target := attrs.Value("metadata").Object().Value("target").Object() 102 target.ValueEqual("app", "photos") 103 target.ValueEqual("_type", "io.cozy.files") 104 target.ValueEqual("mime", "image/jpg") 105 106 e.GET("/shortcuts/"+shortcutID). 107 WithRedirectPolicy(httpexpect.DontFollowRedirects). 108 WithHeader("Authorization", "Bearer "+token). 109 WithHeader("Accept", "text/html"). 110 Expect().Status(303). 111 Header("Location").Equal(targetURL) 112 }) 113 }