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  }