@@ -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