@@ -18,8 +18,10 @@ import (
18
18
user_model "code.gitea.io/gitea/models/user"
19
19
"code.gitea.io/gitea/models/webhook"
20
20
"code.gitea.io/gitea/modules/commitstatus"
21
+ "code.gitea.io/gitea/modules/git"
21
22
"code.gitea.io/gitea/modules/gitrepo"
22
23
"code.gitea.io/gitea/modules/json"
24
+ "code.gitea.io/gitea/modules/setting"
23
25
api "code.gitea.io/gitea/modules/structs"
24
26
webhook_module "code.gitea.io/gitea/modules/webhook"
25
27
"code.gitea.io/gitea/tests"
@@ -360,58 +362,98 @@ func Test_WebhookPush(t *testing.T) {
360
362
361
363
// 1. create a new webhook with special webhook for repo1
362
364
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" )
363
368
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 )
365
375
366
376
// 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 )
368
381
369
382
// 3. validate the webhook is triggered
370
383
assert .Equal (t , "push" , triggeredEvent )
371
384
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 )
372
388
assert .Equal (t , "repo1" , payloads [0 ].Repo .Name )
373
389
assert .Equal (t , "user2/repo1" , payloads [0 ].Repo .FullName )
374
390
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 )
375
393
assert .Equal (t , []string {"test_webhook_push.md" }, payloads [0 ].Commits [0 ].Added )
394
+ assert .Empty (t , payloads [0 ].Commits [0 ].Removed )
376
395
})
377
396
}
378
397
379
398
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
399
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
+
393
414
// 1. create a new webhook with special webhook for repo1
394
415
session := loginUser (t , "user2" )
395
416
417
+ gitRepo , err := gitrepo .OpenRepository (t .Context (), repo1 )
418
+ assert .NoError (t , err )
419
+ defer gitRepo .Close ()
420
+
396
421
// 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 " )
398
423
399
424
// 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" , "" )
401
426
assert .Empty (t , triggeredEvent )
402
427
assert .Empty (t , payloads )
403
428
429
+ _ , err = gitRepo .GetRefCommitID ("new_branch" )
430
+ assert .Error (t , err )
431
+
432
+ fromBranchCommitID , err := gitRepo .GetRefCommitID ("develop" )
433
+ assert .NoError (t , err )
434
+
404
435
// 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 ()
406
442
407
443
// 4. validate the webhook is triggered
408
444
assert .Equal (t , "push" , triggeredEvent )
409
445
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 )
410
449
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 ())
412
451
assert .Equal (t , "user2/repo1" , payloads [0 ].Repo .FullName )
413
452
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 )
414
455
assert .Equal (t , []string {"test_webhook_push.md" }, payloads [0 ].Commits [0 ].Added )
456
+ assert .Empty (t , payloads [0 ].Commits [0 ].Removed )
415
457
})
416
458
}
417
459
@@ -806,7 +848,7 @@ func Test_WebhookStatus_NoWrongTrigger(t *testing.T) {
806
848
testCreateWebhookForRepo (t , session , "gitea" , "user2" , "repo1" , provider .URL (), "push_only" )
807
849
808
850
// 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" , "" )
810
852
811
853
// 3. validate the webhook is triggered with right event
812
854
assert .Equal (t , "push" , trigger )
0 commit comments