aboutsummaryrefslogtreecommitdiffstats
path: root/tests/integration/pull_create_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'tests/integration/pull_create_test.go')
-rw-r--r--tests/integration/pull_create_test.go87
1 files changed, 87 insertions, 0 deletions
diff --git a/tests/integration/pull_create_test.go b/tests/integration/pull_create_test.go
index 9812d2073d..162ea532c8 100644
--- a/tests/integration/pull_create_test.go
+++ b/tests/integration/pull_create_test.go
@@ -12,6 +12,8 @@ import (
"strings"
"testing"
+ auth_model "code.gitea.io/gitea/models/auth"
+ "code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/test"
"code.gitea.io/gitea/tests"
@@ -82,6 +84,30 @@ func testPullCreateDirectly(t *testing.T, session *TestSession, baseRepoOwner, b
return resp
}
+func testPullCreateFailure(t *testing.T, session *TestSession, baseRepoOwner, baseRepoName, baseBranch, headRepoOwner, headRepoName, headBranch, title string) *httptest.ResponseRecorder {
+ headCompare := headBranch
+ if headRepoOwner != "" {
+ if headRepoName != "" {
+ headCompare = fmt.Sprintf("%s/%s:%s", headRepoOwner, headRepoName, headBranch)
+ } else {
+ headCompare = fmt.Sprintf("%s:%s", headRepoOwner, headBranch)
+ }
+ }
+ req := NewRequest(t, "GET", fmt.Sprintf("/%s/%s/compare/%s...%s", baseRepoOwner, baseRepoName, baseBranch, headCompare))
+ resp := session.MakeRequest(t, req, http.StatusOK)
+
+ // Submit the form for creating the pull
+ htmlDoc := NewHTMLParser(t, resp.Body)
+ link, exists := htmlDoc.doc.Find("form.ui.form").Attr("action")
+ assert.True(t, exists, "The template has changed")
+ req = NewRequestWithValues(t, "POST", link, map[string]string{
+ "_csrf": htmlDoc.GetCSRF(),
+ "title": title,
+ })
+ resp = session.MakeRequest(t, req, http.StatusBadRequest)
+ return resp
+}
+
func TestPullCreate(t *testing.T) {
onGiteaRun(t, func(t *testing.T, u *url.URL) {
session := loginUser(t, "user1")
@@ -226,3 +252,64 @@ func TestPullCreatePrFromBaseToFork(t *testing.T) {
assert.Regexp(t, "^/user1/repo1/pulls/[0-9]*$", url)
})
}
+
+func TestCreateAgitPullWithReadPermission(t *testing.T) {
+ onGiteaRun(t, func(t *testing.T, u *url.URL) {
+ dstPath := t.TempDir()
+
+ u.Path = "user2/repo1.git"
+ u.User = url.UserPassword("user4", userPassword)
+
+ t.Run("Clone", doGitClone(dstPath, u))
+
+ t.Run("add commit", doGitAddSomeCommits(dstPath, "master"))
+
+ t.Run("do agit pull create", func(t *testing.T) {
+ err := git.NewCommand(git.DefaultContext, "push", "origin", "HEAD:refs/for/master", "-o").AddDynamicArguments("topic=" + "test-topic").Run(&git.RunOpts{Dir: dstPath})
+ assert.NoError(t, err)
+ })
+ })
+}
+
+/*
+Setup: user2 has repository, user1 forks it
+---
+
+1. User2 blocks User1
+2. User1 adds changes to fork
+3. User1 attempts to create a pull request
+4. User1 sees alert that the action is not allowed because of the block
+*/
+func TestCreatePullWhenBlocked(t *testing.T) {
+ RepoOwner := "user2"
+ ForkOwner := "user16"
+ onGiteaRun(t, func(t *testing.T, u *url.URL) {
+ // Setup
+ // User1 forks repo1 from User2
+ sessionFork := loginUser(t, ForkOwner)
+ testRepoFork(t, sessionFork, RepoOwner, "repo1", ForkOwner, "forkrepo1", "")
+
+ // 1. User2 blocks user1
+ // sessionBase := loginUser(t, "user2")
+ token := getUserToken(t, RepoOwner, auth_model.AccessTokenScopeWriteUser)
+
+ req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/user/blocks/%s", ForkOwner)).
+ AddTokenAuth(token)
+ MakeRequest(t, req, http.StatusNotFound)
+ req = NewRequest(t, "PUT", fmt.Sprintf("/api/v1/user/blocks/%s", ForkOwner)).
+ AddTokenAuth(token)
+ MakeRequest(t, req, http.StatusNoContent)
+
+ // 2. User1 adds changes to fork
+ testEditFile(t, sessionFork, ForkOwner, "forkrepo1", "master", "README.md", "Hello, World (Edited)\n")
+
+ // 3. User1 attempts to create a pull request
+ testPullCreateFailure(t, sessionFork, RepoOwner, "repo1", "master", ForkOwner, "forkrepo1", "master", "This is a pull title")
+
+ // Teardown
+ // Unblock user
+ req = NewRequest(t, "DELETE", fmt.Sprintf("/api/v1/user/blocks/%s", ForkOwner)).
+ AddTokenAuth(token)
+ MakeRequest(t, req, http.StatusNoContent)
+ })
+}