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  }