github.com/argoproj/argo-cd/v3@v3.2.1/applicationset/services/pull_request/utils_test.go (about) 1 package pull_request 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 "github.com/stretchr/testify/require" 8 9 argoprojiov1alpha1 "github.com/argoproj/argo-cd/v3/pkg/apis/application/v1alpha1" 10 ) 11 12 func strp(s string) *string { 13 return &s 14 } 15 16 func TestFilterBranchMatchBadRegexp(t *testing.T) { 17 provider, _ := NewFakeService( 18 t.Context(), 19 []*PullRequest{ 20 { 21 Number: 1, 22 Title: "PR branch1", 23 Branch: "branch1", 24 TargetBranch: "master", 25 HeadSHA: "089d92cbf9ff857a39e6feccd32798ca700fb958", 26 Author: "name1", 27 }, 28 }, 29 nil, 30 ) 31 filters := []argoprojiov1alpha1.PullRequestGeneratorFilter{ 32 { 33 BranchMatch: strp("("), 34 }, 35 } 36 _, err := ListPullRequests(t.Context(), provider, filters) 37 require.Error(t, err) 38 } 39 40 func TestFilterBranchMatch(t *testing.T) { 41 provider, _ := NewFakeService( 42 t.Context(), 43 []*PullRequest{ 44 { 45 Number: 1, 46 Title: "PR one", 47 Branch: "one", 48 TargetBranch: "master", 49 HeadSHA: "189d92cbf9ff857a39e6feccd32798ca700fb958", 50 Author: "name1", 51 }, 52 { 53 Number: 2, 54 Title: "PR two", 55 Branch: "two", 56 TargetBranch: "master", 57 HeadSHA: "289d92cbf9ff857a39e6feccd32798ca700fb958", 58 Author: "name2", 59 }, 60 { 61 Number: 3, 62 Title: "PR three", 63 Branch: "three", 64 TargetBranch: "master", 65 HeadSHA: "389d92cbf9ff857a39e6feccd32798ca700fb958", 66 Author: "name3", 67 }, 68 { 69 Number: 4, 70 Title: "PR four", 71 Branch: "four", 72 TargetBranch: "master", 73 HeadSHA: "489d92cbf9ff857a39e6feccd32798ca700fb958", 74 Author: "name4", 75 }, 76 }, 77 nil, 78 ) 79 filters := []argoprojiov1alpha1.PullRequestGeneratorFilter{ 80 { 81 BranchMatch: strp("w"), 82 }, 83 } 84 pullRequests, err := ListPullRequests(t.Context(), provider, filters) 85 require.NoError(t, err) 86 assert.Len(t, pullRequests, 1) 87 assert.Equal(t, "two", pullRequests[0].Branch) 88 } 89 90 func TestFilterTargetBranchMatch(t *testing.T) { 91 provider, _ := NewFakeService( 92 t.Context(), 93 []*PullRequest{ 94 { 95 Number: 1, 96 Title: "PR one", 97 Branch: "one", 98 TargetBranch: "master", 99 HeadSHA: "189d92cbf9ff857a39e6feccd32798ca700fb958", 100 Author: "name1", 101 }, 102 { 103 Number: 2, 104 Title: "PR two", 105 Branch: "two", 106 TargetBranch: "branch1", 107 HeadSHA: "289d92cbf9ff857a39e6feccd32798ca700fb958", 108 Author: "name2", 109 }, 110 { 111 Number: 3, 112 Title: "PR three", 113 Branch: "three", 114 TargetBranch: "branch2", 115 HeadSHA: "389d92cbf9ff857a39e6feccd32798ca700fb958", 116 Author: "name3", 117 }, 118 { 119 Number: 4, 120 Title: "PR four", 121 Branch: "four", 122 TargetBranch: "branch3", 123 HeadSHA: "489d92cbf9ff857a39e6feccd32798ca700fb958", 124 Author: "name4", 125 }, 126 }, 127 nil, 128 ) 129 filters := []argoprojiov1alpha1.PullRequestGeneratorFilter{ 130 { 131 TargetBranchMatch: strp("1"), 132 }, 133 } 134 pullRequests, err := ListPullRequests(t.Context(), provider, filters) 135 require.NoError(t, err) 136 assert.Len(t, pullRequests, 1) 137 assert.Equal(t, "two", pullRequests[0].Branch) 138 } 139 140 func TestFilterTitleMatch(t *testing.T) { 141 provider, _ := NewFakeService( 142 t.Context(), 143 []*PullRequest{ 144 { 145 Number: 1, 146 Title: "PR one - filter", 147 Branch: "one", 148 TargetBranch: "master", 149 HeadSHA: "189d92cbf9ff857a39e6feccd32798ca700fb958", 150 Author: "name1", 151 }, 152 { 153 Number: 2, 154 Title: "PR two - ignore", 155 Branch: "two", 156 TargetBranch: "branch1", 157 HeadSHA: "289d92cbf9ff857a39e6feccd32798ca700fb958", 158 Author: "name2", 159 }, 160 { 161 Number: 3, 162 Title: "[filter] PR three", 163 Branch: "three", 164 TargetBranch: "branch2", 165 HeadSHA: "389d92cbf9ff857a39e6feccd32798ca700fb958", 166 Author: "name3", 167 }, 168 { 169 Number: 4, 170 Title: "[ignore] PR four", 171 Branch: "four", 172 TargetBranch: "branch3", 173 HeadSHA: "489d92cbf9ff857a39e6feccd32798ca700fb958", 174 Author: "name4", 175 }, 176 }, 177 nil, 178 ) 179 filters := []argoprojiov1alpha1.PullRequestGeneratorFilter{ 180 { 181 TitleMatch: strp("\\[filter]"), 182 }, 183 } 184 pullRequests, err := ListPullRequests(t.Context(), provider, filters) 185 require.NoError(t, err) 186 assert.Len(t, pullRequests, 1) 187 assert.Equal(t, "three", pullRequests[0].Branch) 188 } 189 190 func TestMultiFilterOrWithTitle(t *testing.T) { 191 provider, _ := NewFakeService( 192 t.Context(), 193 []*PullRequest{ 194 { 195 Number: 1, 196 Title: "PR one - filter", 197 Branch: "one", 198 TargetBranch: "master", 199 HeadSHA: "189d92cbf9ff857a39e6feccd32798ca700fb958", 200 Author: "name1", 201 }, 202 { 203 Number: 2, 204 Title: "PR two - ignore", 205 Branch: "two", 206 TargetBranch: "branch1", 207 HeadSHA: "289d92cbf9ff857a39e6feccd32798ca700fb958", 208 Author: "name2", 209 }, 210 { 211 Number: 3, 212 Title: "[filter] PR three", 213 Branch: "three", 214 TargetBranch: "branch2", 215 HeadSHA: "389d92cbf9ff857a39e6feccd32798ca700fb958", 216 Author: "name3", 217 }, 218 { 219 Number: 4, 220 Title: "[ignore] PR four", 221 Branch: "four", 222 TargetBranch: "branch3", 223 HeadSHA: "489d92cbf9ff857a39e6feccd32798ca700fb958", 224 Author: "name4", 225 }, 226 }, 227 nil, 228 ) 229 filters := []argoprojiov1alpha1.PullRequestGeneratorFilter{ 230 { 231 TitleMatch: strp("\\[filter]"), 232 }, 233 { 234 TitleMatch: strp("- filter"), 235 }, 236 } 237 pullRequests, err := ListPullRequests(t.Context(), provider, filters) 238 require.NoError(t, err) 239 assert.Len(t, pullRequests, 2) 240 assert.Equal(t, "one", pullRequests[0].Branch) 241 assert.Equal(t, "three", pullRequests[1].Branch) 242 } 243 244 func TestMultiFilterOr(t *testing.T) { 245 provider, _ := NewFakeService( 246 t.Context(), 247 []*PullRequest{ 248 { 249 Number: 1, 250 Title: "PR one", 251 Branch: "one", 252 TargetBranch: "master", 253 HeadSHA: "189d92cbf9ff857a39e6feccd32798ca700fb958", 254 Author: "name1", 255 }, 256 { 257 Number: 2, 258 Title: "PR two", 259 Branch: "two", 260 TargetBranch: "master", 261 HeadSHA: "289d92cbf9ff857a39e6feccd32798ca700fb958", 262 Author: "name2", 263 }, 264 { 265 Number: 3, 266 Title: "PR three", 267 Branch: "three", 268 TargetBranch: "master", 269 HeadSHA: "389d92cbf9ff857a39e6feccd32798ca700fb958", 270 Author: "name3", 271 }, 272 { 273 Number: 4, 274 Title: "PR four", 275 Branch: "four", 276 TargetBranch: "master", 277 HeadSHA: "489d92cbf9ff857a39e6feccd32798ca700fb958", 278 Author: "name4", 279 }, 280 }, 281 nil, 282 ) 283 filters := []argoprojiov1alpha1.PullRequestGeneratorFilter{ 284 { 285 BranchMatch: strp("w"), 286 }, 287 { 288 BranchMatch: strp("r"), 289 }, 290 } 291 pullRequests, err := ListPullRequests(t.Context(), provider, filters) 292 require.NoError(t, err) 293 assert.Len(t, pullRequests, 3) 294 assert.Equal(t, "two", pullRequests[0].Branch) 295 assert.Equal(t, "three", pullRequests[1].Branch) 296 assert.Equal(t, "four", pullRequests[2].Branch) 297 } 298 299 func TestMultiFilterOrWithTargetBranchFilterOrWithTitleFilter(t *testing.T) { 300 provider, _ := NewFakeService( 301 t.Context(), 302 []*PullRequest{ 303 { 304 Number: 1, 305 Title: "PR one", 306 Branch: "one", 307 TargetBranch: "master", 308 HeadSHA: "189d92cbf9ff857a39e6feccd32798ca700fb958", 309 Author: "name1", 310 }, 311 { 312 Number: 2, 313 Title: "PR two", 314 Branch: "two", 315 TargetBranch: "branch1", 316 HeadSHA: "289d92cbf9ff857a39e6feccd32798ca700fb958", 317 Author: "name2", 318 }, 319 { 320 Number: 3, 321 Title: "PR three", 322 Branch: "three", 323 TargetBranch: "branch2", 324 HeadSHA: "389d92cbf9ff857a39e6feccd32798ca700fb958", 325 Author: "name3", 326 }, 327 { 328 Number: 4, 329 Title: "PR four", 330 Branch: "four", 331 TargetBranch: "branch3", 332 HeadSHA: "489d92cbf9ff857a39e6feccd32798ca700fb958", 333 Author: "name4", 334 }, 335 { 336 Number: 5, 337 Title: "PR title is different than branch name", 338 Branch: "five", 339 TargetBranch: "branch3", 340 HeadSHA: "489d92cbf9ff857a39e6feccd32798ca700fb958", 341 Author: "name5", 342 }, 343 }, 344 nil, 345 ) 346 filters := []argoprojiov1alpha1.PullRequestGeneratorFilter{ 347 { 348 BranchMatch: strp("w"), 349 TargetBranchMatch: strp("1"), 350 }, 351 { 352 BranchMatch: strp("r"), 353 TargetBranchMatch: strp("3"), 354 }, 355 { 356 TitleMatch: strp("two"), 357 }, 358 { 359 BranchMatch: strp("five"), 360 TitleMatch: strp("PR title is different than branch name"), 361 }, 362 } 363 pullRequests, err := ListPullRequests(t.Context(), provider, filters) 364 require.NoError(t, err) 365 assert.Len(t, pullRequests, 3) 366 assert.Equal(t, "two", pullRequests[0].Branch) 367 assert.Equal(t, "four", pullRequests[1].Branch) 368 assert.Equal(t, "five", pullRequests[2].Branch) 369 assert.Equal(t, "PR title is different than branch name", pullRequests[2].Title) 370 } 371 372 func TestNoFilters(t *testing.T) { 373 provider, _ := NewFakeService( 374 t.Context(), 375 []*PullRequest{ 376 { 377 Number: 1, 378 Title: "PR one", 379 Branch: "one", 380 TargetBranch: "master", 381 HeadSHA: "189d92cbf9ff857a39e6feccd32798ca700fb958", 382 Author: "name1", 383 }, 384 { 385 Number: 2, 386 Title: "PR two", 387 Branch: "two", 388 TargetBranch: "master", 389 HeadSHA: "289d92cbf9ff857a39e6feccd32798ca700fb958", 390 Author: "name2", 391 }, 392 }, 393 nil, 394 ) 395 filters := []argoprojiov1alpha1.PullRequestGeneratorFilter{} 396 repos, err := ListPullRequests(t.Context(), provider, filters) 397 require.NoError(t, err) 398 assert.Len(t, repos, 2) 399 assert.Equal(t, "one", repos[0].Branch) 400 assert.Equal(t, "two", repos[1].Branch) 401 }