@@ -56,16 +56,21 @@ func TestNewWebHookLink(t *testing.T) {
5656}
5757}
5858
59- func testAPICreateWebhookForRepo (t * testing.T ,session * TestSession ,userName ,repoName ,url ,event string ) {
59+ func testAPICreateWebhookForRepo (t * testing.T ,session * TestSession ,userName ,repoName ,url ,event string , branchFilter ... string ) {
6060token := getTokenForLoggedInUser (t ,session ,auth_model .AccessTokenScopeAll )
61+ var branchFilterString string
62+ if len (branchFilter )> 0 {
63+ branchFilterString = branchFilter [0 ]
64+ }
6165req := NewRequestWithJSON (t ,"POST" ,"/api/v1/repos/" + userName + "/" + repoName + "/hooks" , api.CreateHookOption {
6266Type :"gitea" ,
6367Config : api.CreateHookOptionConfig {
6468"content_type" :"json" ,
6569"url" :url ,
6670},
67- Events : []string {event },
68- Active :true ,
71+ Events : []string {event },
72+ Active :true ,
73+ BranchFilter :branchFilterString ,
6974}).AddTokenAuth (token )
7075MakeRequest (t ,req ,http .StatusCreated )
7176}
@@ -371,6 +376,45 @@ func Test_WebhookPush(t *testing.T) {
371376})
372377}
373378
379+ 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+
392+ onGiteaRun (t ,func (t * testing.T ,giteaURL * url.URL ) {
393+ // 1. create a new webhook with special webhook for repo1
394+ session := loginUser (t ,"user2" )
395+
396+ // only for dev branch
397+ testAPICreateWebhookForRepo (t ,session ,"user2" ,"repo1" ,provider .URL (),"push" ,"develop" )
398+
399+ // 2. this should not trigger the webhook
400+ testCreateFile (t ,session ,"user2" ,"repo1" ,"master" ,"test_webhook_push.md" ,"# a test file for webhook push" )
401+ assert .Empty (t ,triggeredEvent )
402+ assert .Empty (t ,payloads )
403+
404+ // 3. trigger the webhook
405+ testCreateFile (t ,session ,"user2" ,"repo1" ,"develop" ,"test_webhook_push.md" ,"# a test file for webhook push" )
406+
407+ // 4. validate the webhook is triggered
408+ assert .Equal (t ,"push" ,triggeredEvent )
409+ assert .Len (t ,payloads ,1 )
410+ assert .Equal (t ,"repo1" ,payloads [0 ].Repo .Name )
411+ assert .Equal (t ,"develop" ,payloads [0 ].Branch ())
412+ assert .Equal (t ,"user2/repo1" ,payloads [0 ].Repo .FullName )
413+ assert .Len (t ,payloads [0 ].Commits ,1 )
414+ assert .Equal (t , []string {"test_webhook_push.md" },payloads [0 ].Commits [0 ].Added )
415+ })
416+ }
417+
374418func Test_WebhookIssue (t * testing.T ) {
375419var payloads []api.IssuePayload
376420var triggeredEvent string