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