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  }