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