github.com/k0marov/go-socnet@v0.0.0-20220715154813-90d07867c782/features/posts/store/file_storage/file_storage_test.go (about) 1 package file_storage_test 2 3 import ( 4 "github.com/k0marov/go-socnet/core/general/core_values" 5 . "github.com/k0marov/go-socnet/core/helpers/test_helpers" 6 "path/filepath" 7 "reflect" 8 "strconv" 9 "testing" 10 11 "github.com/k0marov/go-socnet/features/posts/domain/values" 12 "github.com/k0marov/go-socnet/features/posts/store/file_storage" 13 profiles "github.com/k0marov/go-socnet/features/profiles/store/file_storage" 14 ) 15 16 func TestPostImageFilesCreator(t *testing.T) { 17 post := RandomString() 18 author := RandomString() 19 images := []values.PostImageFile{{RandomFileData(), 1}, {RandomFileData(), 2}} 20 paths := []core_values.StaticPath{RandomString(), RandomString()} 21 t.Run("happy case", func(t *testing.T) { 22 wantDir := filepath.Join(profiles.ProfilePrefix+author, file_storage.PostPrefix+post) 23 filesStored := 0 24 createFile := func(file core_values.FileData, dir string, filename string) (core_values.StaticPath, error) { 25 wantFilename := file_storage.ImagePrefix + strconv.Itoa(filesStored+1) 26 if filename == wantFilename && dir == wantDir && reflect.DeepEqual(file, images[filesStored].File) { 27 filesStored++ 28 return paths[filesStored-1], nil 29 } 30 panic("unexpected args") 31 } 32 gotPaths, err := file_storage.NewPostImageFilesCreator(createFile)(post, author, images) 33 AssertNoError(t, err) 34 Assert(t, gotPaths, paths, "returned paths") 35 Assert(t, filesStored, len(images), "number of stored files") 36 }) 37 t.Run("error case", func(t *testing.T) { 38 createFile := func(core_values.FileData, string, string) (core_values.StaticPath, error) { 39 return "", RandomError() 40 } 41 _, err := file_storage.NewPostImageFilesCreator(createFile)(post, author, images) 42 AssertSomeError(t, err) 43 }) 44 } 45 46 func TestPostFilesDeleter(t *testing.T) { 47 post := RandomString() 48 author := RandomString() 49 t.Run("happy case", func(t *testing.T) { 50 wantDir := filepath.Join(profiles.GetProfileDir(author), file_storage.PostPrefix+post) 51 deleteDir := func(dir string) error { 52 if dir == wantDir { 53 return nil 54 } 55 panic("unexpected args") 56 } 57 err := file_storage.NewPostFilesDeleter(deleteDir)(post, author) 58 AssertNoError(t, err) 59 }) 60 t.Run("error case", func(t *testing.T) { 61 deleteDir := func(string) error { 62 return RandomError() 63 } 64 err := file_storage.NewPostFilesDeleter(deleteDir)(post, author) 65 AssertSomeError(t, err) 66 }) 67 }