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  }