github.com/GGP1/kure@v0.8.4/commands/file/cat/cat_test.go (about) 1 package cat 2 3 import ( 4 "bytes" 5 "testing" 6 7 cmdutil "github.com/GGP1/kure/commands" 8 "github.com/GGP1/kure/db/file" 9 "github.com/GGP1/kure/pb" 10 11 "github.com/atotto/clipboard" 12 "github.com/stretchr/testify/assert" 13 bolt "go.etcd.io/bbolt" 14 ) 15 16 func TestCat(t *testing.T) { 17 db := cmdutil.SetContext(t) 18 19 name1 := "test.txt" 20 name2 := "testall2/subfolder/file.txt" 21 createFiles(t, db, name1, name2) 22 23 cases := []struct { 24 desc string 25 expected string 26 copy string 27 args []string 28 }{ 29 { 30 desc: "Read files", 31 args: []string{name1, name2}, 32 expected: "test\ntesting file\n", 33 copy: "false", 34 }, 35 { 36 desc: "Read and copy to clipboard", 37 args: []string{name1}, 38 expected: "test\n", 39 copy: "true", 40 }, 41 } 42 43 for _, tc := range cases { 44 t.Run(tc.desc, func(t *testing.T) { 45 var buf bytes.Buffer 46 cmd := NewCmd(db, &buf) 47 cmd.SetArgs(tc.args) 48 cmd.Flags().Set("copy", tc.copy) 49 50 if clipboard.Unsupported && tc.copy == "true" { 51 t.Skip("No clipboard utilities available") 52 } 53 54 err := cmd.Execute() 55 assert.NoError(t, err) 56 57 // Compare output 58 got := buf.String() 59 assert.Equal(t, tc.expected, got) 60 61 // Compare clipboard 62 if tc.copy == "true" { 63 gotClip, err := clipboard.ReadAll() 64 assert.NoError(t, err, "Failed reading form the clipboard") 65 66 assert.Equal(t, tc.expected, gotClip) 67 } 68 }) 69 } 70 } 71 72 func TestCatErrors(t *testing.T) { 73 db := cmdutil.SetContext(t) 74 75 cases := []struct { 76 desc string 77 args []string 78 }{ 79 { 80 desc: "Invalid name", 81 args: []string{""}, 82 }, 83 { 84 desc: "Non-existent", 85 args: []string{"non-existent"}, 86 }, 87 } 88 89 for _, tc := range cases { 90 t.Run(tc.desc, func(t *testing.T) { 91 cmd := NewCmd(db, nil) 92 cmd.SetArgs(tc.args) 93 94 err := cmd.Execute() 95 assert.Error(t, err) 96 }) 97 } 98 } 99 100 func TestPostRun(t *testing.T) { 101 NewCmd(nil, nil).PostRun(nil, nil) 102 } 103 104 func createFiles(t *testing.T, db *bolt.DB, name1, name2 string) { 105 f1 := &pb.File{ 106 Name: name1, 107 Content: []byte("test"), 108 } 109 err := file.Create(db, f1) 110 assert.NoError(t, err, "Failed creating first file") 111 f2 := &pb.File{ 112 Name: name2, 113 Content: []byte("testing file"), 114 } 115 err = file.Create(db, f2) 116 assert.NoError(t, err, "Failed creating second file") 117 }