fuzzyworld

template / ci-testing / files / name_pattern_test.go

Branch ci-testing · default branch · all branches

name_pattern_test.go

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

da15cf49 2022-09-23 Pavel Safronov1package main
2
3import (
4 "testing"
5 "time"
10676da3 2022-11-06 Pavel Safronov6
5c81baec 2022-11-20 Pavel Safronov7 "github.com/stretchr/testify/assert"
10676da3 2022-11-06 Pavel Safronov8 "golang.org/x/exp/slices"
da15cf49 2022-09-23 Pavel Safronov9)
10
5c81baec 2022-11-20 Pavel Safronov11// Mon Jan 2 15:04:05 MST 2006
12var now = time.Date(2006, 1, 2, 15, 4, 5, 0, time.UTC)
13
da15cf49 2022-09-23 Pavel Safronov14func TestCreateNewName(t *testing.T) {
15 // setup code
16
55c36f6a 2022-10-05 Pavel Safronov17 extras := make(map[string]string)
18 extras["test1"] = "test1"
19
da15cf49 2022-09-23 Pavel Safronov20 profile := Profile{
21 IsDefault: true,
22 Type: FileType,
1a02ef4e 2022-10-21 Pavel Safronov23 NamePatterns: []ParameterizedText{
55c36f6a 2022-10-05 Pavel Safronov24 "{{.Extras.test1}}-{{.Year}}-{{.Month}}-{{.Day}}{{if .ProjectName}}-{{.ProjectName}}{{end}}.txt",
25 "{{.Extras.test1}}-{{.Year}}-{{.Month}}-{{.Day}}-{{.Hour}}{{if .ProjectName}}-{{.ProjectName}}{{end}}.txt",
26 "{{.Extras.test1}}-{{.Year}}-{{.Month}}-{{.Day}}-{{.Hour}}-{{.Minute}}-{{.Second}}-{{.ProjectName}}.txt",
da15cf49 2022-09-23 Pavel Safronov27 },
28 }
55c36f6a 2022-10-05 Pavel Safronov29 newNameNoProject := "test1-2006-01-02.txt"
30 newName1 := "test1-2006-01-02-test-project.txt"
31 newName2 := "test1-2006-01-02-15-test-project.txt"
32 newName3 := "test1-2006-01-02-15-04-05-test-project.txt"
da15cf49 2022-09-23 Pavel Safronov33
34 testHappyPath := func(projectName string, expectedName string, existingEntities []string) func(t *testing.T) {
35 return func(t *testing.T) {
8c15a714 2022-11-04 Pavel Safronov36 prePatternData := createPrePatternData(now, projectName, extras)
10676da3 2022-11-06 Pavel Safronov37 validator := func(newName string) bool { return !slices.Contains(existingEntities, newName) }
38 newName, err := createNewNameForPatterns(now, prePatternData, projectName, profile.NamePatterns, extras, validator)
da15cf49 2022-09-23 Pavel Safronov39 if err != nil {
40 t.Error("Error creating new name: ", err)
41 }
42 if newName != expectedName {
43 t.Error("Expected name to be ", expectedName, " but got ", newName)
44 }
687d5626 2022-10-28 Pavel Safronov45 if prePatternData.ProjectName != projectName {
46 t.Error("Expected prePatternData.ProjectName to be ", projectName, " but got ", prePatternData.ProjectName)
47 }
48 if prePatternData.Year != "2006" {
49 t.Error("Expected prePatternData.Year to be 2006 but got ", prePatternData.Year)
50 }
51 if prePatternData.Month != "01" {
52 t.Error("Expected prePatternData.Month to be 01 but got ", prePatternData.Month)
53 }
54 if prePatternData.Day != "02" {
55 t.Error("Expected prePatternData.Day to be 02 but got ", prePatternData.Day)
56 }
57 if prePatternData.Hour != "15" {
58 t.Error("Expected prePatternData.Hour to be 15 but got ", prePatternData.Hour)
59 }
60 if prePatternData.Minute != "04" {
61 t.Error("Expected prePatternData.Minute to be 04 but got ", prePatternData.Minute)
62 }
63 if prePatternData.Second != "05" {
64 t.Error("Expected prePatternData.Second to be 05 but got ", prePatternData.Second)
65 }
66
da15cf49 2022-09-23 Pavel Safronov67 }
68 }
69 testErrorPath := func(projectName string, existingEntities []string) func(t *testing.T) {
70 return func(t *testing.T) {
8c15a714 2022-11-04 Pavel Safronov71 prePatternData := createPrePatternData(now, projectName, extras)
10676da3 2022-11-06 Pavel Safronov72 validator := func(newName string) bool { return !slices.Contains(existingEntities, newName) }
73 _, err := createNewNameForPatterns(now, prePatternData, projectName, profile.NamePatterns, extras, validator)
da15cf49 2022-09-23 Pavel Safronov74 if err == nil {
75 t.Error("Expected error but got none")
76 }
77 }
78 }
79
80 // test code
81
82 // happy path
83 t.Run("createNewName - happy path", testHappyPath("test-project", newName1, []string{}))
84 t.Run("createNewName - use second pattern", testHappyPath("test-project", newName2, []string{newName1}))
85 t.Run("createNewName - use third pattern", testHappyPath("test-project", newName3, []string{newName1, newName2}))
0e962bb6 2022-09-23 Pavel Safronov86 t.Run("createNewName - happy path", testHappyPath("", newNameNoProject, []string{}))
da15cf49 2022-09-23 Pavel Safronov87
88 // error path
89 t.Run("createNewName - error path - collision", testErrorPath("test-project", []string{newName1, newName2, newName3}))
0e962bb6 2022-09-23 Pavel Safronov90}
91
92func TestCreateNewName_Index(t *testing.T) {
55c36f6a 2022-10-05 Pavel Safronov93 extras := make(map[string]string)
94 extras["test1"] = "test1"
95
0e962bb6 2022-09-23 Pavel Safronov96 profile := Profile{
97 IsDefault: true,
98 Type: FileType,
1a02ef4e 2022-10-21 Pavel Safronov99 NamePatterns: []ParameterizedText{
55c36f6a 2022-10-05 Pavel Safronov100 "{{.Extras.test1}}-{{$version := getVersion}}{{.Year}}-{{.Month}}-{{.Day}}v{{$version}}.txt",
0e962bb6 2022-09-23 Pavel Safronov101 },
102 }
55c36f6a 2022-10-05 Pavel Safronov103 newName1 := "test1-2006-01-02v1.txt"
104 newName2 := "test1-2006-01-02v2.txt"
105 newName3 := "test1-2006-01-02v3.txt"
da15cf49 2022-09-23 Pavel Safronov106
0e962bb6 2022-09-23 Pavel Safronov107 testHappyPath := func(expectedName string, existingEntities []string) func(t *testing.T) {
108 return func(t *testing.T) {
8c15a714 2022-11-04 Pavel Safronov109 prePatternData := createPrePatternData(now, "test-project", extras)
10676da3 2022-11-06 Pavel Safronov110 validator := func(newName string) bool { return !slices.Contains(existingEntities, newName) }
111 newName, err := createNewNameForPatterns(now, prePatternData, "test-project", profile.NamePatterns, extras, validator)
0e962bb6 2022-09-23 Pavel Safronov112 if err != nil {
113 t.Error("Error creating new name: ", err)
114 }
115 if newName != expectedName {
116 t.Error("Expected name to be ", expectedName, " but got ", newName)
117 }
687d5626 2022-10-28 Pavel Safronov118 if prePatternData.ProjectName != "test-project" {
119 t.Error("Expected prePatternData.ProjectName to be test-project but got ", prePatternData.ProjectName)
120 }
121 if prePatternData.Year != "2006" {
122 t.Error("Expected prePatternData.Year to be 2006 but got ", prePatternData.Year)
123 }
124 if prePatternData.Month != "01" {
125 t.Error("Expected prePatternData.Month to be 01 but got ", prePatternData.Month)
126 }
127 if prePatternData.Day != "02" {
128 t.Error("Expected prePatternData.Day to be 02 but got ", prePatternData.Day)
129 }
130 if prePatternData.Hour != "15" {
131 t.Error("Expected prePatternData.Hour to be 15 but got ", prePatternData.Hour)
132 }
133 if prePatternData.Minute != "04" {
134 t.Error("Expected prePatternData.Minute to be 04 but got ", prePatternData.Minute)
135 }
136 if prePatternData.Second != "05" {
137 t.Error("Expected prePatternData.Second to be 05 but got ", prePatternData.Second)
138 }
0e962bb6 2022-09-23 Pavel Safronov139 }
140 }
141
142 // test code
143
144 // happy path
145 t.Run("createNewName - v1", testHappyPath(newName1, []string{}))
146 t.Run("createNewName - v2", testHappyPath(newName2, []string{newName1}))
147 t.Run("createNewName - v3", testHappyPath(newName3, []string{newName1, newName2}))
148 t.Run("createNewName - v2", testHappyPath(newName2, []string{newName1, newName3}))
da15cf49 2022-09-23 Pavel Safronov149}
5c81baec 2022-11-20 Pavel Safronov150
151func TestCreateNewName_sprig(t *testing.T) {
152 profile := Profile{
153 IsDefault: true,
154 Type: FileType,
155 NamePatterns: []ParameterizedText{`{{"HELLO" | lower}}`},
156 }
157 projectName := "test-project"
158 prePatternData := createPrePatternData(now, projectName, nil)
159 newName, err := createNewNameForPatterns(
160 now,
161 prePatternData,
162 projectName,
163 profile.NamePatterns,
164 nil,
165 func(newName string) bool {
166 return true
167 })
168 assert.Nil(t, err)
169 assert.Equal(t, "hello", newName)
170}