@@ -19,8 +19,10 @@ import (
19
19
user_model "code.gitea.io/gitea/models/user"
20
20
"code.gitea.io/gitea/models/webhook"
21
21
"code.gitea.io/gitea/modules/commitstatus"
22
+ "code.gitea.io/gitea/modules/git"
22
23
"code.gitea.io/gitea/modules/gitrepo"
23
24
"code.gitea.io/gitea/modules/json"
25
+ "code.gitea.io/gitea/modules/setting"
24
26
api "code.gitea.io/gitea/modules/structs"
25
27
webhook_module "code.gitea.io/gitea/modules/webhook"
26
28
"code.gitea.io/gitea/tests"
@@ -365,7 +367,7 @@ func Test_WebhookPush(t *testing.T) {
365
367
testAPICreateWebhookForRepo (t , session , "user2" , "repo1" , provider .URL (), "push" )
366
368
367
369
// 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" )
369
371
370
372
// 3. validate the webhook is triggered
371
373
assert .Equal (t , "push" , triggeredEvent )
@@ -398,21 +400,90 @@ func Test_WebhookPushDevBranch(t *testing.T) {
398
400
testAPICreateWebhookForRepo (t , session , "user2" , "repo1" , provider .URL (), "push" , "develop" )
399
401
400
402
// 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" )
402
404
assert .Empty (t , triggeredEvent )
403
405
assert .Empty (t , payloads )
404
406
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
+
405
415
// 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 )
407
420
408
421
// 4. validate the webhook is triggered
409
422
assert .Equal (t , "push" , triggeredEvent )
410
423
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 )
411
427
assert .Equal (t , "repo1" , payloads [0 ].Repo .Name )
412
428
assert .Equal (t , "develop" , payloads [0 ].Branch ())
413
429
assert .Equal (t , "user2/repo1" , payloads [0 ].Repo .FullName )
414
430
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 )
415
485
assert .Equal (t , []string {"test_webhook_push.md" }, payloads [0 ].Commits [0 ].Added )
486
+ assert .Empty (t , payloads [0 ].Commits [0 ].Removed )
416
487
})
417
488
}
418
489
@@ -878,7 +949,7 @@ func Test_WebhookStatus_NoWrongTrigger(t *testing.T) {
878
949
testCreateWebhookForRepo (t , session , "gitea" , "user2" , "repo1" , provider .URL (), "push_only" )
879
950
880
951
// 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" )
882
953
883
954
// 3. validate the webhook is triggered with right event
884
955
assert .Equal (t , "push" , trigger )
0 commit comments