diff options
Diffstat (limited to 'tests/integration/pull_status_test.go')
-rw-r--r-- | tests/integration/pull_status_test.go | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/tests/integration/pull_status_test.go b/tests/integration/pull_status_test.go index 63ffe94320..4d43847f1b 100644 --- a/tests/integration/pull_status_test.go +++ b/tests/integration/pull_status_test.go @@ -13,9 +13,13 @@ import ( auth_model "code.gitea.io/gitea/models/auth" git_model "code.gitea.io/gitea/models/git" + "code.gitea.io/gitea/models/issues" repo_model "code.gitea.io/gitea/models/repo" "code.gitea.io/gitea/models/unittest" + "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/modules/test" + "code.gitea.io/gitea/services/pull" "github.com/stretchr/testify/assert" ) @@ -165,3 +169,74 @@ func TestPullCreate_EmptyChangesWithSameCommits(t *testing.T) { assert.Contains(t, text, "This branch is already included in the target branch. There is nothing to merge.") }) } + +func TestPullStatusDelayCheck(t *testing.T) { + onGiteaRun(t, func(t *testing.T, u *url.URL) { + defer test.MockVariableValue(&setting.Repository.PullRequest.DelayCheckForInactiveDays, 1)() + defer test.MockVariableValue(&pull.AddPullRequestToCheckQueue)() + + session := loginUser(t, "user2") + + run := func(t *testing.T, fn func(*testing.T)) (issue3 *issues.Issue, checkedPrID int64) { + pull.AddPullRequestToCheckQueue = func(prID int64) { + checkedPrID = prID + } + fn(t) + issue3 = unittest.AssertExistsAndLoadBean(t, &issues.Issue{RepoID: 1, Index: 3}) + _ = issue3.LoadPullRequest(t.Context()) + return issue3, checkedPrID + } + + assertReloadingInterval := func(t *testing.T, interval string) { + req := NewRequest(t, "GET", "/user2/repo1/pulls/3") + resp := session.MakeRequest(t, req, http.StatusOK) + attr := "data-pull-merge-box-reloading-interval" + if interval == "" { + assert.NotContains(t, resp.Body.String(), attr) + } else { + assert.Contains(t, resp.Body.String(), fmt.Sprintf(`%s="%v"`, attr, interval)) + } + } + + // PR issue3 is merageable at the beginning + issue3, checkedPrID := run(t, func(t *testing.T) {}) + assert.Equal(t, issues.PullRequestStatusMergeable, issue3.PullRequest.Status) + assert.Zero(t, checkedPrID) + assertReloadingInterval(t, "") // the PR is mergeable, so no need to reload the merge box + + // setting.IsProd = false // it would cause data-race because the queue handlers might be running and reading its value + // assertReloadingInterval(t, "1") // make sure dev mode always do merge box reloading, to make sure the UI logic won't break + // setting.IsProd = true + + // when base branch changes, PR status should be updated, but it is inactive for long time, so no real check + issue3, checkedPrID = run(t, func(t *testing.T) { + testEditFile(t, session, "user2", "repo1", "master", "README.md", "new content 1") + }) + assert.Equal(t, issues.PullRequestStatusChecking, issue3.PullRequest.Status) + assert.Zero(t, checkedPrID) + assertReloadingInterval(t, "2000") // the PR status is "checking", so try to reload the merge box + + // view a PR with status=checking, it starts the real check + issue3, checkedPrID = run(t, func(t *testing.T) { + req := NewRequest(t, "GET", "/user2/repo1/pulls/3") + session.MakeRequest(t, req, http.StatusOK) + }) + assert.Equal(t, issues.PullRequestStatusChecking, issue3.PullRequest.Status) + assert.Equal(t, issue3.PullRequest.ID, checkedPrID) + + // when base branch changes, still so no real check + issue3, checkedPrID = run(t, func(t *testing.T) { + testEditFile(t, session, "user2", "repo1", "master", "README.md", "new content 2") + }) + assert.Equal(t, issues.PullRequestStatusChecking, issue3.PullRequest.Status) + assert.Zero(t, checkedPrID) + + // then allow to check PRs without delay, when base branch changes, the PRs will be checked + setting.Repository.PullRequest.DelayCheckForInactiveDays = -1 + issue3, checkedPrID = run(t, func(t *testing.T) { + testEditFile(t, session, "user2", "repo1", "master", "README.md", "new content 3") + }) + assert.Equal(t, issues.PullRequestStatusChecking, issue3.PullRequest.Status) + assert.Equal(t, issue3.PullRequest.ID, checkedPrID) + }) +} |