Skip to content

Commit 920d62c

Browse files
authored
Add webhook test for push event (#34442)
Confirm #9243 has been fixed.
1 parent de570b7 commit 920d62c

File tree

2 files changed

+86
-10
lines changed

2 files changed

+86
-10
lines changed

tests/integration/editor_test.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func TestEditor(t *testing.T) {
5656

5757
func testEditorCreateFile(t *testing.T) {
5858
session := loginUser(t, "user2")
59-
testCreateFile(t, session, "user2", "repo1", "master", "test.txt", "Content")
59+
testCreateFile(t, session, "user2", "repo1", "master", "", "test.txt", "Content")
6060
testEditorActionPostRequestError(t, session, "/user2/repo1/_new/master/", map[string]string{
6161
"tree_path": "test.txt",
6262
"commit_choice": "direct",
@@ -69,11 +69,16 @@ func testEditorCreateFile(t *testing.T) {
6969
}, `Branch "master" already exists in this repository.`)
7070
}
7171

72-
func testCreateFile(t *testing.T, session *TestSession, user, repo, branch, filePath, content string) {
73-
testEditorActionEdit(t, session, user, repo, "_new", branch, "", map[string]string{
74-
"tree_path": filePath,
75-
"content": content,
76-
"commit_choice": "direct",
72+
func testCreateFile(t *testing.T, session *TestSession, user, repo, baseBranchName, newBranchName, filePath, content string) {
73+
commitChoice := "direct"
74+
if newBranchName != "" && newBranchName != baseBranchName {
75+
commitChoice = "commit-to-new-branch"
76+
}
77+
testEditorActionEdit(t, session, user, repo, "_new", baseBranchName, "", map[string]string{
78+
"tree_path": filePath,
79+
"content": content,
80+
"commit_choice": commitChoice,
81+
"new_branch_name": newBranchName,
7782
})
7883
}
7984

tests/integration/repo_webhook_test.go

Lines changed: 75 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ import (
1919
user_model "code.gitea.io/gitea/models/user"
2020
"code.gitea.io/gitea/models/webhook"
2121
"code.gitea.io/gitea/modules/commitstatus"
22+
"code.gitea.io/gitea/modules/git"
2223
"code.gitea.io/gitea/modules/gitrepo"
2324
"code.gitea.io/gitea/modules/json"
25+
"code.gitea.io/gitea/modules/setting"
2426
api "code.gitea.io/gitea/modules/structs"
2527
webhook_module "code.gitea.io/gitea/modules/webhook"
2628
"code.gitea.io/gitea/tests"
@@ -365,7 +367,7 @@ func Test_WebhookPush(t *testing.T) {
365367
testAPICreateWebhookForRepo(t, session, "user2", "repo1", provider.URL(), "push")
366368

367369
// 2. trigger the webhook
368-
testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push")
370+
testCreateFile(t, session, "user2", "repo1", "master", "", "test_webhook_push.md", "# a test file for webhook push")
369371

370372
// 3. validate the webhook is triggered
371373
assert.Equal(t, "push", triggeredEvent)
@@ -398,21 +400,90 @@ func Test_WebhookPushDevBranch(t *testing.T) {
398400
testAPICreateWebhookForRepo(t, session, "user2", "repo1", provider.URL(), "push", "develop")
399401

400402
// 2. this should not trigger the webhook
401-
testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push")
403+
testCreateFile(t, session, "user2", "repo1", "master", "", "test_webhook_push.md", "# a test file for webhook push")
402404
assert.Empty(t, triggeredEvent)
403405
assert.Empty(t, payloads)
404406

407+
repo1 := unittest.AssertExistsAndLoadBean(t, &repo.Repository{ID: 1})
408+
gitRepo, err := gitrepo.OpenRepository(t.Context(), repo1)
409+
assert.NoError(t, err)
410+
defer gitRepo.Close()
411+
412+
beforeCommitID, err := gitRepo.GetBranchCommitID("develop")
413+
assert.NoError(t, err)
414+
405415
// 3. trigger the webhook
406-
testCreateFile(t, session, "user2", "repo1", "develop", "test_webhook_push.md", "# a test file for webhook push")
416+
testCreateFile(t, session, "user2", "repo1", "develop", "", "test_webhook_push.md", "# a test file for webhook push")
417+
418+
afterCommitID, err := gitRepo.GetBranchCommitID("develop")
419+
assert.NoError(t, err)
407420

408421
// 4. validate the webhook is triggered
409422
assert.Equal(t, "push", triggeredEvent)
410423
assert.Len(t, payloads, 1)
424+
assert.Equal(t, "refs/heads/develop", payloads[0].Ref)
425+
assert.Equal(t, beforeCommitID, payloads[0].Before)
426+
assert.Equal(t, afterCommitID, payloads[0].After)
411427
assert.Equal(t, "repo1", payloads[0].Repo.Name)
412428
assert.Equal(t, "develop", payloads[0].Branch())
413429
assert.Equal(t, "user2/repo1", payloads[0].Repo.FullName)
414430
assert.Len(t, payloads[0].Commits, 1)
431+
assert.Equal(t, afterCommitID, payloads[0].Commits[0].ID)
432+
assert.Equal(t, setting.AppURL+"user2/repo1/compare/"+beforeCommitID+"..."+afterCommitID, payloads[0].CompareURL)
433+
assert.Equal(t, []string{"test_webhook_push.md"}, payloads[0].Commits[0].Added)
434+
assert.Empty(t, payloads[0].Commits[0].Removed)
435+
})
436+
}
437+
438+
func Test_WebhookPushToNewBranch(t *testing.T) {
439+
var payloads []api.PushPayload
440+
var triggeredEvent string
441+
provider := newMockWebhookProvider(func(r *http.Request) {
442+
content, _ := io.ReadAll(r.Body)
443+
var payload api.PushPayload
444+
err := json.Unmarshal(content, &payload)
445+
assert.NoError(t, err)
446+
payloads = append(payloads, payload)
447+
triggeredEvent = "push"
448+
}, http.StatusOK)
449+
defer provider.Close()
450+
451+
onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
452+
// 1. create a new webhook with special webhook for repo1
453+
session := loginUser(t, "user2")
454+
455+
// only for dev branch
456+
testAPICreateWebhookForRepo(t, session, "user2", "repo1", provider.URL(), "push", "new_branch")
457+
458+
repo1 := unittest.AssertExistsAndLoadBean(t, &repo.Repository{ID: 1})
459+
gitRepo, err := gitrepo.OpenRepository(t.Context(), repo1)
460+
assert.NoError(t, err)
461+
defer gitRepo.Close()
462+
463+
beforeCommitID, err := gitRepo.GetBranchCommitID("master")
464+
assert.NoError(t, err)
465+
466+
// 2. trigger the webhook
467+
testCreateFile(t, session, "user2", "repo1", "master", "new_branch", "test_webhook_push.md", "# a new push from new branch")
468+
469+
afterCommitID, err := gitRepo.GetBranchCommitID("new_branch")
470+
assert.NoError(t, err)
471+
emptyCommitID := git.Sha1ObjectFormat.EmptyObjectID().String()
472+
473+
// 4. validate the webhook is triggered
474+
assert.Equal(t, "push", triggeredEvent)
475+
assert.Len(t, payloads, 1)
476+
assert.Equal(t, "refs/heads/new_branch", payloads[0].Ref)
477+
assert.Equal(t, emptyCommitID, payloads[0].Before)
478+
assert.Equal(t, afterCommitID, payloads[0].After)
479+
assert.Equal(t, "repo1", payloads[0].Repo.Name)
480+
assert.Equal(t, "new_branch", payloads[0].Branch())
481+
assert.Equal(t, "user2/repo1", payloads[0].Repo.FullName)
482+
assert.Len(t, payloads[0].Commits, 1)
483+
assert.Equal(t, afterCommitID, payloads[0].Commits[0].ID)
484+
assert.Equal(t, setting.AppURL+"user2/repo1/compare/"+beforeCommitID+"..."+afterCommitID, payloads[0].CompareURL)
415485
assert.Equal(t, []string{"test_webhook_push.md"}, payloads[0].Commits[0].Added)
486+
assert.Empty(t, payloads[0].Commits[0].Removed)
416487
})
417488
}
418489

@@ -878,7 +949,7 @@ func Test_WebhookStatus_NoWrongTrigger(t *testing.T) {
878949
testCreateWebhookForRepo(t, session, "gitea", "user2", "repo1", provider.URL(), "push_only")
879950

880951
// 2. trigger the webhook with a push action
881-
testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push")
952+
testCreateFile(t, session, "user2", "repo1", "master", "", "test_webhook_push.md", "# a test file for webhook push")
882953

883954
// 3. validate the webhook is triggered with right event
884955
assert.Equal(t, "push", trigger)

0 commit comments

Comments
 (0)