Skip to content

Commit 2ae53ce

Browse files
committed
Add test
1 parent e30e9b3 commit 2ae53ce

File tree

1 file changed

+108
-0
lines changed

1 file changed

+108
-0
lines changed
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
// Copyright 2024 The Gitea Authors. All rights reserved.
2+
// SPDX-License-Identifier: MIT
3+
4+
package integration
5+
6+
import (
7+
"fmt"
8+
"net/http"
9+
"net/url"
10+
"strings"
11+
"testing"
12+
"time"
13+
14+
"code.gitea.io/gitea/models/db"
15+
git_model "code.gitea.io/gitea/models/git"
16+
issues_model "code.gitea.io/gitea/models/issues"
17+
pull_model "code.gitea.io/gitea/models/pull"
18+
repo_model "code.gitea.io/gitea/models/repo"
19+
"code.gitea.io/gitea/models/unittest"
20+
user_model "code.gitea.io/gitea/models/user"
21+
"code.gitea.io/gitea/modules/gitrepo"
22+
api "code.gitea.io/gitea/modules/structs"
23+
commitstatus_service "code.gitea.io/gitea/services/repository/commitstatus"
24+
25+
"github.com/stretchr/testify/assert"
26+
)
27+
28+
func TestAPIPullAutoMergeAfterCommitStatusSucceed(t *testing.T) {
29+
onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
30+
// create a pull request
31+
session := loginUser(t, "user1")
32+
user1 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
33+
forkedName := "repo1-1"
34+
testRepoFork(t, session, "user2", "repo1", "user1", forkedName, "")
35+
defer func() {
36+
testDeleteRepository(t, session, "user1", forkedName)
37+
}()
38+
testEditFile(t, session, "user1", forkedName, "master", "README.md", "Hello, World (Edited)\n")
39+
testPullCreate(t, session, "user1", forkedName, false, "master", "master", "Indexer notifier test pull")
40+
41+
baseRepo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerName: "user2", Name: "repo1"})
42+
forkedRepo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerName: "user1", Name: forkedName})
43+
pr := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{
44+
BaseRepoID: baseRepo.ID,
45+
BaseBranch: "master",
46+
HeadRepoID: forkedRepo.ID,
47+
HeadBranch: "master",
48+
})
49+
50+
// add protected branch for commit status
51+
csrf := GetCSRF(t, session, "/user2/repo1/settings/branches")
52+
// Change master branch to protected
53+
req := NewRequestWithValues(t, "POST", "/user2/repo1/settings/branches/edit", map[string]string{
54+
"_csrf": csrf,
55+
"rule_name": "master",
56+
"enable_push": "true",
57+
"enable_status_check": "true",
58+
"status_check_contexts": "gitea/actions",
59+
})
60+
session.MakeRequest(t, req, http.StatusSeeOther)
61+
62+
// add automerge for this repo
63+
req = NewRequestWithBody(t, http.MethodPost, fmt.Sprintf("/api/v1/repos/%s/%s/pulls/%d/merge", baseRepo.OwnerName, baseRepo.Name, pr.Index),
64+
strings.NewReader(url.Values{
65+
"do": []string{"merge"},
66+
"merge_when_checks_succeed": []string{"true"},
67+
}.Encode())).
68+
AddTokenAuth("8061e833a55f6fc0157c98b883e91fcfeeb1a71a")
69+
MakeRequest(t, req, http.StatusCreated)
70+
71+
// reload pr again
72+
pr = unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: pr.ID})
73+
assert.False(t, pr.HasMerged)
74+
assert.Empty(t, pr.MergedCommitID)
75+
76+
// update commit status to success, then it should be merged automatically
77+
baseGitRepo, err := gitrepo.OpenRepository(db.DefaultContext, baseRepo)
78+
assert.NoError(t, err)
79+
sha, err := baseGitRepo.GetRefCommitID(pr.GetGitRefName())
80+
assert.NoError(t, err)
81+
masterCommitID, err := baseGitRepo.GetBranchCommitID("master")
82+
assert.NoError(t, err)
83+
84+
branches, _, err := baseGitRepo.GetBranchNames(0, 100)
85+
assert.NoError(t, err)
86+
assert.ElementsMatch(t, []string{"sub-home-md-img-check", "home-md-img-check", "pr-to-update", "branch2", "DefaultBranch", "develop", "feature/1", "master"}, branches)
87+
baseGitRepo.Close()
88+
defer func() {
89+
testResetRepo(t, baseRepo.RepoPath(), "master", masterCommitID)
90+
}()
91+
92+
err = commitstatus_service.CreateCommitStatus(db.DefaultContext, baseRepo, user1, sha, &git_model.CommitStatus{
93+
State: api.CommitStatusSuccess,
94+
TargetURL: "https://gitea.com",
95+
Context: "gitea/actions",
96+
})
97+
assert.NoError(t, err)
98+
99+
time.Sleep(2 * time.Second)
100+
101+
// reload pr again
102+
pr = unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: pr.ID})
103+
assert.True(t, pr.HasMerged)
104+
assert.NotEmpty(t, pr.MergedCommitID)
105+
106+
unittest.AssertNotExistsBean(t, &pull_model.AutoMerge{PullID: pr.ID})
107+
})
108+
}

0 commit comments

Comments
 (0)