github.com/cozy/cozy-stack@v0.0.0-20240603063001-31110fa4cae1/pkg/assets/dynamic/impl_afero_test.go (about) 1 package dynamic 2 3 import ( 4 "context" 5 "crypto/sha256" 6 "encoding/hex" 7 "sort" 8 "testing" 9 10 "github.com/cozy/cozy-stack/pkg/assets/model" 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 ) 14 15 func TestAferoFS(t *testing.T) { 16 addAsset := func(t *testing.T, fs *AferoFS, contextName, assetName string, content []byte) error { 17 h := sha256.New() 18 sum := h.Sum(content) 19 20 opt := model.AssetOption{ 21 Name: "/" + assetName, 22 Context: contextName, 23 URL: "file:/" + assetName, 24 Shasum: hex.EncodeToString(sum), 25 IsCustom: true, 26 } 27 asset := model.NewAsset(opt, content, nil) 28 29 return fs.Add(contextName, assetName, asset) 30 } 31 32 t.Run("GetAssetFolderName", func(t *testing.T) { 33 fs := NewInMemoryFS() 34 folderName := fs.GetAssetFolderName("my-context", "asset") 35 assert.Equal(t, "my-context/asset", folderName) 36 }) 37 38 t.Run("CheckStatus", func(t *testing.T) { 39 fs := NewInMemoryFS() 40 _, err := fs.CheckStatus(context.Background()) 41 require.NoError(t, err) 42 }) 43 44 t.Run("Add and Get", func(t *testing.T) { 45 fs := NewInMemoryFS() 46 content := []byte("content of foo.js") 47 require.NoError(t, addAsset(t, fs, "my-context", "foo.js", content)) 48 actual, err := fs.Get("my-context", "/foo.js") 49 require.NoError(t, err) 50 require.Equal(t, content, actual) 51 }) 52 53 t.Run("Remove", func(t *testing.T) { 54 fs := NewInMemoryFS() 55 content := []byte("content of foo.js") 56 require.NoError(t, addAsset(t, fs, "my-context", "foo.js", content)) 57 require.NoError(t, fs.Remove("my-context", "/foo.js")) 58 _, err := fs.Get("my-context", "/foo.js") 59 assert.Error(t, err) 60 }) 61 62 t.Run("List", func(t *testing.T) { 63 fs := NewInMemoryFS() 64 foo := []byte("content of foo.js") 65 require.NoError(t, addAsset(t, fs, "context-one", "foo.js", foo)) 66 bar := []byte("content of bar.js") 67 require.NoError(t, addAsset(t, fs, "context-two", "bar.js", bar)) 68 baz := []byte("content of baz.js") 69 require.NoError(t, addAsset(t, fs, "context-two", "baz.js", baz)) 70 list, err := fs.List() 71 require.NoError(t, err) 72 require.Len(t, list, 2) 73 var names []string 74 for contextName, assets := range list { 75 for _, asset := range assets { 76 assert.Equal(t, contextName, asset.AssetOption.Context) 77 names = append(names, contextName+asset.AssetOption.Name) 78 } 79 } 80 sort.Strings(names) 81 expected := []string{ 82 "context-one/foo.js", 83 "context-two/bar.js", 84 "context-two/baz.js", 85 } 86 assert.Equal(t, expected, names) 87 }) 88 }