fuzzyworld

template / ci-testing / files / name_pattern_test.go

Branch ci-testing · default branch · all branches

name_pattern_test.go

6.2 KB · history · blame

1package main
2
3import (
4 "testing"
5 "time"
6
7 "github.com/stretchr/testify/assert"
8 "golang.org/x/exp/slices"
9)
10
11// Mon Jan 2 15:04:05 MST 2006
12var now = time.Date(2006, 1, 2, 15, 4, 5, 0, time.UTC)
13
14func TestCreateNewName(t *testing.T) {
15 // setup code
16
17 extras := make(map[string]string)
18 extras["test1"] = "test1"
19
20 profile := Profile{
21 IsDefault: true,
22 Type: FileType,
23 NamePatterns: []ParameterizedText{
24 "{{.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",
27 },
28 }
29 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"
33
34 testHappyPath := func(projectName string, expectedName string, existingEntities []string) func(t *testing.T) {
35 return func(t *testing.T) {
36 prePatternData := createPrePatternData(now, projectName, extras)
37 validator := func(newName string) bool { return !slices.Contains(existingEntities, newName) }
38 newName, err := createNewNameForPatterns(now, prePatternData, projectName, profile.NamePatterns, extras, validator)
39 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 }
45 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
67 }
68 }
69 testErrorPath := func(projectName string, existingEntities []string) func(t *testing.T) {
70 return func(t *testing.T) {
71 prePatternData := createPrePatternData(now, projectName, extras)
72 validator := func(newName string) bool { return !slices.Contains(existingEntities, newName) }
73 _, err := createNewNameForPatterns(now, prePatternData, projectName, profile.NamePatterns, extras, validator)
74 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}))
86 t.Run("createNewName - happy path", testHappyPath("", newNameNoProject, []string{}))
87
88 // error path
89 t.Run("createNewName - error path - collision", testErrorPath("test-project", []string{newName1, newName2, newName3}))
90}
91
92func TestCreateNewName_Index(t *testing.T) {
93 extras := make(map[string]string)
94 extras["test1"] = "test1"
95
96 profile := Profile{
97 IsDefault: true,
98 Type: FileType,
99 NamePatterns: []ParameterizedText{
100 "{{.Extras.test1}}-{{$version := getVersion}}{{.Year}}-{{.Month}}-{{.Day}}v{{$version}}.txt",
101 },
102 }
103 newName1 := "test1-2006-01-02v1.txt"
104 newName2 := "test1-2006-01-02v2.txt"
105 newName3 := "test1-2006-01-02v3.txt"
106
107 testHappyPath := func(expectedName string, existingEntities []string) func(t *testing.T) {
108 return func(t *testing.T) {
109 prePatternData := createPrePatternData(now, "test-project", extras)
110 validator := func(newName string) bool { return !slices.Contains(existingEntities, newName) }
111 newName, err := createNewNameForPatterns(now, prePatternData, "test-project", profile.NamePatterns, extras, validator)
112 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 }
118 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 }
139 }
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}))
149}
150
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}