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  }