fuzzyworld

template / files / internal / core / file_test.go

file_test.go

Blame: the commit that last changed each line · file · history

37160b89 2026-05-01 Pavel Safronov1package core
c3fc7a22 2022-10-30 Pavel Safronov2
3import (
bbd011d0 2022-12-10 Pavel Safronov4 "bufio"
ecad2935 2026-05-01 Pavel Safronov5 "fmt"
c3fc7a22 2022-10-30 Pavel Safronov6 "os"
bbd011d0 2022-12-10 Pavel Safronov7 "strings"
c3fc7a22 2022-10-30 Pavel Safronov8 "testing"
9
10 "github.com/stretchr/testify/assert"
11)
12
13func TestCreateFile(t *testing.T) {
14 // settings
15 path := "~/test/out/test.txt"
16 prePatternData := testPrePatternData()
17 expectedText := "test-project-2022-04-20-16-20-69-value1"
bbd011d0 2022-12-10 Pavel Safronov18 var createdFileName = ""
c3fc7a22 2022-10-30 Pavel Safronov19
20 // monkey patch
21 applyTestMonkeyPatch(t, monkeyPatch{
bbd011d0 2022-12-10 Pavel Safronov22 OSCreate: func(filename string) (*os.File, error) {
23 assert.Equal(t, path, filename)
24 file, err := os.CreateTemp("./test", "test")
25 assert.Nil(t, err, "error creating temp file")
26 assert.True(t, createdFileName == "", "createFileName should be empty")
27 createdFileName = file.Name()
28 return file, nil
29 },
c3fc7a22 2022-10-30 Pavel Safronov30 OSWriteFile: func(filename string, data []byte, perm os.FileMode) error {
31 assert.Equal(t, path, filename)
32 assert.Equal(t, perm, os.ModePerm)
33 assert.Equal(t, string(data), expectedText)
34 return nil
35 },
36 })
37
38 // test error path
bbd011d0 2022-12-10 Pavel Safronov39 err := createFile(prePatternData, "{{.ProjectName", path, nil)
c3fc7a22 2022-10-30 Pavel Safronov40 assert.NotNil(t, err)
41
bbd011d0 2022-12-10 Pavel Safronov42 // test happy path with file template
43 err = createFile(prePatternData, "{{.ProjectName}}-{{.Year}}-{{.Month}}-{{.Day}}-{{.Hour}}-{{.Minute}}-{{.Second}}-{{.Extras.key1}}", path, nil)
44 assert.Nil(t, err)
45
46 // test happy path with pipe input
47 inputText := `line1
48line2
49line3
50`
51 expectedText = inputText
52 reader := strings.NewReader(inputText)
53 pipeInputScanner := bufio.NewScanner(reader)
54 err = createFile(prePatternData, "{{.ProjectName}}-{{.Year}}-{{.Month}}-{{.Day}}-{{.Hour}}-{{.Minute}}-{{.Second}}-{{.Extras.key1}}", path, pipeInputScanner)
c3fc7a22 2022-10-30 Pavel Safronov55 assert.Nil(t, err)
bbd011d0 2022-12-10 Pavel Safronov56 assert.NotNil(t, createdFileName)
57 bytes, err := os.ReadFile(createdFileName)
58 assert.Nil(t, err, "error reading file "+createdFileName)
59 outputText := string(bytes)
60 assert.Equal(t, inputText, outputText)
c3fc7a22 2022-10-30 Pavel Safronov61
62 // test empty template
63 expectedText = ""
bbd011d0 2022-12-10 Pavel Safronov64 err = createFile(prePatternData, "", path, nil)
c3fc7a22 2022-10-30 Pavel Safronov65 assert.Nil(t, err)
66}
ecad2935 2026-05-01 Pavel Safronov67
68func TestCreateFileErrors(t *testing.T) {
69 prePatternData := testPrePatternData()
70 path := "~/test/out/test.txt"
71
72 // OSCreate failure when using pipe input
73 applyTestMonkeyPatch(t, monkeyPatch{
74 OSCreate: func(filename string) (*os.File, error) {
75 return nil, fmt.Errorf("create failed")
76 },
77 })
78 reader := strings.NewReader("some input")
79 scanner := bufio.NewScanner(reader)
80 err := createFile(prePatternData, "", path, scanner)
81 assert.NotNil(t, err)
82 assert.Contains(t, err.Error(), "error creating file")
83
84 // OSWriteFile failure in template path
85 applyTestMonkeyPatch(t, monkeyPatch{
86 OSWriteFile: func(filename string, data []byte, perm os.FileMode) error {
87 return fmt.Errorf("write failed")
88 },
89 })
90 err = createFile(prePatternData, "{{.ProjectName}}", path, nil)
91 assert.NotNil(t, err)
92 assert.Contains(t, err.Error(), "error writing file")
93
94 // OSWriteFile failure in empty-template path
95 err = createFile(prePatternData, "", path, nil)
96 assert.NotNil(t, err)
97 assert.Contains(t, err.Error(), "error writing file")
98}
99
100func TestReadFile(t *testing.T) {
101 f, err := os.CreateTemp("./test", "readfile-*.txt")
102 assert.Nil(t, err)
cd48b068 2026-05-01 Pavel Safronov103 defer func() { _ = os.Remove(f.Name()) }()
ecad2935 2026-05-01 Pavel Safronov104
105 content := "hello world"
106 _, err = f.WriteString(content)
107 assert.Nil(t, err)
cd48b068 2026-05-01 Pavel Safronov108 assert.NoError(t, f.Close())
ecad2935 2026-05-01 Pavel Safronov109
110 got, err := readFile(f.Name())
111 assert.Nil(t, err)
112 assert.Equal(t, content, got)
113
114 _, err = readFile("nonexistent-file-that-does-not-exist.txt")
115 assert.NotNil(t, err)
116}