diff --git a/tests/integration/editor_test.go b/tests/integration/editor_test.go index a5936d86de225..daad37f849019 100644 --- a/tests/integration/editor_test.go +++ b/tests/integration/editor_test.go @@ -30,11 +30,11 @@ import ( func TestCreateFile(t *testing.T) { onGiteaRun(t, func(t *testing.T, u *url.URL) { session := loginUser(t, "user2") - testCreateFile(t, session, "user2", "repo1", "master", "test.txt", "Content") + testCreateFile(t, session, "user2", "repo1", "master", "test.txt", "Content", "") }) } -func testCreateFile(t *testing.T, session *TestSession, user, repo, branch, filePath, content string) *httptest.ResponseRecorder { +func testCreateFile(t *testing.T, session *TestSession, user, repo, branch, filePath, content, newBranch string) *httptest.ResponseRecorder { // Request editor page newURL := fmt.Sprintf("/%s/%s/_new/%s/", user, repo, branch) req := NewRequest(t, "GET", newURL) @@ -44,13 +44,19 @@ func testCreateFile(t *testing.T, session *TestSession, user, repo, branch, file lastCommit := doc.GetInputValueByName("last_commit") assert.NotEmpty(t, lastCommit) + commitChoice := "direct" + if newBranch != "" && newBranch != branch { + commitChoice = "commit-to-new-branch" + } + // Save new file to master branch req = NewRequestWithValues(t, "POST", newURL, map[string]string{ - "_csrf": doc.GetCSRF(), - "last_commit": lastCommit, - "tree_path": filePath, - "content": content, - "commit_choice": "direct", + "_csrf": doc.GetCSRF(), + "last_commit": lastCommit, + "tree_path": filePath, + "content": content, + "commit_choice": commitChoice, + "new_branch_name": newBranch, }) return session.MakeRequest(t, req, http.StatusSeeOther) } diff --git a/tests/integration/repo_webhook_test.go b/tests/integration/repo_webhook_test.go index 13e3d198eadf0..2d827b3dc0acc 100644 --- a/tests/integration/repo_webhook_test.go +++ b/tests/integration/repo_webhook_test.go @@ -18,8 +18,10 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/models/webhook" + "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/gitrepo" "code.gitea.io/gitea/modules/json" + "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" webhook_module "code.gitea.io/gitea/modules/webhook" "code.gitea.io/gitea/tests" @@ -357,22 +359,40 @@ func Test_WebhookPush(t *testing.T) { }, http.StatusOK) defer provider.Close() + repo1 := unittest.AssertExistsAndLoadBean(t, &repo.Repository{ID: 1}) + onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) { // 1. create a new webhook with special webhook for repo1 session := loginUser(t, "user2") - testAPICreateWebhookForRepo(t, session, "user2", "repo1", provider.URL(), "push") + testAPICreateWebhookForRepo(t, session, repo1.OwnerName, repo1.Name, provider.URL(), "push") + + gitRepo, err := gitrepo.OpenRepository(t.Context(), repo1) + assert.NoError(t, err) + defer gitRepo.Close() + + beforeCommitID, err := gitRepo.GetBranchCommitID("master") + assert.NoError(t, err) // 2. trigger the webhook - testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push") + testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push", "") + + afterCommitID, err := gitRepo.GetBranchCommitID("master") + assert.NoError(t, err) // 3. validate the webhook is triggered assert.Equal(t, "push", triggeredEvent) assert.Len(t, payloads, 1) + assert.Equal(t, "refs/heads/master", payloads[0].Ref) + assert.Equal(t, beforeCommitID, payloads[0].Before) + assert.Equal(t, afterCommitID, payloads[0].After) assert.Equal(t, "repo1", payloads[0].Repo.Name) assert.Equal(t, "user2/repo1", payloads[0].Repo.FullName) assert.Len(t, payloads[0].Commits, 1) + assert.Equal(t, afterCommitID, payloads[0].Commits[0].ID) + assert.Equal(t, setting.AppURL+"user2/repo1/compare/"+beforeCommitID+"..."+afterCommitID, payloads[0].CompareURL) assert.Equal(t, []string{"test_webhook_push.md"}, payloads[0].Commits[0].Added) + assert.Empty(t, payloads[0].Commits[0].Removed) }) } @@ -389,29 +409,52 @@ func Test_WebhookPushDevBranch(t *testing.T) { }, http.StatusOK) defer provider.Close() + repo1 := unittest.AssertExistsAndLoadBean(t, &repo.Repository{ID: 1}) + onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) { // 1. create a new webhook with special webhook for repo1 session := loginUser(t, "user2") + gitRepo, err := gitrepo.OpenRepository(t.Context(), repo1) + assert.NoError(t, err) + defer gitRepo.Close() + // only for dev branch - testAPICreateWebhookForRepo(t, session, "user2", "repo1", provider.URL(), "push", "develop") + testAPICreateWebhookForRepo(t, session, "user2", "repo1", provider.URL(), "push", "new_branch") // 2. this should not trigger the webhook - testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push") + testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push", "") assert.Empty(t, triggeredEvent) assert.Empty(t, payloads) + _, err = gitRepo.GetBranchCommitID("new_branch") + assert.Error(t, err) + + fromBranchCommitID, err := gitRepo.GetBranchCommitID("develop") + assert.NoError(t, err) + // 3. trigger the webhook - testCreateFile(t, session, "user2", "repo1", "develop", "test_webhook_push.md", "# a test file for webhook push") + testCreateFile(t, session, "user2", "repo1", "develop", "test_webhook_push.md", "# a test file for webhook push", "new_branch") + + afterCommitID, err := gitRepo.GetBranchCommitID("new_branch") + assert.NoError(t, err) + + beforeCommitID := git.Sha1ObjectFormat.EmptyObjectID().String() // 4. validate the webhook is triggered assert.Equal(t, "push", triggeredEvent) assert.Len(t, payloads, 1) + assert.Equal(t, "refs/heads/new_branch", payloads[0].Ref) + assert.Equal(t, beforeCommitID, payloads[0].Before) + assert.Equal(t, afterCommitID, payloads[0].After) assert.Equal(t, "repo1", payloads[0].Repo.Name) - assert.Equal(t, "develop", payloads[0].Branch()) + assert.Equal(t, "new_branch", payloads[0].Branch()) assert.Equal(t, "user2/repo1", payloads[0].Repo.FullName) assert.Len(t, payloads[0].Commits, 1) + assert.Equal(t, afterCommitID, payloads[0].Commits[0].ID) + assert.Equal(t, setting.AppURL+"user2/repo1/compare/"+fromBranchCommitID+"..."+afterCommitID, payloads[0].CompareURL) assert.Equal(t, []string{"test_webhook_push.md"}, payloads[0].Commits[0].Added) + assert.Empty(t, payloads[0].Commits[0].Removed) }) } @@ -767,7 +810,7 @@ func Test_WebhookStatus_NoWrongTrigger(t *testing.T) { testCreateWebhookForRepo(t, session, "gitea", "user2", "repo1", provider.URL(), "push_only") // 2. trigger the webhook with a push action - testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push") + testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push", "") // 3. validate the webhook is triggered with right event assert.Equal(t, "push", trigger)