|
8 | 8 |
|
9 | 9 | "forgejo.org/models/db" |
10 | 10 | issues_model "forgejo.org/models/issues" |
| 11 | + organization_model "forgejo.org/models/organization" |
11 | 12 | repo_model "forgejo.org/models/repo" |
12 | 13 | "forgejo.org/models/unittest" |
13 | 14 | user_model "forgejo.org/models/user" |
@@ -319,3 +320,80 @@ func TestAddReviewRequest(t *testing.T) { |
319 | 320 | require.Error(t, err) |
320 | 321 | assert.True(t, issues_model.IsErrReviewRequestOnClosedPR(err)) |
321 | 322 | } |
| 323 | + |
| 324 | +func TestAddTeamReviewRequest(t *testing.T) { |
| 325 | + defer unittest.OverrideFixtures("models/fixtures/TestAddTeamReviewRequest")() |
| 326 | + require.NoError(t, unittest.PrepareTestDatabase()) |
| 327 | + |
| 328 | + setupForProtectedBranch := func() (*issues_model.Issue, *user_model.User) { |
| 329 | + // From override models/fixtures/TestAddTeamReviewRequest/issue.yml; issue #23 is a PR into a protected branch |
| 330 | + issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 23}) |
| 331 | + require.NoError(t, issue.LoadRepo(db.DefaultContext)) |
| 332 | + doer := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4}) |
| 333 | + return issue, doer |
| 334 | + } |
| 335 | + |
| 336 | + t.Run("Protected branch, not official team", func(t *testing.T) { |
| 337 | + issue, doer := setupForProtectedBranch() |
| 338 | + // Team 2 is not part of the whitelist for this protected branch |
| 339 | + team := unittest.AssertExistsAndLoadBean(t, &organization_model.Team{ID: 2}) |
| 340 | + |
| 341 | + comment, err := issues_model.AddTeamReviewRequest(db.DefaultContext, issue, team, doer) |
| 342 | + require.NoError(t, err) |
| 343 | + require.NotNil(t, comment) |
| 344 | + |
| 345 | + review, err := issues_model.GetTeamReviewerByIssueIDAndTeamID(db.DefaultContext, issue.ID, team.ID) |
| 346 | + require.NoError(t, err) |
| 347 | + require.NotNil(t, review) |
| 348 | + assert.Equal(t, issues_model.ReviewTypeRequest, review.Type) |
| 349 | + assert.Equal(t, team.ID, review.ReviewerTeamID) |
| 350 | + // This review request should not be marked official because it is not a request for a team in the branch |
| 351 | + // protection rule's whitelist... |
| 352 | + assert.False(t, review.Official) |
| 353 | + }) |
| 354 | + |
| 355 | + t.Run("Protected branch, official team", func(t *testing.T) { |
| 356 | + issue, doer := setupForProtectedBranch() |
| 357 | + // Team 1 is part of the whitelist for this protected branch |
| 358 | + team := unittest.AssertExistsAndLoadBean(t, &organization_model.Team{ID: 1}) |
| 359 | + |
| 360 | + comment, err := issues_model.AddTeamReviewRequest(db.DefaultContext, issue, team, doer) |
| 361 | + require.NoError(t, err) |
| 362 | + require.NotNil(t, comment) |
| 363 | + |
| 364 | + review, err := issues_model.GetTeamReviewerByIssueIDAndTeamID(db.DefaultContext, issue.ID, team.ID) |
| 365 | + require.NoError(t, err) |
| 366 | + require.NotNil(t, review) |
| 367 | + assert.Equal(t, issues_model.ReviewTypeRequest, review.Type) |
| 368 | + assert.Equal(t, team.ID, review.ReviewerTeamID) |
| 369 | + // Expected to be considered official because team 1 is in the review whitelist for this protected branch |
| 370 | + assert.True(t, review.Official) |
| 371 | + }) |
| 372 | + |
| 373 | + t.Run("Unprotected branch, official team", func(t *testing.T) { |
| 374 | + // Working on a PR into a branch that is not protected, issue #2 |
| 375 | + issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 2}) |
| 376 | + require.NoError(t, issue.LoadRepo(db.DefaultContext)) |
| 377 | + doer := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}) |
| 378 | + // team is a team that has write perms against the repo |
| 379 | + team := unittest.AssertExistsAndLoadBean(t, &organization_model.Team{ID: 1}) |
| 380 | + |
| 381 | + comment, err := issues_model.AddTeamReviewRequest(db.DefaultContext, issue, team, doer) |
| 382 | + require.NoError(t, err) |
| 383 | + require.NotNil(t, comment) |
| 384 | + |
| 385 | + review, err := issues_model.GetTeamReviewerByIssueIDAndTeamID(db.DefaultContext, issue.ID, team.ID) |
| 386 | + require.NoError(t, err) |
| 387 | + require.NotNil(t, review) |
| 388 | + assert.Equal(t, issues_model.ReviewTypeRequest, review.Type) |
| 389 | + assert.Equal(t, team.ID, review.ReviewerTeamID) |
| 390 | + // Will not be marked as official because PR #2 there's no branch protection rule that enables whitelist |
| 391 | + // approvals (verifying logic in `IsOfficialReviewerTeam` indirectly) |
| 392 | + assert.False(t, review.Official) |
| 393 | + |
| 394 | + // Adding the same team review request again should be a noop |
| 395 | + comment, err = issues_model.AddTeamReviewRequest(db.DefaultContext, issue, team, doer) |
| 396 | + require.NoError(t, err) |
| 397 | + require.Nil(t, comment) |
| 398 | + }) |
| 399 | +} |
0 commit comments