@@ -404,6 +404,78 @@ func Test_WebhookIssue(t *testing.T) {
404404 })
405405}
406406
407+ func Test_WebhookIssueMilestone (t * testing.T ) {
408+ var payloads []api.IssuePayload
409+ var triggeredEvent string
410+ provider := newMockWebhookProvider (func (r * http.Request ) {
411+ content , _ := io .ReadAll (r .Body )
412+ var payload api.IssuePayload
413+ err := json .Unmarshal (content , & payload )
414+ assert .NoError (t , err )
415+ payloads = append (payloads , payload )
416+ triggeredEvent = "issues"
417+ }, http .StatusOK )
418+ defer provider .Close ()
419+
420+ onGiteaRun (t , func (t * testing.T , giteaURL * url.URL ) {
421+ // create a new webhook with special webhook for repo1
422+ session := loginUser (t , "user2" )
423+ repo1 := unittest .AssertExistsAndLoadBean (t , & repo.Repository {ID : 1 })
424+ testAPICreateWebhookForRepo (t , session , "user2" , "repo1" , provider .URL (), "issue_milestone" )
425+
426+ t .Run ("assign a milestone" , func (t * testing.T ) {
427+ // trigger the webhook
428+ testIssueChangeMilestone (t , session , repo1 .Link (), 1 , 1 )
429+
430+ // validate the webhook is triggered
431+ assert .Equal (t , "issues" , triggeredEvent )
432+ assert .Len (t , payloads , 1 )
433+ assert .Equal (t , "milestoned" , string (payloads [0 ].Action ))
434+ assert .Equal (t , "repo1" , payloads [0 ].Issue .Repo .Name )
435+ assert .Equal (t , "user2/repo1" , payloads [0 ].Issue .Repo .FullName )
436+ assert .Equal (t , "issue1" , payloads [0 ].Issue .Title )
437+ assert .Equal (t , "content for the first issue" , payloads [0 ].Issue .Body )
438+ assert .EqualValues (t , 1 , payloads [0 ].Issue .Milestone .ID )
439+ })
440+
441+ t .Run ("change a milestong" , func (t * testing.T ) {
442+ // trigger the webhook again
443+ triggeredEvent = ""
444+ payloads = make ([]api.IssuePayload , 0 , 1 )
445+ // change milestone to 2
446+ testIssueChangeMilestone (t , session , repo1 .Link (), 1 , 2 )
447+
448+ // validate the webhook is triggered
449+ assert .Equal (t , "issues" , triggeredEvent )
450+ assert .Len (t , payloads , 1 )
451+ assert .Equal (t , "milestoned" , string (payloads [0 ].Action ))
452+ assert .Equal (t , "repo1" , payloads [0 ].Issue .Repo .Name )
453+ assert .Equal (t , "user2/repo1" , payloads [0 ].Issue .Repo .FullName )
454+ assert .Equal (t , "issue1" , payloads [0 ].Issue .Title )
455+ assert .Equal (t , "content for the first issue" , payloads [0 ].Issue .Body )
456+ assert .EqualValues (t , 2 , payloads [0 ].Issue .Milestone .ID )
457+ })
458+
459+ t .Run ("remove a milestone" , func (t * testing.T ) {
460+ // trigger the webhook again
461+ triggeredEvent = ""
462+ payloads = make ([]api.IssuePayload , 0 , 1 )
463+ // change milestone to 0
464+ testIssueChangeMilestone (t , session , repo1 .Link (), 1 , 0 )
465+
466+ // validate the webhook is triggered
467+ assert .Equal (t , "issues" , triggeredEvent )
468+ assert .Len (t , payloads , 1 )
469+ assert .Equal (t , "demilestoned" , string (payloads [0 ].Action ))
470+ assert .Equal (t , "repo1" , payloads [0 ].Issue .Repo .Name )
471+ assert .Equal (t , "user2/repo1" , payloads [0 ].Issue .Repo .FullName )
472+ assert .Equal (t , "issue1" , payloads [0 ].Issue .Title )
473+ assert .Equal (t , "content for the first issue" , payloads [0 ].Issue .Body )
474+ assert .Nil (t , payloads [0 ].Issue .Milestone )
475+ })
476+ })
477+ }
478+
407479func Test_WebhookPullRequest (t * testing.T ) {
408480 var payloads []api.PullRequestPayload
409481 var triggeredEvent string
0 commit comments