github.com/soulteary/pocket-bookcase@v0.0.0-20240428065142-0b5a9a0fc98a/internal/domains/storage_test.go (about) 1 package domains_test 2 3 import ( 4 "context" 5 "os" 6 "testing" 7 8 "github.com/sirupsen/logrus" 9 "github.com/soulteary/pocket-bookcase/internal/config" 10 "github.com/soulteary/pocket-bookcase/internal/dependencies" 11 "github.com/soulteary/pocket-bookcase/internal/domains" 12 "github.com/spf13/afero" 13 "github.com/stretchr/testify/require" 14 ) 15 16 func TestDirExists(t *testing.T) { 17 fs := afero.NewMemMapFs() 18 fs.MkdirAll("foo", 0755) 19 20 domain := domains.NewStorageDomain( 21 &dependencies.Dependencies{ 22 Config: config.ParseServerConfiguration(context.TODO(), logrus.New()), 23 Log: logrus.New(), 24 }, 25 fs, 26 ) 27 28 require.True(t, domain.DirExists("foo")) 29 require.False(t, domain.DirExists("foo/file")) 30 require.False(t, domain.DirExists("bar")) 31 } 32 33 func TestFileExists(t *testing.T) { 34 fs := afero.NewMemMapFs() 35 fs.MkdirAll("foo", 0755) 36 fs.Create("foo/file") 37 38 domain := domains.NewStorageDomain( 39 &dependencies.Dependencies{ 40 Config: config.ParseServerConfiguration(context.TODO(), logrus.New()), 41 Log: logrus.New(), 42 }, 43 fs, 44 ) 45 46 require.True(t, domain.FileExists("foo/file")) 47 require.False(t, domain.FileExists("bar")) 48 } 49 50 func TestWriteFile(t *testing.T) { 51 fs := afero.NewMemMapFs() 52 53 domain := domains.NewStorageDomain( 54 &dependencies.Dependencies{ 55 Config: config.ParseServerConfiguration(context.TODO(), logrus.New()), 56 Log: logrus.New(), 57 }, 58 fs, 59 ) 60 61 err := domain.WriteData("foo/file.ext", []byte("foo")) 62 require.NoError(t, err) 63 require.True(t, domain.FileExists("foo/file.ext")) 64 require.True(t, domain.DirExists("foo")) 65 handler, err := domain.FS().Open("foo/file.ext") 66 require.NoError(t, err) 67 defer handler.Close() 68 69 data, err := afero.ReadAll(handler) 70 require.NoError(t, err) 71 72 require.Equal(t, "foo", string(data)) 73 } 74 75 func TestSaveFile(t *testing.T) { 76 fs := afero.NewMemMapFs() 77 78 domain := domains.NewStorageDomain( 79 &dependencies.Dependencies{ 80 Config: config.ParseServerConfiguration(context.TODO(), logrus.New()), 81 Log: logrus.New(), 82 }, 83 fs, 84 ) 85 86 tempFile, err := os.CreateTemp("", "") 87 require.NoError(t, err) 88 defer os.Remove(tempFile.Name()) 89 90 _, err = tempFile.WriteString("foo") 91 require.NoError(t, err) 92 93 err = domain.WriteFile("foo/file.ext", tempFile) 94 require.NoError(t, err) 95 require.True(t, domain.FileExists("foo/file.ext")) 96 require.True(t, domain.DirExists("foo")) 97 handler, err := domain.FS().Open("foo/file.ext") 98 require.NoError(t, err) 99 defer handler.Close() 100 101 data, err := afero.ReadAll(handler) 102 require.NoError(t, err) 103 104 require.Equal(t, "foo", string(data)) 105 }