github.com/emmahsax/go-git-helper@v0.0.8-0.20240519163017-907b9de0fa52/internal/gitlabMergeRequest/gitlabMergeRequest_test.go (about) 1 package gitlabMergeRequest 2 3 import ( 4 "os" 5 "path/filepath" 6 "sort" 7 "testing" 8 9 "github.com/emmahsax/go-git-helper/internal/commandline" 10 ) 11 12 func Test_determineTitle(t *testing.T) { 13 tests := []struct { 14 name string 15 title string 16 draft string 17 expected string 18 }{ 19 { 20 name: "draft", 21 title: "hello world", 22 draft: "true", 23 expected: "Draft: hello world", 24 }, 25 { 26 name: "no draft", 27 title: "hello world", 28 draft: "false", 29 expected: "hello world", 30 }, 31 } 32 33 for _, test := range tests { 34 mr := NewGitLabMergeRequest( 35 map[string]string{ 36 "baseBranch": "master", 37 "localProject": "project", 38 "localBranch": "feature", 39 "gitRootDir": "/path/to/repo", 40 "newMrTitle": test.title, 41 "draft": test.draft, 42 }, 43 false, 44 ) 45 actual := mr.determineTitle() 46 47 if test.expected != actual { 48 t.Errorf("expected '%s', got '%s'", test.expected, actual) 49 } 50 } 51 } 52 53 func Test_newMrBody(t *testing.T) { 54 tempDir, err := os.MkdirTemp("", "gitlab") 55 if err != nil { 56 t.Fatal(err) 57 } 58 defer os.RemoveAll(tempDir) 59 60 err = os.MkdirAll(filepath.Join(tempDir, ".gitlab", "merge_request_templates"), 0755) 61 if err != nil { 62 t.Fatal(err) 63 } 64 65 files := []string{ 66 ".gitlab/merge_request_template.md", 67 ".gitlab/merge_request_templates/template1.md", 68 ".gitlab/merge_request_templates/template2.md", 69 "merge_request_template.md", 70 } 71 for _, file := range files { 72 err = os.WriteFile(filepath.Join(tempDir, file), []byte("content"), 0644) 73 if err != nil { 74 t.Fatal(err) 75 } 76 } 77 78 mr := &GitLabMergeRequest{ 79 GitRootDir: tempDir, 80 } 81 82 originalAskYesNoQuestion := commandline.AskYesNoQuestion 83 t.Cleanup(func() { 84 commandline.AskYesNoQuestion = originalAskYesNoQuestion 85 }) 86 commandline.AskYesNoQuestion = func(question string) bool { 87 return true 88 } 89 90 originalAskMultipleChoice := commandline.AskMultipleChoice 91 t.Cleanup(func() { 92 commandline.AskMultipleChoice = originalAskMultipleChoice 93 }) 94 commandline.AskMultipleChoice = func(question string, choices []string) string { 95 return "" 96 } 97 98 expected := "" 99 actual := mr.newMrBody() 100 101 if expected != actual { 102 t.Errorf("expected '%s', got '%s'", expected, actual) 103 } 104 } 105 106 func Test_templateNameToApply(t *testing.T) { 107 tempDir, err := os.MkdirTemp("", "gitlab") 108 if err != nil { 109 t.Fatal(err) 110 } 111 defer os.RemoveAll(tempDir) 112 113 err = os.MkdirAll(filepath.Join(tempDir, ".gitlab", "merge_request_templates"), 0755) 114 if err != nil { 115 t.Fatal(err) 116 } 117 118 files := []string{ 119 ".gitlab/merge_request_template.md", 120 ".gitlab/merge_request_templates/template1.md", 121 ".gitlab/merge_request_templates/template2.md", 122 "merge_request_template.md", 123 } 124 for _, file := range files { 125 err = os.WriteFile(filepath.Join(tempDir, file), []byte("content"), 0644) 126 if err != nil { 127 t.Fatal(err) 128 } 129 } 130 131 mr := &GitLabMergeRequest{ 132 GitRootDir: tempDir, 133 } 134 135 originalAskYesNoQuestion := commandline.AskYesNoQuestion 136 t.Cleanup(func() { 137 commandline.AskYesNoQuestion = originalAskYesNoQuestion 138 }) 139 commandline.AskYesNoQuestion = func(question string) bool { 140 return true 141 } 142 143 originalAskMultipleChoice := commandline.AskMultipleChoice 144 t.Cleanup(func() { 145 commandline.AskMultipleChoice = originalAskMultipleChoice 146 }) 147 commandline.AskMultipleChoice = func(question string, choices []string) string { 148 return "/path/to/repo/.gitlab/merge_request_template.md" 149 } 150 151 expected := "/path/to/repo/.gitlab/merge_request_template.md" 152 actual := mr.templateNameToApply() 153 154 if expected != actual { 155 t.Errorf("expected '%s', got '%s'", expected, actual) 156 } 157 } 158 159 func Test_determineTemplate(t *testing.T) { 160 mr := &GitLabMergeRequest{ 161 GitRootDir: "/path/to/repo", 162 } 163 164 originalAskYesNoQuestion := commandline.AskYesNoQuestion 165 t.Cleanup(func() { 166 commandline.AskYesNoQuestion = originalAskYesNoQuestion 167 }) 168 commandline.AskYesNoQuestion = func(question string) bool { 169 return true 170 } 171 172 originalAskMultipleChoice := commandline.AskMultipleChoice 173 t.Cleanup(func() { 174 commandline.AskMultipleChoice = originalAskMultipleChoice 175 }) 176 commandline.AskMultipleChoice = func(question string, choices []string) string { 177 return "/path/to/repo/.gitlab/merge_request_template.md" 178 } 179 180 expected := "/path/to/repo/.gitlab/merge_request_template.md" 181 actual := mr.determineTemplate() 182 183 if expected != actual { 184 t.Errorf("expected '%s', got '%s'", expected, actual) 185 } 186 } 187 188 func Test_mrTemplateOptions(t *testing.T) { 189 tempDir, err := os.MkdirTemp("", "gitlab") 190 if err != nil { 191 t.Fatal(err) 192 } 193 defer os.RemoveAll(tempDir) 194 195 err = os.MkdirAll(filepath.Join(tempDir, ".gitlab", "merge_request_templates"), 0755) 196 if err != nil { 197 t.Fatal(err) 198 } 199 200 files := []string{ 201 ".gitlab/merge_request_template.md", 202 ".gitlab/merge_request_templates/template1.md", 203 ".gitlab/merge_request_templates/template2.md", 204 "merge_request_template.md", 205 } 206 for _, file := range files { 207 err = os.WriteFile(filepath.Join(tempDir, file), []byte("content"), 0644) 208 if err != nil { 209 t.Fatal(err) 210 } 211 } 212 213 mr := &GitLabMergeRequest{ 214 GitRootDir: tempDir, 215 } 216 217 expected := []string{ 218 filepath.Join(tempDir, ".gitlab/merge_request_template.md"), 219 filepath.Join(tempDir, ".gitlab/merge_request_templates/template1.md"), 220 filepath.Join(tempDir, ".gitlab/merge_request_templates/template2.md"), 221 filepath.Join(tempDir, "merge_request_template.md"), 222 } 223 actual := mr.mrTemplateOptions() 224 225 if len(expected) != len(actual) { 226 t.Fatalf("Expected and actual slices have different lengths: expected %v, got %v", len(expected), len(actual)) 227 } 228 229 sort.Strings(expected) 230 sort.Strings(actual) 231 232 for i := range expected { 233 if expected[i] != actual[i] { 234 t.Fatalf("Expected and actual slices do not match: expected %v, got %v", expected, actual) 235 } 236 } 237 }