github.com/nanvenomous/exfs@v0.0.8/filesystem_test.go (about) 1 package exfs 2 3 import ( 4 "fmt" 5 "os" 6 "path/filepath" 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 ) 11 12 var ( 13 MockFilesystem *FileSystem 14 projectRoot string 15 ) 16 17 func teardown(t *testing.T) { 18 var err error 19 err = os.Chdir(projectRoot) 20 if err != nil { 21 panic(err) 22 } 23 err = os.RemoveAll(t.Name()) 24 if err != nil { 25 panic(err) 26 } 27 } 28 29 func setup(t *testing.T) func(*testing.T) { 30 var err error 31 32 err = os.Mkdir(t.Name(), os.ModePerm) 33 if err != nil { 34 panic(err) 35 } 36 37 err = os.Chdir(t.Name()) 38 if err != nil { 39 panic(err) 40 } 41 return teardown 42 } 43 44 func TestMain(m *testing.M) { 45 var err error 46 MockFilesystem = NewFileSystem() 47 projectRoot, err = os.Getwd() 48 if err != nil { 49 panic(err) 50 } 51 os.Exit(m.Run()) 52 } 53 54 func TestExecute(t *testing.T) { 55 tdn := setup(t) 56 defer tdn(t) 57 58 var err error 59 err = MockFilesystem.Execute("git", []string{"remote"}) 60 assert.ErrorIs(t, err, nil) 61 err = MockFilesystem.Execute("notACommand", []string{}) 62 assert.ErrorContains(t, err, "notACommand") 63 } 64 65 func TestCapture(t *testing.T) { 66 tdn := setup(t) 67 defer tdn(t) 68 69 var ( 70 err error 71 errs, outs string 72 ) 73 outs, errs, err = MockFilesystem.Capture("git", []string{}) 74 assert.NotNil(t, err) 75 assert.Empty(t, errs) 76 assert.Contains(t, outs, "usage: git") 77 78 outs, errs, err = MockFilesystem.Capture("git", []string{"cow"}) 79 assert.Contains(t, errs, "'cow' is not a git command") 80 assert.NotNil(t, err) 81 } 82 83 func TestEditTemporaryFile(t *testing.T) { 84 var ( 85 err error 86 actualEditedString string 87 originalTxt = "mock original text " 88 formattingText = "mock extra text" 89 mockEditorEnvVal = "mockEditorEnvVal" 90 ) 91 // os.Setenv(EDITOR_ENV_VAR, mockEditorEnvVal) 92 actualExecute := execute 93 94 // mock adding text to end of file 95 execute = func(command string, args []string) error { 96 var ( 97 err error 98 f *os.File 99 ) 100 101 assert.Equal(t, mockEditorEnvVal, command) 102 103 f, err = os.OpenFile(args[0], 104 os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) 105 if err != nil { 106 return err 107 } 108 defer f.Close() 109 _, err = f.WriteString(formattingText) 110 return err 111 } 112 defer func() { execute = actualExecute }() 113 114 actualEditedString, err = MockFilesystem.EditTemporaryFile(mockEditorEnvVal, "tmpFile.txt", originalTxt) 115 assert.Nil(t, err) 116 assert.Equal(t, fmt.Sprintf("%s%s", originalTxt, formattingText), actualEditedString) 117 } 118 119 func TestFindFileInAboveCurDir(t *testing.T) { 120 tdn := setup(t) 121 defer tdn(t) 122 123 var ( 124 err error 125 fullPth string 126 fl *os.File 127 ) 128 const ( 129 mockFileName = "fl.txt" 130 mockDir = "mockDir" 131 ) 132 133 // Fails to find file 134 fullPth, err = MockFilesystem.FindFileInAboveCurDir(mockFileName) 135 assert.ErrorContains(t, err, "did not find file") 136 assert.Equal(t, fullPth, "") 137 138 // Finds file in curr dir 139 fl, err = os.Create(mockFileName) 140 assert.Nil(t, err) 141 assert.Nil(t, fl.Close()) 142 fullPth, err = MockFilesystem.FindFileInAboveCurDir(mockFileName) 143 assert.Nil(t, err) 144 assert.Contains(t, fullPth, filepath.Join(t.Name(), mockFileName)) 145 146 // Finds file above cur directory 147 assert.Nil(t, os.Mkdir(mockDir, os.ModePerm)) 148 assert.Nil(t, os.Chdir(mockDir)) 149 fullPth, err = MockFilesystem.FindFileInAboveCurDir(mockFileName) 150 assert.Nil(t, err) 151 assert.Contains(t, fullPth, filepath.Join(t.Name(), mockFileName)) 152 }