github.com/GGP1/kure@v0.8.4/commands/file/add/add_test.go (about) 1 package add 2 3 import ( 4 "bytes" 5 "fmt" 6 "testing" 7 8 cmdutil "github.com/GGP1/kure/commands" 9 "github.com/GGP1/kure/db/file" 10 "github.com/GGP1/kure/pb" 11 12 "github.com/stretchr/testify/assert" 13 ) 14 15 func TestAdd(t *testing.T) { 16 db := cmdutil.SetContext(t) 17 18 cases := []struct { 19 desc string 20 name string 21 ignore string 22 path string 23 semaphore string 24 }{ 25 { 26 desc: "Add a file", 27 name: "test", 28 path: "../testdata/test_file.txt", 29 semaphore: "1", 30 }, 31 { 32 desc: "Add all files synchronously", 33 name: "testAll", 34 path: "../testdata/", 35 semaphore: "1", 36 }, 37 { 38 desc: "Add all files using goroutines", 39 name: "testAll2", 40 path: "../testdata/", 41 semaphore: "8", 42 }, 43 { 44 desc: "Add all files ignoring subfolders", 45 name: "testAll3", 46 ignore: "true", 47 path: "../testdata/", 48 semaphore: "3", 49 }, 50 } 51 52 cmd := NewCmd(db, nil) 53 54 for _, tc := range cases { 55 t.Run(tc.desc, func(t *testing.T) { 56 cmd.SetArgs([]string{tc.name}) 57 f := cmd.Flags() 58 f.Set("ignore", tc.ignore) 59 f.Set("path", tc.path) 60 f.Set("semaphore", tc.semaphore) 61 62 var stderr bytes.Buffer 63 cmd.SetErr(&stderr) 64 65 err := cmd.Execute() 66 assert.NoError(t, err) 67 68 assert.LessOrEqual(t, stderr.Len(), 0, "Expected nothing on stderr") 69 }) 70 } 71 72 t.Run("Add note", func(t *testing.T) { 73 name := "test-notes" 74 expectedContent := []byte("note content") 75 buf := bytes.NewBufferString("note content<\n") 76 77 cmd := NewCmd(db, buf) 78 cmd.SetArgs([]string{name}) 79 cmd.Flags().Set("note", "true") 80 81 err := cmd.Execute() 82 assert.NoError(t, err, "Failed creating the note") 83 84 file, err := file.Get(db, fmt.Sprintf("notes/%s.txt", name)) 85 assert.NoError(t, err, "Couldn't find the note") 86 87 assert.Equal(t, file.Content, expectedContent) 88 }) 89 } 90 91 func TestAddErrors(t *testing.T) { 92 db := cmdutil.SetContext(t) 93 94 err := file.Create(db, &pb.File{Name: "already exists.txt"}) 95 assert.NoError(t, err, "Failed creating the file") 96 97 cases := []struct { 98 desc string 99 name string 100 path string 101 semaphore string 102 }{ 103 { 104 desc: "Invalid name", 105 name: "", 106 }, 107 { 108 desc: "Invalid semaphore", 109 name: "test", 110 path: "../testdata/test_file.txt", 111 semaphore: "0", 112 }, 113 { 114 desc: "Already exists", 115 name: "already exists.txt", 116 semaphore: "1", 117 path: "../testdata/test_file.txt", 118 }, 119 { 120 desc: "Non-existent", 121 name: "non-existent", 122 semaphore: "1", 123 path: "../testdata/non-existent.txt", 124 }, 125 { 126 desc: "Empty directory", 127 name: "empty-dir", 128 semaphore: "1", 129 path: "../testdata/empty", 130 }, 131 } 132 133 cmd := NewCmd(db, nil) 134 135 for _, tc := range cases { 136 t.Run(tc.desc, func(t *testing.T) { 137 cmd.SetArgs([]string{tc.name}) 138 f := cmd.Flags() 139 f.Set("path", tc.path) 140 f.Set("semaphore", tc.semaphore) 141 142 err := cmd.Execute() 143 assert.Error(t, err) 144 }) 145 } 146 } 147 148 func TestPostRun(t *testing.T) { 149 NewCmd(nil, nil).PostRun(nil, nil) 150 }