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