github.com/GGP1/kure@v0.8.4/commands/edit/edit_test.go (about) 1 package edit 2 3 import ( 4 "encoding/json" 5 "os" 6 "strconv" 7 "testing" 8 9 cmdutil "github.com/GGP1/kure/commands" 10 "github.com/GGP1/kure/config" 11 "github.com/GGP1/kure/db/entry" 12 "github.com/GGP1/kure/pb" 13 14 "github.com/stretchr/testify/assert" 15 bolt "go.etcd.io/bbolt" 16 ) 17 18 func TestEditErrors(t *testing.T) { 19 db := cmdutil.SetContext(t) 20 createEntry(t, db, "test") 21 22 cases := []struct { 23 set func() 24 desc string 25 name string 26 it bool 27 }{ 28 { 29 desc: "Invalid name", 30 name: "", 31 }, 32 { 33 desc: "Executable not found", 34 name: "test", 35 it: true, 36 set: func() { 37 config.Set("editor", "non-existent") 38 }, 39 }, 40 } 41 42 for _, tc := range cases { 43 t.Run(tc.desc, func(t *testing.T) { 44 if tc.set != nil { 45 tc.set() 46 } 47 cmd := NewCmd(db) 48 cmd.SetArgs([]string{tc.name}) 49 f := cmd.Flags() 50 f.Set("it", strconv.FormatBool(tc.it)) 51 52 err := cmd.Execute() 53 assert.Error(t, err) 54 }) 55 } 56 } 57 58 func TestCreateTempFile(t *testing.T) { 59 e := &pb.Entry{ 60 Name: "test-create-file", 61 Expires: "Never", 62 } 63 64 filename, err := createTempFile(e) 65 assert.NoError(t, err, "Failed creating the file") 66 defer os.Remove(filename) 67 68 content, err := os.ReadFile(filename) 69 assert.NoError(t, err, "Failed reading the file") 70 71 var got pb.Entry 72 err = json.Unmarshal(content, &got) 73 assert.NoError(t, err, "Failed reading the file") 74 75 assert.Equal(t, e, &got) 76 } 77 78 func TestReadTmpFile(t *testing.T) { 79 t.Run("Valid", func(t *testing.T) { 80 _, err := readTmpFile("testdata/test_read.json") 81 assert.NoError(t, err) 82 }) 83 84 t.Run("Errors", func(t *testing.T) { 85 dir, _ := os.Getwd() 86 os.Chdir("testdata") 87 // Go back to the initial directory 88 defer os.Chdir(dir) 89 90 cases := []struct { 91 desc string 92 filename string 93 }{ 94 { 95 desc: "Does not exists", 96 filename: "does_not_exists.json", 97 }, 98 { 99 desc: "EOF", 100 filename: "test_read_EOF.json", 101 }, 102 } 103 104 for _, tc := range cases { 105 t.Run(tc.desc, func(t *testing.T) { 106 _, err := readTmpFile(tc.filename) 107 assert.Error(t, err) 108 }) 109 } 110 }) 111 } 112 113 func TestUpdateEntry(t *testing.T) { 114 db := cmdutil.SetContext(t) 115 name := "test_update" 116 createEntry(t, db, name) 117 118 newName := "new_name" 119 newEntry := &pb.Entry{ 120 Name: newName, 121 Username: "test", 122 Password: "q8rvq63r/q", 123 URL: "https://www.github.com/GGP1/kure", 124 Expires: "02/12/2023", 125 Notes: "", 126 } 127 128 err := updateEntry(db, name, newEntry) 129 assert.NoError(t, err) 130 131 e, err := entry.Get(db, newName) 132 assert.NoError(t, err) 133 134 assert.NotEqual(t, newEntry, e) 135 136 t.Run("Invalid name", func(t *testing.T) { 137 newEntry.Name = "" 138 err := updateEntry(db, "fail", newEntry) 139 assert.Error(t, err) 140 }) 141 } 142 143 func TestPostRun(t *testing.T) { 144 NewCmd(nil).PostRun(nil, nil) 145 } 146 147 func createEntry(t *testing.T, db *bolt.DB, name string) { 148 t.Helper() 149 e := &pb.Entry{ 150 Name: name, 151 Expires: "Never", 152 } 153 154 err := entry.Create(db, e) 155 assert.NoError(t, err) 156 }