From bc54d687be47f9af89884b2cbc58ec07916c9eed Mon Sep 17 00:00:00 2001 From: Dmitry Salakhov Date: Tue, 11 Jan 2022 10:26:41 +1300 Subject: [PATCH] refactor: unit tests (#6367) --- api/filesystem/filesystem_move_test.go | 83 ++++++++++++++++---------- 1 file changed, 53 insertions(+), 30 deletions(-) diff --git a/api/filesystem/filesystem_move_test.go b/api/filesystem/filesystem_move_test.go index 863075399..647431361 100644 --- a/api/filesystem/filesystem_move_test.go +++ b/api/filesystem/filesystem_move_test.go @@ -1,7 +1,6 @@ package filesystem import ( - "fmt" "os" "path" "testing" @@ -9,41 +8,65 @@ import ( "github.com/stretchr/testify/assert" ) -// temporary function until upgrade to 1.16 -func tempDir(t *testing.T) string { - tmpDir, err := os.MkdirTemp("", "dir") - assert.NoError(t, err, "MkdirTemp should not fail") +func Test_movePath_shouldFailIfSourceDirDoesNotExist(t *testing.T) { + sourceDir := "missing" + destinationDir := t.TempDir() + file1 := addFile(destinationDir, "dir", "file") + file2 := addFile(destinationDir, "file") - return tmpDir + err := MoveDirectory(sourceDir, destinationDir) + assert.Error(t, err, "move directory should fail when source path is missing") + assert.FileExists(t, file1, "destination dir contents should remain") + assert.FileExists(t, file2, "destination dir contents should remain") } -func Test_movePath_shouldFailIfOriginalPathDoesntExist(t *testing.T) { - tmpDir := tempDir(t) - missingPath := path.Join(tmpDir, "missing") - targetPath := path.Join(tmpDir, "target") +func Test_movePath_shouldFailIfDestinationDirExists(t *testing.T) { + sourceDir := t.TempDir() + file1 := addFile(sourceDir, "dir", "file") + file2 := addFile(sourceDir, "file") + destinationDir := t.TempDir() + file3 := addFile(destinationDir, "dir", "file") + file4 := addFile(destinationDir, "file") - defer os.RemoveAll(tmpDir) - - err := MoveDirectory(missingPath, targetPath) - assert.Error(t, err, "move directory should fail when target path exists") + err := MoveDirectory(sourceDir, destinationDir) + assert.Error(t, err, "move directory should fail when destination directory already exists") + assert.FileExists(t, file1, "source dir contents should remain") + assert.FileExists(t, file2, "source dir contents should remain") + assert.FileExists(t, file3, "destination dir contents should remain") + assert.FileExists(t, file4, "destination dir contents should remain") } -func Test_movePath_shouldFailIfTargetPathDoesExist(t *testing.T) { - originalPath := tempDir(t) - missingPath := tempDir(t) +func Test_movePath_successWhenSourceExistsAndDestinationIsMissing(t *testing.T) { + tmp := t.TempDir() + sourceDir := path.Join(tmp, "source") + os.Mkdir(sourceDir, 0766) + file1 := addFile(sourceDir, "dir", "file") + file2 := addFile(sourceDir, "file") + destinationDir := path.Join(tmp, "destination") - defer os.RemoveAll(originalPath) - defer os.RemoveAll(missingPath) - - err := MoveDirectory(originalPath, missingPath) - assert.Error(t, err, "move directory should fail when target path exists") -} - -func Test_movePath_success(t *testing.T) { - originalPath := tempDir(t) - - defer os.RemoveAll(originalPath) - - err := MoveDirectory(originalPath, fmt.Sprintf("%s-old", originalPath)) + err := MoveDirectory(sourceDir, destinationDir) assert.NoError(t, err) + assert.NoFileExists(t, file1, "source dir contents should be moved") + assert.NoFileExists(t, file2, "source dir contents should be moved") + assertFileContent(t, path.Join(destinationDir, "file")) + assertFileContent(t, path.Join(destinationDir, "dir", "file")) +} + +var content []byte = []byte("content") + +func addFile(fileParts ...string) (filepath string) { + if len(fileParts) > 2 { + dir := path.Join(fileParts[:len(fileParts)-1]...) + os.MkdirAll(dir, 0766) + } + + p := path.Join(fileParts...) + os.WriteFile(p, content, 0766) + return p +} + +func assertFileContent(t *testing.T, filePath string) { + actualContent, err := os.ReadFile(filePath) + assert.NoErrorf(t, err, "failed to read file %s", filePath) + assert.Equal(t, content, actualContent, "file %s content doesn't match", filePath) }