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