github.com/cozy/cozy-stack@v0.0.0-20240603063001-31110fa4cae1/model/vfs/metadata_test.go (about) 1 package vfs_test 2 3 import ( 4 "errors" 5 "io" 6 "os" 7 "testing" 8 "time" 9 10 "github.com/cozy/cozy-stack/model/vfs" 11 "github.com/cozy/cozy-stack/pkg/config/config" 12 "github.com/cozy/cozy-stack/pkg/consts" 13 "github.com/cozy/cozy-stack/tests/testutils" 14 "github.com/stretchr/testify/assert" 15 ) 16 17 func TestMetadata(t *testing.T) { 18 if testing.Short() { 19 t.Skip("an instance is required for this test: test skipped due to the use of --short flag") 20 } 21 22 config.UseTestFile(t) 23 testutils.NeedCouchdb(t) 24 25 t.Run("ImageMetadataExtractor", func(t *testing.T) { 26 doc := &vfs.FileDoc{Mime: "image/png"} 27 extractor := vfs.NewMetaExtractor(doc) 28 assert.NotNil(t, extractor) 29 f, err := os.Open("../../assets/icon-192.png") 30 assert.NoError(t, err) 31 defer f.Close() 32 _, err = io.Copy(*extractor, f) 33 assert.True(t, err == nil || errors.Is(err, io.ErrClosedPipe)) 34 err = (*extractor).Close() 35 assert.NoError(t, err) 36 meta := (*extractor).Result() 37 version, ok := meta["extractor_version"].(int) 38 assert.True(t, ok, "extractor_version is present") 39 assert.Equal(t, vfs.MetadataExtractorVersion, version) 40 w, ok := meta["width"].(int) 41 assert.True(t, ok, "width is present") 42 assert.Equal(t, 192, w) 43 h, ok := meta["height"].(int) 44 assert.True(t, ok, "height is present") 45 assert.Equal(t, 192, h) 46 }) 47 48 t.Run("ExifMetadataExtractor", func(t *testing.T) { 49 doc := &vfs.FileDoc{Mime: "image/jpeg"} 50 extractor := vfs.NewMetaExtractor(doc) 51 assert.NotNil(t, extractor) 52 f, err := os.Open("../../tests/fixtures/wet-cozy_20160910__M4Dz.jpg") 53 assert.NoError(t, err) 54 defer f.Close() 55 _, err = io.Copy(*extractor, f) 56 _ = (*extractor).Close() 57 assert.NoError(t, err) 58 meta := (*extractor).Result() 59 version, ok := meta["extractor_version"].(int) 60 assert.True(t, ok, "extractor_version is present") 61 assert.Equal(t, vfs.MetadataExtractorVersion, version) 62 dt, ok := meta["datetime"].(time.Time) 63 assert.True(t, ok, "datetime is present") 64 year, month, day := dt.Date() 65 assert.Equal(t, 2016, year) 66 assert.Equal(t, time.September, month) 67 assert.Equal(t, 10, day) 68 w, ok := meta["width"].(int) 69 assert.True(t, ok, "width is present") 70 assert.Equal(t, 440, w) 71 h, ok := meta["height"].(int) 72 assert.True(t, ok, "height is present") 73 assert.Equal(t, 294, h) 74 }) 75 76 t.Run("ShortcutMetadataExtractor", func(t *testing.T) { 77 doc := &vfs.FileDoc{ 78 Mime: consts.ShortcutMimeType, 79 CozyMetadata: &vfs.FilesCozyMetadata{ 80 CreatedOn: "http://cozy.localhost:8080/", 81 }, 82 } 83 extractor := vfs.NewMetaExtractor(doc) 84 assert.NotNil(t, extractor) 85 f, err := os.Open("../../tests/fixtures/shortcut.url") 86 assert.NoError(t, err) 87 defer f.Close() 88 _, err = io.Copy(*extractor, f) 89 _ = (*extractor).Close() 90 assert.NoError(t, err) 91 meta := (*extractor).Result() 92 version, ok := meta["extractor_version"].(int) 93 assert.True(t, ok, "extractor_version is present") 94 assert.Equal(t, vfs.MetadataExtractorVersion, version) 95 target, ok := meta["target"].(map[string]interface{}) 96 assert.True(t, ok, "target is present in metadata") 97 cm, ok := target["cozyMetadata"].(map[string]interface{}) 98 assert.True(t, ok, "target.cozyMetadata is present") 99 cozy, ok := cm["instance"].(string) 100 assert.True(t, ok, "target.cozyMetadata.instance is present") 101 assert.Equal(t, "cozy.localhost:8080", cozy) 102 app, ok := target["app"] 103 assert.True(t, ok, "target.app is present") 104 assert.Equal(t, "drive", app) 105 }) 106 }