github.com/GGP1/kure@v0.8.4/commands/file/edit/edit_test.go (about)

     1  package edit
     2  
     3  import (
     4  	"os"
     5  	"testing"
     6  	"time"
     7  
     8  	cmdutil "github.com/GGP1/kure/commands"
     9  	"github.com/GGP1/kure/db/file"
    10  	"github.com/GGP1/kure/pb"
    11  
    12  	"github.com/stretchr/testify/assert"
    13  )
    14  
    15  func TestEditErrors(t *testing.T) {
    16  	db := cmdutil.SetContext(t)
    17  
    18  	err := file.Create(db, &pb.File{Name: "test"})
    19  	assert.NoError(t, err, "Failed creating file")
    20  
    21  	cases := []struct {
    22  		desc   string
    23  		name   string
    24  		editor string
    25  		create bool
    26  	}{
    27  		{
    28  			desc: "Invalid name",
    29  			name: "",
    30  		},
    31  		{
    32  			desc:   "Non installed text editor",
    33  			name:   "test",
    34  			editor: "non-installed-text-editor",
    35  		},
    36  		{
    37  			desc:   "Non-existent entry",
    38  			name:   "non-existent",
    39  			editor: "nano",
    40  		},
    41  	}
    42  
    43  	for _, tc := range cases {
    44  		t.Run(tc.desc, func(t *testing.T) {
    45  			cmd := NewCmd(db)
    46  			cmd.SetArgs([]string{tc.name})
    47  			cmd.Flags().Set("editor", tc.editor)
    48  
    49  			err := cmd.Execute()
    50  			assert.Error(t, err)
    51  		})
    52  	}
    53  }
    54  
    55  func TestCreateTempFile(t *testing.T) {
    56  	expected := []byte("content")
    57  
    58  	filename, err := createTempFile(".txt", expected)
    59  	assert.NoError(t, err, "Failed creating the file")
    60  
    61  	got, err := os.ReadFile(filename)
    62  	assert.NoError(t, err, "Failed reading temporary file")
    63  
    64  	assert.Equal(t, expected, got)
    65  }
    66  
    67  func TestWatchFile(t *testing.T) {
    68  	f, err := os.CreateTemp("", "*")
    69  	assert.NoError(t, err)
    70  	defer f.Close()
    71  
    72  	go func(f *os.File) {
    73  		// Sleep to wait for the file to be watched
    74  		time.Sleep(50 * time.Millisecond)
    75  		_, err := f.Write([]byte("anything"))
    76  		assert.NoError(t, err)
    77  	}(f)
    78  
    79  	err = watchFile(f.Name())
    80  	assert.NoError(t, err)
    81  }
    82  
    83  func TestUpdate(t *testing.T) {
    84  	db := cmdutil.SetContext(t)
    85  
    86  	expectedContent := []byte("test")
    87  	name := "test_read_and_update.txt"
    88  	f := &pb.File{
    89  		Name:    name,
    90  		Content: expectedContent,
    91  	}
    92  
    93  	err := update(db, f, "../testdata/test_read&update.txt")
    94  	assert.NoError(t, err, "Updating record")
    95  
    96  	got, err := file.Get(db, name)
    97  	assert.NoError(t, err, "The file wasn't created")
    98  
    99  	assert.Equal(t, expectedContent, got.Content)
   100  }
   101  
   102  func TestPostRun(t *testing.T) {
   103  	NewCmd(nil).PostRun(nil, nil)
   104  }