@@ -355,6 +355,78 @@ func Test_WebhookIssue(t *testing.T) {
355355 })
356356}
357357
358+ func Test_WebhookIssueMilestone (t * testing.T ) {
359+ var payloads []api.IssuePayload
360+ var triggeredEvent string
361+ provider := newMockWebhookProvider (func (r * http.Request ) {
362+ content , _ := io .ReadAll (r .Body )
363+ var payload api.IssuePayload
364+ err := json .Unmarshal (content , & payload )
365+ assert .NoError (t , err )
366+ payloads = append (payloads , payload )
367+ triggeredEvent = "issues"
368+ }, http .StatusOK )
369+ defer provider .Close ()
370+
371+ onGiteaRun (t , func (t * testing.T , giteaURL * url.URL ) {
372+ // create a new webhook with special webhook for repo1
373+ session := loginUser (t , "user2" )
374+ repo1 := unittest .AssertExistsAndLoadBean (t , & repo.Repository {ID : 1 })
375+ testAPICreateWebhookForRepo (t , session , "user2" , "repo1" , provider .URL (), "issue_milestone" )
376+
377+ t .Run ("assign a milestone" , func (t * testing.T ) {
378+ // trigger the webhook
379+ testIssueChangeMilestone (t , session , repo1 .Link (), 1 , 1 )
380+
381+ // validate the webhook is triggered
382+ assert .Equal (t , "issues" , triggeredEvent )
383+ assert .Len (t , payloads , 1 )
384+ assert .Equal (t , "milestoned" , string (payloads [0 ].Action ))
385+ assert .Equal (t , "repo1" , payloads [0 ].Issue .Repo .Name )
386+ assert .Equal (t , "user2/repo1" , payloads [0 ].Issue .Repo .FullName )
387+ assert .Equal (t , "issue1" , payloads [0 ].Issue .Title )
388+ assert .Equal (t , "content for the first issue" , payloads [0 ].Issue .Body )
389+ assert .EqualValues (t , 1 , payloads [0 ].Issue .Milestone .ID )
390+ })
391+
392+ t .Run ("change a milestong" , func (t * testing.T ) {
393+ // trigger the webhook again
394+ triggeredEvent = ""
395+ payloads = make ([]api.IssuePayload , 0 , 1 )
396+ // change milestone to 2
397+ testIssueChangeMilestone (t , session , repo1 .Link (), 1 , 2 )
398+
399+ // validate the webhook is triggered
400+ assert .Equal (t , "issues" , triggeredEvent )
401+ assert .Len (t , payloads , 1 )
402+ assert .Equal (t , "milestoned" , string (payloads [0 ].Action ))
403+ assert .Equal (t , "repo1" , payloads [0 ].Issue .Repo .Name )
404+ assert .Equal (t , "user2/repo1" , payloads [0 ].Issue .Repo .FullName )
405+ assert .Equal (t , "issue1" , payloads [0 ].Issue .Title )
406+ assert .Equal (t , "content for the first issue" , payloads [0 ].Issue .Body )
407+ assert .EqualValues (t , 2 , payloads [0 ].Issue .Milestone .ID )
408+ })
409+
410+ t .Run ("remove a milestone" , func (t * testing.T ) {
411+ // trigger the webhook again
412+ triggeredEvent = ""
413+ payloads = make ([]api.IssuePayload , 0 , 1 )
414+ // change milestone to 0
415+ testIssueChangeMilestone (t , session , repo1 .Link (), 1 , 0 )
416+
417+ // validate the webhook is triggered
418+ assert .Equal (t , "issues" , triggeredEvent )
419+ assert .Len (t , payloads , 1 )
420+ assert .Equal (t , "demilestoned" , string (payloads [0 ].Action ))
421+ assert .Equal (t , "repo1" , payloads [0 ].Issue .Repo .Name )
422+ assert .Equal (t , "user2/repo1" , payloads [0 ].Issue .Repo .FullName )
423+ assert .Equal (t , "issue1" , payloads [0 ].Issue .Title )
424+ assert .Equal (t , "content for the first issue" , payloads [0 ].Issue .Body )
425+ assert .Nil (t , payloads [0 ].Issue .Milestone )
426+ })
427+ })
428+ }
429+
358430func Test_WebhookPullRequest (t * testing.T ) {
359431 var payloads []api.PullRequestPayload
360432 var triggeredEvent string
0 commit comments