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  }