aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorTim <tim@datenknoten.me>2024-10-23 06:39:43 +0200
committerGitHub <noreply@github.com>2024-10-23 12:39:43 +0800
commitde2ad2e1b177ed1c3412761c54b28579f8ecbb00 (patch)
treea8124fa2c61116adfe96e41b89335202c2955b55 /tests
parent620f19610ef747412a9e4265c6b20fa560663f17 (diff)
downloadgitea-de2ad2e1b177ed1c3412761c54b28579f8ecbb00.tar.gz
gitea-de2ad2e1b177ed1c3412761c54b28579f8ecbb00.zip
Make admins adhere to branch protection rules (#32248)
This introduces a new flag `BlockAdminMergeOverride` on the branch protection rules that prevents admins/repo owners from bypassing branch protection rules and merging without approvals or failing status checks. Fixes #17131 --------- Co-authored-by: wxiaoguang <wxiaoguang@gmail.com> Co-authored-by: Giteabot <teabot@gitea.io>
Diffstat (limited to 'tests')
-rw-r--r--tests/integration/pull_merge_test.go47
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/integration/pull_merge_test.go b/tests/integration/pull_merge_test.go
index c1c8a8bf4e..43210e852e 100644
--- a/tests/integration/pull_merge_test.go
+++ b/tests/integration/pull_merge_test.go
@@ -976,3 +976,50 @@ func TestPullAutoMergeAfterCommitStatusSucceedAndApprovalForAgitFlow(t *testing.
unittest.AssertNotExistsBean(t, &pull_model.AutoMerge{PullID: pr.ID})
})
}
+
+func TestPullNonMergeForAdminWithBranchProtection(t *testing.T) {
+ onGiteaRun(t, func(t *testing.T, u *url.URL) {
+ // create a pull request
+ session := loginUser(t, "user1")
+ forkedName := "repo1-1"
+ testRepoFork(t, session, "user2", "repo1", "user1", forkedName, "")
+ defer testDeleteRepository(t, session, "user1", forkedName)
+
+ testEditFile(t, session, "user1", forkedName, "master", "README.md", "Hello, World (Edited)\n")
+ testPullCreate(t, session, "user1", forkedName, false, "master", "master", "Indexer notifier test pull")
+
+ baseRepo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerName: "user2", Name: "repo1"})
+ forkedRepo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerName: "user1", Name: forkedName})
+ unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{
+ BaseRepoID: baseRepo.ID,
+ BaseBranch: "master",
+ HeadRepoID: forkedRepo.ID,
+ HeadBranch: "master",
+ })
+
+ // add protected branch for commit status
+ csrf := GetUserCSRFToken(t, session)
+ // Change master branch to protected
+ pbCreateReq := NewRequestWithValues(t, "POST", "/user2/repo1/settings/branches/edit", map[string]string{
+ "_csrf": csrf,
+ "rule_name": "master",
+ "enable_push": "true",
+ "enable_status_check": "true",
+ "status_check_contexts": "gitea/actions",
+ "block_admin_merge_override": "true",
+ })
+ session.MakeRequest(t, pbCreateReq, http.StatusSeeOther)
+
+ token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository)
+
+ mergeReq := NewRequestWithValues(t, "POST", "/api/v1/repos/user2/repo1/pulls/6/merge", map[string]string{
+ "_csrf": csrf,
+ "head_commit_id": "",
+ "merge_when_checks_succeed": "false",
+ "force_merge": "true",
+ "do": "rebase",
+ }).AddTokenAuth(token)
+
+ session.MakeRequest(t, mergeReq, http.StatusMethodNotAllowed)
+ })
+}