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