github.com/GGP1/kure@v0.8.4/commands/file/add/add_test.go (about)

     1  package add
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"testing"
     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 TestAdd(t *testing.T) {
    16  	db := cmdutil.SetContext(t)
    17  
    18  	cases := []struct {
    19  		desc      string
    20  		name      string
    21  		ignore    string
    22  		path      string
    23  		semaphore string
    24  	}{
    25  		{
    26  			desc:      "Add a file",
    27  			name:      "test",
    28  			path:      "../testdata/test_file.txt",
    29  			semaphore: "1",
    30  		},
    31  		{
    32  			desc:      "Add all files synchronously",
    33  			name:      "testAll",
    34  			path:      "../testdata/",
    35  			semaphore: "1",
    36  		},
    37  		{
    38  			desc:      "Add all files using goroutines",
    39  			name:      "testAll2",
    40  			path:      "../testdata/",
    41  			semaphore: "8",
    42  		},
    43  		{
    44  			desc:      "Add all files ignoring subfolders",
    45  			name:      "testAll3",
    46  			ignore:    "true",
    47  			path:      "../testdata/",
    48  			semaphore: "3",
    49  		},
    50  	}
    51  
    52  	cmd := NewCmd(db, nil)
    53  
    54  	for _, tc := range cases {
    55  		t.Run(tc.desc, func(t *testing.T) {
    56  			cmd.SetArgs([]string{tc.name})
    57  			f := cmd.Flags()
    58  			f.Set("ignore", tc.ignore)
    59  			f.Set("path", tc.path)
    60  			f.Set("semaphore", tc.semaphore)
    61  
    62  			var stderr bytes.Buffer
    63  			cmd.SetErr(&stderr)
    64  
    65  			err := cmd.Execute()
    66  			assert.NoError(t, err)
    67  
    68  			assert.LessOrEqual(t, stderr.Len(), 0, "Expected nothing on stderr")
    69  		})
    70  	}
    71  
    72  	t.Run("Add note", func(t *testing.T) {
    73  		name := "test-notes"
    74  		expectedContent := []byte("note content")
    75  		buf := bytes.NewBufferString("note content<\n")
    76  
    77  		cmd := NewCmd(db, buf)
    78  		cmd.SetArgs([]string{name})
    79  		cmd.Flags().Set("note", "true")
    80  
    81  		err := cmd.Execute()
    82  		assert.NoError(t, err, "Failed creating the note")
    83  
    84  		file, err := file.Get(db, fmt.Sprintf("notes/%s.txt", name))
    85  		assert.NoError(t, err, "Couldn't find the note")
    86  
    87  		assert.Equal(t, file.Content, expectedContent)
    88  	})
    89  }
    90  
    91  func TestAddErrors(t *testing.T) {
    92  	db := cmdutil.SetContext(t)
    93  
    94  	err := file.Create(db, &pb.File{Name: "already exists.txt"})
    95  	assert.NoError(t, err, "Failed creating the file")
    96  
    97  	cases := []struct {
    98  		desc      string
    99  		name      string
   100  		path      string
   101  		semaphore string
   102  	}{
   103  		{
   104  			desc: "Invalid name",
   105  			name: "",
   106  		},
   107  		{
   108  			desc:      "Invalid semaphore",
   109  			name:      "test",
   110  			path:      "../testdata/test_file.txt",
   111  			semaphore: "0",
   112  		},
   113  		{
   114  			desc:      "Already exists",
   115  			name:      "already exists.txt",
   116  			semaphore: "1",
   117  			path:      "../testdata/test_file.txt",
   118  		},
   119  		{
   120  			desc:      "Non-existent",
   121  			name:      "non-existent",
   122  			semaphore: "1",
   123  			path:      "../testdata/non-existent.txt",
   124  		},
   125  		{
   126  			desc:      "Empty directory",
   127  			name:      "empty-dir",
   128  			semaphore: "1",
   129  			path:      "../testdata/empty",
   130  		},
   131  	}
   132  
   133  	cmd := NewCmd(db, nil)
   134  
   135  	for _, tc := range cases {
   136  		t.Run(tc.desc, func(t *testing.T) {
   137  			cmd.SetArgs([]string{tc.name})
   138  			f := cmd.Flags()
   139  			f.Set("path", tc.path)
   140  			f.Set("semaphore", tc.semaphore)
   141  
   142  			err := cmd.Execute()
   143  			assert.Error(t, err)
   144  		})
   145  	}
   146  }
   147  
   148  func TestPostRun(t *testing.T) {
   149  	NewCmd(nil, nil).PostRun(nil, nil)
   150  }