@@ -404,6 +404,78 @@ func Test_WebhookIssue(t *testing.T) {
404
404
})
405
405
}
406
406
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
+
407
479
func Test_WebhookPullRequest (t * testing.T ) {
408
480
var payloads []api.PullRequestPayload
409
481
var triggeredEvent string
0 commit comments