github.com/GGP1/kure@v0.8.4/commands/file/mv/mv_test.go (about) 1 package mv 2 3 import ( 4 "path/filepath" 5 "runtime" 6 "strconv" 7 "strings" 8 "testing" 9 10 cmdutil "github.com/GGP1/kure/commands" 11 "github.com/GGP1/kure/db/file" 12 "github.com/GGP1/kure/pb" 13 14 "github.com/stretchr/testify/assert" 15 bolt "go.etcd.io/bbolt" 16 ) 17 18 func TestMv(t *testing.T) { 19 db := cmdutil.SetContext(t) 20 21 oldName := "test.txt" 22 newName := "renamed-test" // omit extension on purpose 23 createFile(t, db, oldName) 24 25 cmd := NewCmd(db) 26 cmd.SetArgs([]string{oldName, newName}) 27 28 err := cmd.Execute() 29 assert.NoError(t, err) 30 31 _, err = file.GetCheap(db, newName+".txt") 32 assert.NoError(t, err, "Failed getting the renamed file") 33 } 34 35 func TestMvDir(t *testing.T) { 36 db := cmdutil.SetContext(t) 37 38 oldDir := "directory/" 39 for i := 0; i < 2; i++ { 40 createFile(t, db, oldDir+strconv.Itoa(i)) 41 } 42 43 newDir := "folder/" 44 cmd := NewCmd(db) 45 cmd.SetArgs([]string{oldDir, newDir}) 46 47 err := cmd.Execute() 48 assert.NoError(t, err) 49 50 names, err := file.ListNames(db) 51 assert.NoError(t, err) 52 53 for _, name := range names { 54 if !strings.HasPrefix(name, newDir) { 55 t.Errorf("%q wasn't moved into %q", name, newDir) 56 } 57 } 58 } 59 60 func TestMvFileIntoDir(t *testing.T) { 61 db := cmdutil.SetContext(t) 62 63 filename := "directory/test.csv" 64 newDir := "folder/" 65 createFile(t, db, filename) 66 67 cmd := NewCmd(db) 68 cmd.SetArgs([]string{filename, newDir}) 69 70 err := cmd.Execute() 71 assert.NoError(t, err) 72 73 _, err = file.GetCheap(db, newDir+filepath.Base(filename)) 74 assert.NoError(t, err, "Failed getting the renamed file") 75 } 76 77 func TestMvErrors(t *testing.T) { 78 if runtime.GOOS != "windows" { 79 t.Skip("For some strange reason this test fails in unix systems because the database file throws \"bad file descriptor\"") 80 } 81 82 db := cmdutil.SetContext(t) 83 createFile(t, db, "exists") 84 dir := "dir/" 85 createFile(t, db, dir+"1") 86 87 cases := []struct { 88 desc string 89 oldName string 90 newName string 91 }{ 92 { 93 desc: "Invalid new name", 94 oldName: "exists", 95 newName: "", 96 }, 97 { 98 desc: "New name already exists", 99 oldName: "exists", 100 newName: "exists", 101 }, 102 { 103 desc: "File does not exist", 104 oldName: "non-existent", 105 newName: "test.txt", 106 }, 107 { 108 desc: "Dir into file", 109 oldName: dir, 110 newName: "test.txt", 111 }, 112 } 113 114 cmd := NewCmd(db) 115 116 for _, tc := range cases { 117 t.Run(tc.desc, func(t *testing.T) { 118 cmd.SetArgs([]string{tc.oldName, tc.newName}) 119 err := cmd.Execute() 120 assert.Error(t, err) 121 }) 122 } 123 } 124 125 func TestMissingArguments(t *testing.T) { 126 db := cmdutil.SetContext(t) 127 128 cmd := NewCmd(db) 129 cmd.SetArgs([]string{"oldName"}) 130 err := cmd.Execute() 131 assert.Error(t, err) 132 } 133 134 func createFile(t *testing.T, db *bolt.DB, name string) { 135 err := file.Create(db, &pb.File{Name: name}) 136 assert.NoError(t, err, "Failed creating file") 137 }