github.com/GGP1/kure@v0.8.4/commands/file/cat/cat_test.go (about)

     1  package cat
     2  
     3  import (
     4  	"bytes"
     5  	"testing"
     6  
     7  	cmdutil "github.com/GGP1/kure/commands"
     8  	"github.com/GGP1/kure/db/file"
     9  	"github.com/GGP1/kure/pb"
    10  
    11  	"github.com/atotto/clipboard"
    12  	"github.com/stretchr/testify/assert"
    13  	bolt "go.etcd.io/bbolt"
    14  )
    15  
    16  func TestCat(t *testing.T) {
    17  	db := cmdutil.SetContext(t)
    18  
    19  	name1 := "test.txt"
    20  	name2 := "testall2/subfolder/file.txt"
    21  	createFiles(t, db, name1, name2)
    22  
    23  	cases := []struct {
    24  		desc     string
    25  		expected string
    26  		copy     string
    27  		args     []string
    28  	}{
    29  		{
    30  			desc:     "Read files",
    31  			args:     []string{name1, name2},
    32  			expected: "test\ntesting file\n",
    33  			copy:     "false",
    34  		},
    35  		{
    36  			desc:     "Read and copy to clipboard",
    37  			args:     []string{name1},
    38  			expected: "test\n",
    39  			copy:     "true",
    40  		},
    41  	}
    42  
    43  	for _, tc := range cases {
    44  		t.Run(tc.desc, func(t *testing.T) {
    45  			var buf bytes.Buffer
    46  			cmd := NewCmd(db, &buf)
    47  			cmd.SetArgs(tc.args)
    48  			cmd.Flags().Set("copy", tc.copy)
    49  
    50  			if clipboard.Unsupported && tc.copy == "true" {
    51  				t.Skip("No clipboard utilities available")
    52  			}
    53  
    54  			err := cmd.Execute()
    55  			assert.NoError(t, err)
    56  
    57  			// Compare output
    58  			got := buf.String()
    59  			assert.Equal(t, tc.expected, got)
    60  
    61  			// Compare clipboard
    62  			if tc.copy == "true" {
    63  				gotClip, err := clipboard.ReadAll()
    64  				assert.NoError(t, err, "Failed reading form the clipboard")
    65  
    66  				assert.Equal(t, tc.expected, gotClip)
    67  			}
    68  		})
    69  	}
    70  }
    71  
    72  func TestCatErrors(t *testing.T) {
    73  	db := cmdutil.SetContext(t)
    74  
    75  	cases := []struct {
    76  		desc string
    77  		args []string
    78  	}{
    79  		{
    80  			desc: "Invalid name",
    81  			args: []string{""},
    82  		},
    83  		{
    84  			desc: "Non-existent",
    85  			args: []string{"non-existent"},
    86  		},
    87  	}
    88  
    89  	for _, tc := range cases {
    90  		t.Run(tc.desc, func(t *testing.T) {
    91  			cmd := NewCmd(db, nil)
    92  			cmd.SetArgs(tc.args)
    93  
    94  			err := cmd.Execute()
    95  			assert.Error(t, err)
    96  		})
    97  	}
    98  }
    99  
   100  func TestPostRun(t *testing.T) {
   101  	NewCmd(nil, nil).PostRun(nil, nil)
   102  }
   103  
   104  func createFiles(t *testing.T, db *bolt.DB, name1, name2 string) {
   105  	f1 := &pb.File{
   106  		Name:    name1,
   107  		Content: []byte("test"),
   108  	}
   109  	err := file.Create(db, f1)
   110  	assert.NoError(t, err, "Failed creating first file")
   111  	f2 := &pb.File{
   112  		Name:    name2,
   113  		Content: []byte("testing file"),
   114  	}
   115  	err = file.Create(db, f2)
   116  	assert.NoError(t, err, "Failed creating second file")
   117  }