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  }