@@ -353,6 +353,78 @@ func Test_WebhookIssue(t *testing.T) {
353
353
})
354
354
}
355
355
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
+
356
428
func Test_WebhookPullRequest (t * testing.T ) {
357
429
var payloads []api.PullRequestPayload
358
430
var triggeredEvent string
0 commit comments