gitlab.com/sparetimecoders/build-tools@v0.1.0/pkg/file/file_test.go (about) 1 package file 2 3 import ( 4 "fmt" 5 "github.com/stretchr/testify/assert" 6 "gitlab.com/sparetimecoders/build-tools/pkg/templating" 7 "io/ioutil" 8 "os" 9 "path/filepath" 10 "testing" 11 ) 12 13 var name string 14 15 func TestMain(m *testing.M) { 16 tempDir := setup() 17 code := m.Run() 18 teardown(tempDir) 19 os.Exit(code) 20 } 21 22 func setup() string { 23 name, _ = ioutil.TempDir(os.TempDir(), "build-tools") 24 25 return name 26 } 27 28 func teardown(tempDir string) { 29 _ = os.RemoveAll(tempDir) 30 } 31 32 func TestAppend_Return_Error_For_Missing_File(t *testing.T) { 33 err := Append(filepath.Join(name, "missing_dir/missing_file_XYZ"), "content") 34 assert.EqualError(t, err, fmt.Sprintf("open %s/missing_dir/missing_file_XYZ: no such file or directory", name)) 35 } 36 37 func TestAppend_Appends_To_Existing_File(t *testing.T) { 38 fileName := filepath.Join(name, "file") 39 defer func() { _ = os.RemoveAll(fileName) }() 40 err := ioutil.WriteFile(fileName, []byte("abc"), 0777) 41 assert.NoError(t, err) 42 err = Append(fileName, "content") 43 assert.NoError(t, err) 44 bytes, err := ioutil.ReadFile(fileName) 45 assert.NoError(t, err) 46 assert.Equal(t, "abc\ncontent\n", string(bytes)) 47 } 48 49 func TestAppendTemplated_Return_Error_For_Broken_Template(t *testing.T) { 50 fileName := filepath.Join(name, "file") 51 defer func() { _ = os.RemoveAll(fileName) }() 52 err := ioutil.WriteFile(fileName, []byte("abc"), 0777) 53 assert.NoError(t, err) 54 err = AppendTemplated(fileName, "--->{{.ProjectName }<---", templating.TemplateData{ProjectName: "ABC"}) 55 assert.EqualError(t, err, `template: content:1: unexpected "}" in operand`) 56 } 57 58 func TestAppendTemplated_Appends_To_Existing_File(t *testing.T) { 59 fileName := filepath.Join(name, "file") 60 defer func() { _ = os.RemoveAll(fileName) }() 61 err := ioutil.WriteFile(fileName, []byte("abc"), 0777) 62 assert.NoError(t, err) 63 err = AppendTemplated(fileName, "--->{{.ProjectName }}<---", templating.TemplateData{ProjectName: "ABC"}) 64 assert.NoError(t, err) 65 bytes, err := ioutil.ReadFile(fileName) 66 assert.NoError(t, err) 67 assert.Equal(t, "abc\n--->ABC<---\n", string(bytes)) 68 } 69 70 func TestWrite_Creates_All_Parent_Directories(t *testing.T) { 71 fileName := filepath.Join(name, "missing", "path", "file") 72 defer func() { _ = os.RemoveAll(fileName) }() 73 err := Write(name, filepath.Join("missing", "path", "file"), "abc") 74 assert.NoError(t, err) 75 bytes, err := ioutil.ReadFile(fileName) 76 assert.NoError(t, err) 77 assert.Equal(t, "abc\n", string(bytes)) 78 } 79 80 func TestWriteTemplated_Return_Error_For_Broken_Template(t *testing.T) { 81 fileName := filepath.Join(name, "missing", "path", "file") 82 defer func() { _ = os.RemoveAll(fileName) }() 83 err := WriteTemplated(name, filepath.Join("missing", "path", "file"), "{{ .ProjectName }", templating.TemplateData{ProjectName: "ABC"}) 84 assert.EqualError(t, err, `template: content:1: unexpected "}" in operand`) 85 } 86 87 func TestWriteTemplated(t *testing.T) { 88 fileName := filepath.Join(name, "missing", "path", "file") 89 defer func() { _ = os.RemoveAll(fileName) }() 90 err := WriteTemplated(name, filepath.Join("missing", "path", "file"), "--->{{ .ProjectName }}<---", templating.TemplateData{ProjectName: "ABC"}) 91 assert.NoError(t, err) 92 bytes, err := ioutil.ReadFile(fileName) 93 assert.NoError(t, err) 94 assert.Equal(t, "--->ABC<---\n", string(bytes)) 95 }