Skip to content

Commit 02e334b

Browse files
committed
Add webhook test for push event
1 parent 688da55 commit 02e334b

File tree

2 files changed

+66
-14
lines changed

2 files changed

+66
-14
lines changed

tests/integration/editor_test.go

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,14 @@ import (
3030
func TestCreateFile(t *testing.T) {
3131
onGiteaRun(t, func(t *testing.T, u *url.URL) {
3232
session := loginUser(t, "user2")
33-
testCreateFile(t, session, "user2", "repo1", "master", "test.txt", "Content")
33+
testCreateFile(t, session, "user2", "repo1", "master", "test.txt", "Content", "")
3434
})
3535
}
3636

37-
func testCreateFile(t *testing.T, session *TestSession, user, repo, branch, filePath, content string) *httptest.ResponseRecorder {
37+
func testCreateFileOnNewBranch(t *testing.T) {
38+
}
39+
40+
func testCreateFile(t *testing.T, session *TestSession, user, repo, branch, filePath, content, newBranch string) *httptest.ResponseRecorder {
3841
// Request editor page
3942
newURL := fmt.Sprintf("/%s/%s/_new/%s/", user, repo, branch)
4043
req := NewRequest(t, "GET", newURL)
@@ -44,13 +47,19 @@ func testCreateFile(t *testing.T, session *TestSession, user, repo, branch, file
4447
lastCommit := doc.GetInputValueByName("last_commit")
4548
assert.NotEmpty(t, lastCommit)
4649

50+
commitChoice := "direct"
51+
if newBranch != "" && newBranch != branch {
52+
commitChoice = "commit-to-new-branch"
53+
}
54+
4755
// Save new file to master branch
4856
req = NewRequestWithValues(t, "POST", newURL, map[string]string{
49-
"_csrf": doc.GetCSRF(),
50-
"last_commit": lastCommit,
51-
"tree_path": filePath,
52-
"content": content,
53-
"commit_choice": "direct",
57+
"_csrf": doc.GetCSRF(),
58+
"last_commit": lastCommit,
59+
"tree_path": filePath,
60+
"content": content,
61+
"commit_choice": commitChoice,
62+
"new_branch_name": newBranch,
5463
})
5564
return session.MakeRequest(t, req, http.StatusSeeOther)
5665
}

tests/integration/repo_webhook_test.go

Lines changed: 50 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ import (
1818
"code.gitea.io/gitea/models/unittest"
1919
user_model "code.gitea.io/gitea/models/user"
2020
"code.gitea.io/gitea/models/webhook"
21+
"code.gitea.io/gitea/modules/git"
2122
"code.gitea.io/gitea/modules/gitrepo"
2223
"code.gitea.io/gitea/modules/json"
24+
"code.gitea.io/gitea/modules/setting"
2325
api "code.gitea.io/gitea/modules/structs"
2426
webhook_module "code.gitea.io/gitea/modules/webhook"
2527
"code.gitea.io/gitea/tests"
@@ -357,22 +359,40 @@ func Test_WebhookPush(t *testing.T) {
357359
}, http.StatusOK)
358360
defer provider.Close()
359361

362+
repo1 := unittest.AssertExistsAndLoadBean(t, &repo.Repository{ID: 1})
363+
360364
onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
361365
// 1. create a new webhook with special webhook for repo1
362366
session := loginUser(t, "user2")
363367

364-
testAPICreateWebhookForRepo(t, session, "user2", "repo1", provider.URL(), "push")
368+
testAPICreateWebhookForRepo(t, session, repo1.OwnerName, repo1.Name, provider.URL(), "push")
369+
370+
gitRepo, err := gitrepo.OpenRepository(t.Context(), repo1)
371+
assert.NoError(t, err)
372+
defer gitRepo.Close()
373+
374+
beforeCommitID, err := gitRepo.GetRefCommitID("master")
375+
assert.NoError(t, err)
365376

366377
// 2. trigger the webhook
367-
testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push")
378+
testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push", "")
379+
380+
afterCommitID, err := gitRepo.GetRefCommitID("master")
381+
assert.NoError(t, err)
368382

369383
// 3. validate the webhook is triggered
370384
assert.Equal(t, "push", triggeredEvent)
371385
assert.Len(t, payloads, 1)
386+
assert.Equal(t, "refs/heads/master", payloads[0].Ref)
387+
assert.Equal(t, beforeCommitID, payloads[0].Before)
388+
assert.Equal(t, afterCommitID, payloads[0].After)
372389
assert.Equal(t, "repo1", payloads[0].Repo.Name)
373390
assert.Equal(t, "user2/repo1", payloads[0].Repo.FullName)
374391
assert.Len(t, payloads[0].Commits, 1)
392+
assert.Equal(t, afterCommitID, payloads[0].Commits[0].ID)
393+
assert.Equal(t, setting.AppURL+"user2/repo1/compare/"+beforeCommitID+"..."+afterCommitID, payloads[0].CompareURL)
375394
assert.Equal(t, []string{"test_webhook_push.md"}, payloads[0].Commits[0].Added)
395+
assert.Empty(t, payloads[0].Commits[0].Removed)
376396
})
377397
}
378398

@@ -389,29 +409,52 @@ func Test_WebhookPushDevBranch(t *testing.T) {
389409
}, http.StatusOK)
390410
defer provider.Close()
391411

412+
repo1 := unittest.AssertExistsAndLoadBean(t, &repo.Repository{ID: 1})
413+
392414
onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
393415
// 1. create a new webhook with special webhook for repo1
394416
session := loginUser(t, "user2")
395417

418+
gitRepo, err := gitrepo.OpenRepository(t.Context(), repo1)
419+
assert.NoError(t, err)
420+
defer gitRepo.Close()
421+
396422
// only for dev branch
397-
testAPICreateWebhookForRepo(t, session, "user2", "repo1", provider.URL(), "push", "develop")
423+
testAPICreateWebhookForRepo(t, session, "user2", "repo1", provider.URL(), "push", "new_branch")
398424

399425
// 2. this should not trigger the webhook
400-
testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push")
426+
testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push", "")
401427
assert.Empty(t, triggeredEvent)
402428
assert.Empty(t, payloads)
403429

430+
_, err = gitRepo.GetRefCommitID("new_branch")
431+
assert.Error(t, err)
432+
433+
fromBranchCommitID, err := gitRepo.GetRefCommitID("develop")
434+
assert.NoError(t, err)
435+
404436
// 3. trigger the webhook
405-
testCreateFile(t, session, "user2", "repo1", "develop", "test_webhook_push.md", "# a test file for webhook push")
437+
testCreateFile(t, session, "user2", "repo1", "develop", "test_webhook_push.md", "# a test file for webhook push", "new_branch")
438+
439+
afterCommitID, err := gitRepo.GetRefCommitID("new_branch")
440+
assert.NoError(t, err)
441+
442+
beforeCommitID := git.Sha1ObjectFormat.EmptyObjectID().String()
406443

407444
// 4. validate the webhook is triggered
408445
assert.Equal(t, "push", triggeredEvent)
409446
assert.Len(t, payloads, 1)
447+
assert.Equal(t, "refs/heads/new_branch", payloads[0].Ref)
448+
assert.Equal(t, beforeCommitID, payloads[0].Before)
449+
assert.Equal(t, afterCommitID, payloads[0].After)
410450
assert.Equal(t, "repo1", payloads[0].Repo.Name)
411-
assert.Equal(t, "develop", payloads[0].Branch())
451+
assert.Equal(t, "new_branch", payloads[0].Branch())
412452
assert.Equal(t, "user2/repo1", payloads[0].Repo.FullName)
413453
assert.Len(t, payloads[0].Commits, 1)
454+
assert.Equal(t, afterCommitID, payloads[0].Commits[0].ID)
455+
assert.Equal(t, setting.AppURL+"user2/repo1/compare/"+fromBranchCommitID+"..."+afterCommitID, payloads[0].CompareURL)
414456
assert.Equal(t, []string{"test_webhook_push.md"}, payloads[0].Commits[0].Added)
457+
assert.Empty(t, payloads[0].Commits[0].Removed)
415458
})
416459
}
417460

@@ -767,7 +810,7 @@ func Test_WebhookStatus_NoWrongTrigger(t *testing.T) {
767810
testCreateWebhookForRepo(t, session, "gitea", "user2", "repo1", provider.URL(), "push_only")
768811

769812
// 2. trigger the webhook with a push action
770-
testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push")
813+
testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push", "")
771814

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

0 commit comments

Comments
 (0)