Skip to content

Commit 89e9efb

Browse files
committed
Add webhook test for push event
1 parent 637070e commit 89e9efb

File tree

2 files changed

+77
-26
lines changed

2 files changed

+77
-26
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: 61 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ import (
1818
user_model "code.gitea.io/gitea/models/user"
1919
"code.gitea.io/gitea/models/webhook"
2020
"code.gitea.io/gitea/modules/commitstatus"
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"
@@ -360,58 +362,98 @@ func Test_WebhookPush(t *testing.T) {
360362

361363
// 1. create a new webhook with special webhook for repo1
362364
session := loginUser(t, "user2")
365+
repo1 := unittest.AssertExistsAndLoadBean(t, &repo.Repository{ID: 1})
366+
367+
testAPICreateWebhookForRepo(t, session, repo1.OwnerName, repo1.Name, provider.URL(), "push")
363368

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

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

369382
// 3. validate the webhook is triggered
370383
assert.Equal(t, "push", triggeredEvent)
371384
assert.Len(t, payloads, 1)
385+
assert.Equal(t, "refs/heads/master", payloads[0].Ref)
386+
assert.Equal(t, beforeCommitID, payloads[0].Before)
387+
assert.Equal(t, afterCommitID, payloads[0].After)
372388
assert.Equal(t, "repo1", payloads[0].Repo.Name)
373389
assert.Equal(t, "user2/repo1", payloads[0].Repo.FullName)
374390
assert.Len(t, payloads[0].Commits, 1)
391+
assert.Equal(t, afterCommitID, payloads[0].Commits[0].ID)
392+
assert.Equal(t, setting.AppURL+"user2/repo1/compare/"+beforeCommitID+"..."+afterCommitID, payloads[0].CompareURL)
375393
assert.Equal(t, []string{"test_webhook_push.md"}, payloads[0].Commits[0].Added)
394+
assert.Empty(t, payloads[0].Commits[0].Removed)
376395
})
377396
}
378397

379398
func Test_WebhookPushDevBranch(t *testing.T) {
380-
var payloads []api.PushPayload
381-
var triggeredEvent string
382-
provider := newMockWebhookProvider(func(r *http.Request) {
383-
content, _ := io.ReadAll(r.Body)
384-
var payload api.PushPayload
385-
err := json.Unmarshal(content, &payload)
386-
assert.NoError(t, err)
387-
payloads = append(payloads, payload)
388-
triggeredEvent = "push"
389-
}, http.StatusOK)
390-
defer provider.Close()
391-
392399
onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
400+
var payloads []api.PushPayload
401+
var triggeredEvent string
402+
provider := newMockWebhookProvider(func(r *http.Request) {
403+
content, _ := io.ReadAll(r.Body)
404+
var payload api.PushPayload
405+
err := json.Unmarshal(content, &payload)
406+
assert.NoError(t, err)
407+
payloads = append(payloads, payload)
408+
triggeredEvent = "push"
409+
}, http.StatusOK)
410+
defer provider.Close()
411+
412+
repo1 := unittest.AssertExistsAndLoadBean(t, &repo.Repository{ID: 1})
413+
393414
// 1. create a new webhook with special webhook for repo1
394415
session := loginUser(t, "user2")
395416

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

399424
// 2. this should not trigger the webhook
400-
testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push")
425+
testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push", "")
401426
assert.Empty(t, triggeredEvent)
402427
assert.Empty(t, payloads)
403428

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

407443
// 4. validate the webhook is triggered
408444
assert.Equal(t, "push", triggeredEvent)
409445
assert.Len(t, payloads, 1)
446+
assert.Equal(t, "refs/heads/new_branch", payloads[0].Ref)
447+
assert.Equal(t, beforeCommitID, payloads[0].Before)
448+
assert.Equal(t, afterCommitID, payloads[0].After)
410449
assert.Equal(t, "repo1", payloads[0].Repo.Name)
411-
assert.Equal(t, "develop", payloads[0].Branch())
450+
assert.Equal(t, "new_branch", payloads[0].Branch())
412451
assert.Equal(t, "user2/repo1", payloads[0].Repo.FullName)
413452
assert.Len(t, payloads[0].Commits, 1)
453+
assert.Equal(t, afterCommitID, payloads[0].Commits[0].ID)
454+
assert.Equal(t, setting.AppURL+"user2/repo1/compare/"+fromBranchCommitID+"..."+afterCommitID, payloads[0].CompareURL)
414455
assert.Equal(t, []string{"test_webhook_push.md"}, payloads[0].Commits[0].Added)
456+
assert.Empty(t, payloads[0].Commits[0].Removed)
415457
})
416458
}
417459

@@ -806,7 +848,7 @@ func Test_WebhookStatus_NoWrongTrigger(t *testing.T) {
806848
testCreateWebhookForRepo(t, session, "gitea", "user2", "repo1", provider.URL(), "push_only")
807849

808850
// 2. trigger the webhook with a push action
809-
testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push")
851+
testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push", "")
810852

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

0 commit comments

Comments
 (0)