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  }