github.com/GGP1/kure@v0.8.4/commands/card/edit/edit_test.go (about) 1 package edit 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "os" 7 "reflect" 8 "testing" 9 10 cmdutil "github.com/GGP1/kure/commands" 11 "github.com/GGP1/kure/config" 12 "github.com/GGP1/kure/db/card" 13 "github.com/GGP1/kure/pb" 14 15 "github.com/stretchr/testify/assert" 16 bolt "go.etcd.io/bbolt" 17 ) 18 19 func TestEditErrors(t *testing.T) { 20 db := cmdutil.SetContext(t) 21 createCard(t, db, "test") 22 23 cases := []struct { 24 set func() 25 desc string 26 name string 27 it string 28 }{ 29 { 30 desc: "Invalid name", 31 name: "", 32 set: func() {}, 33 }, 34 { 35 desc: "Non-existent entry", 36 name: "non-existent", 37 it: "true", 38 set: func() { 39 config.Set("editor", "non-existent") 40 }, 41 }, 42 } 43 44 cmd := NewCmd(db) 45 46 for _, tc := range cases { 47 t.Run(tc.desc, func(t *testing.T) { 48 tc.set() 49 cmd.SetArgs([]string{tc.name}) 50 cmd.Flags().Set("it", tc.it) 51 52 err := cmd.Execute() 53 assert.Error(t, err) 54 }) 55 } 56 } 57 58 func TestCreateTempFile(t *testing.T) { 59 card := &pb.Card{Name: "test-create-file"} 60 filename, err := createTempFile(card) 61 assert.NoError(t, err, "Failed creating the file") 62 defer os.Remove(filename) 63 64 content, err := os.ReadFile(filename) 65 assert.NoError(t, err, "Failed reading the file") 66 67 var got pb.Card 68 err = json.Unmarshal(content, &got) 69 assert.NoError(t, err, "Failed reading the file") 70 71 if !reflect.DeepEqual(card, &got) { 72 t.Error("Expected cards to be deep equal") 73 } 74 } 75 76 func TestReadTmpFile(t *testing.T) { 77 t.Run("Valid", func(t *testing.T) { 78 _, err := readTmpFile("testdata/test_read.json") 79 assert.NoError(t, err) 80 }) 81 82 t.Run("Errors", func(t *testing.T) { 83 dir, _ := os.Getwd() 84 os.Chdir("testdata") 85 // Go back to the initial directory 86 defer os.Chdir(dir) 87 88 cases := []struct { 89 desc string 90 filename string 91 }{ 92 { 93 desc: "Does not exists", 94 filename: "does_not_exists.json", 95 }, 96 { 97 desc: "EOF", 98 filename: "test_read_EOF.json", 99 }, 100 } 101 102 for _, tc := range cases { 103 t.Run(tc.desc, func(t *testing.T) { 104 _, err := readTmpFile(tc.filename) 105 assert.Error(t, err) 106 }) 107 } 108 }) 109 } 110 111 func TestUpdateCard(t *testing.T) { 112 db := cmdutil.SetContext(t) 113 name := "test_update" 114 createCard(t, db, name) 115 116 newName := "new_name" 117 newCard := &pb.Card{ 118 Name: newName, 119 Type: "", 120 Number: "12345678", 121 SecurityCode: "1234", 122 ExpireDate: "12/2023", 123 Notes: "", 124 } 125 126 err := updateCard(db, name, newCard) 127 assert.NoError(t, err) 128 129 c, err := card.Get(db, newName) 130 assert.NoError(t, err) 131 132 assert.NotEqual(t, newCard, c) 133 134 t.Run("Invalid name", func(t *testing.T) { 135 newCard.Name = "" 136 err := updateCard(db, "fail", newCard) 137 assert.Error(t, err) 138 }) 139 } 140 141 func TestUseStdin(t *testing.T) { 142 db := cmdutil.SetContext(t) 143 144 oldCard := &pb.Card{ 145 Name: "test", 146 Type: "", 147 Number: "12345678", 148 SecurityCode: "1234", 149 ExpireDate: "06/2023", 150 Notes: "test\nnotes", 151 } 152 153 buf := bytes.NewBufferString("\nCredit\n\n-\n\n-<\n") 154 155 err := useStdin(db, buf, oldCard) 156 assert.NoError(t, err) 157 158 got, err := card.Get(db, "test") 159 assert.NoError(t, err) 160 161 assert.Equal(t, "Credit", got.Type) 162 assert.Equal(t, oldCard.Number, got.Number) 163 assert.Empty(t, got.SecurityCode) 164 assert.Equal(t, oldCard.ExpireDate, got.ExpireDate) 165 assert.Empty(t, got.Notes) 166 } 167 168 func TestPostRun(t *testing.T) { 169 NewCmd(nil).PostRun(nil, nil) 170 } 171 172 func createCard(t *testing.T, db *bolt.DB, name string) { 173 t.Helper() 174 err := card.Create(db, &pb.Card{Name: name}) 175 assert.NoError(t, err, "Failed creating the card") 176 }