From 67ef19b09987f174b9172b0732d52743726c8eb1 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Fri, 9 May 2025 21:04:33 -0700 Subject: [PATCH 1/4] Add a webhook push test for dev branch --- tests/integration/repo_webhook_test.go | 36 +++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/tests/integration/repo_webhook_test.go b/tests/integration/repo_webhook_test.go index 89df15b8de8c3..476dd8a63b0e7 100644 --- a/tests/integration/repo_webhook_test.go +++ b/tests/integration/repo_webhook_test.go @@ -56,7 +56,7 @@ func TestNewWebHookLink(t *testing.T) { } } -func testAPICreateWebhookForRepo(t *testing.T, session *TestSession, userName, repoName, url, event string) { +func testAPICreateWebhookForRepo(t *testing.T, session *TestSession, userName, repoName, url, event string, branchFilter ...string) { token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeAll) req := NewRequestWithJSON(t, "POST", "/api/v1/repos/"+userName+"/"+repoName+"/hooks", api.CreateHookOption{ Type: "gitea", @@ -322,6 +322,40 @@ func Test_WebhookPush(t *testing.T) { }) } +func Test_WebhookPushDevBranch(t *testing.T) { + var payloads []api.PushPayload + var triggeredEvent string + provider := newMockWebhookProvider(func(r *http.Request) { + content, _ := io.ReadAll(r.Body) + var payload api.PushPayload + err := json.Unmarshal(content, &payload) + assert.NoError(t, err) + payloads = append(payloads, payload) + triggeredEvent = "push" + }, http.StatusOK) + defer provider.Close() + + onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) { + // 1. create a new webhook with special webhook for repo1 + session := loginUser(t, "user2") + + // only for dev branch + testAPICreateWebhookForRepo(t, session, "user2", "repo1", provider.URL(), "push", "develop") + + // 2. trigger the webhook + testCreateFile(t, session, "user2", "repo1", "develop", "test_webhook_push.md", "# a test file for webhook push") + + // 3. validate the webhook is triggered + assert.Equal(t, "push", triggeredEvent) + assert.Len(t, payloads, 1) + assert.Equal(t, "repo1", payloads[0].Repo.Name) + assert.Equal(t, "develop", payloads[0].Branch()) + assert.Equal(t, "user2/repo1", payloads[0].Repo.FullName) + assert.Len(t, payloads[0].Commits, 1) + assert.Equal(t, []string{"test_webhook_push.md"}, payloads[0].Commits[0].Added) + }) +} + func Test_WebhookIssue(t *testing.T) { var payloads []api.IssuePayload var triggeredEvent string From 8171db0c3680382f5b1e1b97a0d10c75328be4ce Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 11 May 2025 12:32:38 -0700 Subject: [PATCH 2/4] Fix test --- tests/integration/repo_webhook_test.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/tests/integration/repo_webhook_test.go b/tests/integration/repo_webhook_test.go index 476dd8a63b0e7..eab58922e62be 100644 --- a/tests/integration/repo_webhook_test.go +++ b/tests/integration/repo_webhook_test.go @@ -21,6 +21,7 @@ import ( "code.gitea.io/gitea/modules/gitrepo" "code.gitea.io/gitea/modules/json" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/modules/util" webhook_module "code.gitea.io/gitea/modules/webhook" "code.gitea.io/gitea/tests" @@ -64,8 +65,9 @@ func testAPICreateWebhookForRepo(t *testing.T, session *TestSession, userName, r "content_type": "json", "url": url, }, - Events: []string{event}, - Active: true, + Events: []string{event}, + Active: true, + BranchFilter: util.Iif(len(branchFilter) > 0, branchFilter[0], ""), }).AddTokenAuth(token) MakeRequest(t, req, http.StatusCreated) } @@ -342,10 +344,15 @@ func Test_WebhookPushDevBranch(t *testing.T) { // only for dev branch testAPICreateWebhookForRepo(t, session, "user2", "repo1", provider.URL(), "push", "develop") - // 2. trigger the webhook + // 2. this should not trigger the webhook + testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push") + assert.Equal(t, "", triggeredEvent) + assert.Len(t, payloads, 0) + + // 3. trigger the webhook testCreateFile(t, session, "user2", "repo1", "develop", "test_webhook_push.md", "# a test file for webhook push") - // 3. validate the webhook is triggered + // 4. validate the webhook is triggered assert.Equal(t, "push", triggeredEvent) assert.Len(t, payloads, 1) assert.Equal(t, "repo1", payloads[0].Repo.Name) From 7aca325cb7be5db649661f1d9e740cd60f7f19da Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 11 May 2025 12:42:52 -0700 Subject: [PATCH 3/4] Fix test --- tests/integration/repo_webhook_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/integration/repo_webhook_test.go b/tests/integration/repo_webhook_test.go index c4b3ac896cfc8..ed735c9ab33de 100644 --- a/tests/integration/repo_webhook_test.go +++ b/tests/integration/repo_webhook_test.go @@ -395,8 +395,8 @@ func Test_WebhookPushDevBranch(t *testing.T) { // 2. this should not trigger the webhook testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push") - assert.Equal(t, "", triggeredEvent) - assert.Len(t, payloads, 0) + assert.Empty(t, triggeredEvent) + assert.Empty(t, payloads) // 3. trigger the webhook testCreateFile(t, session, "user2", "repo1", "develop", "test_webhook_push.md", "# a test file for webhook push") From f56341c23c9c3e307141b485b7db3e1562dea763 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 11 May 2025 16:08:18 -0700 Subject: [PATCH 4/4] Fix bug --- tests/integration/repo_webhook_test.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/integration/repo_webhook_test.go b/tests/integration/repo_webhook_test.go index ed735c9ab33de..d55be2a5673a8 100644 --- a/tests/integration/repo_webhook_test.go +++ b/tests/integration/repo_webhook_test.go @@ -21,7 +21,6 @@ import ( "code.gitea.io/gitea/modules/gitrepo" "code.gitea.io/gitea/modules/json" api "code.gitea.io/gitea/modules/structs" - "code.gitea.io/gitea/modules/util" webhook_module "code.gitea.io/gitea/modules/webhook" "code.gitea.io/gitea/tests" @@ -59,6 +58,10 @@ func TestNewWebHookLink(t *testing.T) { func testAPICreateWebhookForRepo(t *testing.T, session *TestSession, userName, repoName, url, event string, branchFilter ...string) { token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeAll) + var branchFilterString string + if len(branchFilter) > 0 { + branchFilterString = branchFilter[0] + } req := NewRequestWithJSON(t, "POST", "/api/v1/repos/"+userName+"/"+repoName+"/hooks", api.CreateHookOption{ Type: "gitea", Config: api.CreateHookOptionConfig{ @@ -67,7 +70,7 @@ func testAPICreateWebhookForRepo(t *testing.T, session *TestSession, userName, r }, Events: []string{event}, Active: true, - BranchFilter: util.Iif(len(branchFilter) > 0, branchFilter[0], ""), + BranchFilter: branchFilterString, }).AddTokenAuth(token) MakeRequest(t, req, http.StatusCreated) }