github.com/GGP1/kure@v0.8.4/commands/file/mv/mv_test.go (about)

     1  package mv
     2  
     3  import (
     4  	"path/filepath"
     5  	"runtime"
     6  	"strconv"
     7  	"strings"
     8  	"testing"
     9  
    10  	cmdutil "github.com/GGP1/kure/commands"
    11  	"github.com/GGP1/kure/db/file"
    12  	"github.com/GGP1/kure/pb"
    13  
    14  	"github.com/stretchr/testify/assert"
    15  	bolt "go.etcd.io/bbolt"
    16  )
    17  
    18  func TestMv(t *testing.T) {
    19  	db := cmdutil.SetContext(t)
    20  
    21  	oldName := "test.txt"
    22  	newName := "renamed-test" // omit extension on purpose
    23  	createFile(t, db, oldName)
    24  
    25  	cmd := NewCmd(db)
    26  	cmd.SetArgs([]string{oldName, newName})
    27  
    28  	err := cmd.Execute()
    29  	assert.NoError(t, err)
    30  
    31  	_, err = file.GetCheap(db, newName+".txt")
    32  	assert.NoError(t, err, "Failed getting the renamed file")
    33  }
    34  
    35  func TestMvDir(t *testing.T) {
    36  	db := cmdutil.SetContext(t)
    37  
    38  	oldDir := "directory/"
    39  	for i := 0; i < 2; i++ {
    40  		createFile(t, db, oldDir+strconv.Itoa(i))
    41  	}
    42  
    43  	newDir := "folder/"
    44  	cmd := NewCmd(db)
    45  	cmd.SetArgs([]string{oldDir, newDir})
    46  
    47  	err := cmd.Execute()
    48  	assert.NoError(t, err)
    49  
    50  	names, err := file.ListNames(db)
    51  	assert.NoError(t, err)
    52  
    53  	for _, name := range names {
    54  		if !strings.HasPrefix(name, newDir) {
    55  			t.Errorf("%q wasn't moved into %q", name, newDir)
    56  		}
    57  	}
    58  }
    59  
    60  func TestMvFileIntoDir(t *testing.T) {
    61  	db := cmdutil.SetContext(t)
    62  
    63  	filename := "directory/test.csv"
    64  	newDir := "folder/"
    65  	createFile(t, db, filename)
    66  
    67  	cmd := NewCmd(db)
    68  	cmd.SetArgs([]string{filename, newDir})
    69  
    70  	err := cmd.Execute()
    71  	assert.NoError(t, err)
    72  
    73  	_, err = file.GetCheap(db, newDir+filepath.Base(filename))
    74  	assert.NoError(t, err, "Failed getting the renamed file")
    75  }
    76  
    77  func TestMvErrors(t *testing.T) {
    78  	if runtime.GOOS != "windows" {
    79  		t.Skip("For some strange reason this test fails in unix systems because the database file throws \"bad file descriptor\"")
    80  	}
    81  
    82  	db := cmdutil.SetContext(t)
    83  	createFile(t, db, "exists")
    84  	dir := "dir/"
    85  	createFile(t, db, dir+"1")
    86  
    87  	cases := []struct {
    88  		desc    string
    89  		oldName string
    90  		newName string
    91  	}{
    92  		{
    93  			desc:    "Invalid new name",
    94  			oldName: "exists",
    95  			newName: "",
    96  		},
    97  		{
    98  			desc:    "New name already exists",
    99  			oldName: "exists",
   100  			newName: "exists",
   101  		},
   102  		{
   103  			desc:    "File does not exist",
   104  			oldName: "non-existent",
   105  			newName: "test.txt",
   106  		},
   107  		{
   108  			desc:    "Dir into file",
   109  			oldName: dir,
   110  			newName: "test.txt",
   111  		},
   112  	}
   113  
   114  	cmd := NewCmd(db)
   115  
   116  	for _, tc := range cases {
   117  		t.Run(tc.desc, func(t *testing.T) {
   118  			cmd.SetArgs([]string{tc.oldName, tc.newName})
   119  			err := cmd.Execute()
   120  			assert.Error(t, err)
   121  		})
   122  	}
   123  }
   124  
   125  func TestMissingArguments(t *testing.T) {
   126  	db := cmdutil.SetContext(t)
   127  
   128  	cmd := NewCmd(db)
   129  	cmd.SetArgs([]string{"oldName"})
   130  	err := cmd.Execute()
   131  	assert.Error(t, err)
   132  }
   133  
   134  func createFile(t *testing.T, db *bolt.DB, name string) {
   135  	err := file.Create(db, &pb.File{Name: name})
   136  	assert.NoError(t, err, "Failed creating file")
   137  }