summaryrefslogtreecommitdiffstats
path: root/tests/integration/pull_request_task_test.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tests/integration/pull_request_task_test.go109
1 files changed, 109 insertions, 0 deletions
diff --git a/tests/integration/pull_request_task_test.go b/tests/integration/pull_request_task_test.go
new file mode 100644
index 0000000..4366d97
--- /dev/null
+++ b/tests/integration/pull_request_task_test.go
@@ -0,0 +1,109 @@
+// Copyright 2024 The Forgejo Authors
+// SPDX-License-Identifier: MIT
+
+package integration
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "code.gitea.io/gitea/models/db"
+ issues_model "code.gitea.io/gitea/models/issues"
+ repo_model "code.gitea.io/gitea/models/repo"
+ "code.gitea.io/gitea/models/unittest"
+ user_model "code.gitea.io/gitea/models/user"
+ "code.gitea.io/gitea/modules/git"
+ "code.gitea.io/gitea/modules/log"
+ repo_module "code.gitea.io/gitea/modules/repository"
+ "code.gitea.io/gitea/modules/test"
+ "code.gitea.io/gitea/modules/timeutil"
+ pull_service "code.gitea.io/gitea/services/pull"
+ repo_service "code.gitea.io/gitea/services/repository"
+ "code.gitea.io/gitea/tests"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+)
+
+func TestPullRequestSynchronized(t *testing.T) {
+ defer tests.PrepareTestEnv(t)()
+
+ // unmerged pull request of user2/repo1 from branch2 to master
+ pull := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 2})
+ // tip of tests/gitea-repositories-meta/user2/repo1 branch2
+ pull.HeadCommitID = "985f0301dba5e7b34be866819cd15ad3d8f508ee"
+ pull.LoadIssue(db.DefaultContext)
+ pull.Issue.Created = timeutil.TimeStampNanoNow()
+ issues_model.UpdateIssueCols(db.DefaultContext, pull.Issue, "created")
+
+ require.Equal(t, pull.HeadRepoID, pull.BaseRepoID)
+ repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: pull.HeadRepoID})
+ owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID})
+
+ for _, testCase := range []struct {
+ name string
+ timeNano int64
+ expected bool
+ }{
+ {
+ name: "AddTestPullRequestTask process PR",
+ timeNano: int64(pull.Issue.Created),
+ expected: true,
+ },
+ {
+ name: "AddTestPullRequestTask skip PR",
+ timeNano: 0,
+ expected: false,
+ },
+ } {
+ t.Run(testCase.name, func(t *testing.T) {
+ logChecker, cleanup := test.NewLogChecker(log.DEFAULT, log.TRACE)
+ logChecker.Filter("Updating PR").StopMark("TestPullRequest ")
+ defer cleanup()
+
+ opt := &repo_module.PushUpdateOptions{
+ PusherID: owner.ID,
+ PusherName: owner.Name,
+ RepoUserName: owner.Name,
+ RepoName: repo.Name,
+ RefFullName: git.RefName("refs/heads/branch2"),
+ OldCommitID: pull.HeadCommitID,
+ NewCommitID: pull.HeadCommitID,
+ TimeNano: testCase.timeNano,
+ }
+ require.NoError(t, repo_service.PushUpdate(opt))
+ logFiltered, logStopped := logChecker.Check(5 * time.Second)
+ assert.True(t, logStopped)
+ assert.Equal(t, testCase.expected, logFiltered[0])
+ })
+ }
+
+ for _, testCase := range []struct {
+ name string
+ olderThan int64
+ expected bool
+ }{
+ {
+ name: "TestPullRequest process PR",
+ olderThan: int64(pull.Issue.Created),
+ expected: true,
+ },
+ {
+ name: "TestPullRequest skip PR",
+ olderThan: int64(pull.Issue.Created) - 1,
+ expected: false,
+ },
+ } {
+ t.Run(testCase.name, func(t *testing.T) {
+ logChecker, cleanup := test.NewLogChecker(log.DEFAULT, log.TRACE)
+ logChecker.Filter("Updating PR").StopMark("TestPullRequest ")
+ defer cleanup()
+
+ pull_service.TestPullRequest(context.Background(), owner, repo.ID, testCase.olderThan, "branch2", true, pull.HeadCommitID, pull.HeadCommitID)
+ logFiltered, logStopped := logChecker.Check(5 * time.Second)
+ assert.True(t, logStopped)
+ assert.Equal(t, testCase.expected, logFiltered[0])
+ })
+ }
+}