Skip to content

Commit 9fbdc8f

Browse files
authored
Merge branch 'main' into lunny/add_webhook_test_push_dev_branch
2 parents f56341c + 34281bc commit 9fbdc8f

File tree

5 files changed

+105
-0
lines changed

5 files changed

+105
-0
lines changed

routers/api/v1/repo/issue.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -895,6 +895,15 @@ func EditIssue(ctx *context.APIContext) {
895895
issue.MilestoneID != *form.Milestone {
896896
oldMilestoneID := issue.MilestoneID
897897
issue.MilestoneID = *form.Milestone
898+
if issue.MilestoneID > 0 {
899+
issue.Milestone, err = issues_model.GetMilestoneByRepoID(ctx, ctx.Repo.Repository.ID, *form.Milestone)
900+
if err != nil {
901+
ctx.APIErrorInternal(err)
902+
return
903+
}
904+
} else {
905+
issue.Milestone = nil
906+
}
898907
if err = issue_service.ChangeMilestoneAssign(ctx, issue, ctx.Doer, oldMilestoneID); err != nil {
899908
ctx.APIErrorInternal(err)
900909
return

routers/api/v1/repo/pull.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -706,6 +706,11 @@ func EditPullRequest(ctx *context.APIContext) {
706706
issue.MilestoneID != form.Milestone {
707707
oldMilestoneID := issue.MilestoneID
708708
issue.MilestoneID = form.Milestone
709+
issue.Milestone, err = issues_model.GetMilestoneByRepoID(ctx, ctx.Repo.Repository.ID, form.Milestone)
710+
if err != nil {
711+
ctx.APIErrorInternal(err)
712+
return
713+
}
709714
if err = issue_service.ChangeMilestoneAssign(ctx, issue, ctx.Doer, oldMilestoneID); err != nil {
710715
ctx.APIErrorInternal(err)
711716
return

routers/web/repo/issue.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,16 @@ func UpdateIssueMilestone(ctx *context.Context) {
418418
continue
419419
}
420420
issue.MilestoneID = milestoneID
421+
if milestoneID > 0 {
422+
var err error
423+
issue.Milestone, err = issues_model.GetMilestoneByRepoID(ctx, ctx.Repo.Repository.ID, milestoneID)
424+
if err != nil {
425+
ctx.ServerError("GetMilestoneByRepoID", err)
426+
return
427+
}
428+
} else {
429+
issue.Milestone = nil
430+
}
421431
if err := issue_service.ChangeMilestoneAssign(ctx, issue, ctx.Doer, oldMilestoneID); err != nil {
422432
ctx.ServerError("ChangeMilestoneAssign", err)
423433
return

tests/integration/issue_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,15 @@ func testIssueAddComment(t *testing.T, session *TestSession, issueURL, content,
184184
return int64(id)
185185
}
186186

187+
func testIssueChangeMilestone(t *testing.T, session *TestSession, repoLink string, issueID, milestoneID int64) {
188+
req := NewRequestWithValues(t, "POST", fmt.Sprintf(repoLink+"/issues/milestone?issue_ids=%d", issueID), map[string]string{
189+
"_csrf": GetUserCSRFToken(t, session),
190+
"id": strconv.FormatInt(milestoneID, 10),
191+
})
192+
resp := session.MakeRequest(t, req, http.StatusOK)
193+
assert.Equal(t, `{"ok":true}`, strings.TrimSpace(resp.Body.String()))
194+
}
195+
187196
func TestNewIssue(t *testing.T) {
188197
defer tests.PrepareTestEnv(t)()
189198
session := loginUser(t, "user2")

tests/integration/repo_webhook_test.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,78 @@ func Test_WebhookIssue(t *testing.T) {
448448
})
449449
}
450450

451+
func Test_WebhookIssueMilestone(t *testing.T) {
452+
var payloads []api.IssuePayload
453+
var triggeredEvent string
454+
provider := newMockWebhookProvider(func(r *http.Request) {
455+
content, _ := io.ReadAll(r.Body)
456+
var payload api.IssuePayload
457+
err := json.Unmarshal(content, &payload)
458+
assert.NoError(t, err)
459+
payloads = append(payloads, payload)
460+
triggeredEvent = "issues"
461+
}, http.StatusOK)
462+
defer provider.Close()
463+
464+
onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
465+
// create a new webhook with special webhook for repo1
466+
session := loginUser(t, "user2")
467+
repo1 := unittest.AssertExistsAndLoadBean(t, &repo.Repository{ID: 1})
468+
testAPICreateWebhookForRepo(t, session, "user2", "repo1", provider.URL(), "issue_milestone")
469+
470+
t.Run("assign a milestone", func(t *testing.T) {
471+
// trigger the webhook
472+
testIssueChangeMilestone(t, session, repo1.Link(), 1, 1)
473+
474+
// validate the webhook is triggered
475+
assert.Equal(t, "issues", triggeredEvent)
476+
assert.Len(t, payloads, 1)
477+
assert.Equal(t, "milestoned", string(payloads[0].Action))
478+
assert.Equal(t, "repo1", payloads[0].Issue.Repo.Name)
479+
assert.Equal(t, "user2/repo1", payloads[0].Issue.Repo.FullName)
480+
assert.Equal(t, "issue1", payloads[0].Issue.Title)
481+
assert.Equal(t, "content for the first issue", payloads[0].Issue.Body)
482+
assert.EqualValues(t, 1, payloads[0].Issue.Milestone.ID)
483+
})
484+
485+
t.Run("change a milestong", func(t *testing.T) {
486+
// trigger the webhook again
487+
triggeredEvent = ""
488+
payloads = make([]api.IssuePayload, 0, 1)
489+
// change milestone to 2
490+
testIssueChangeMilestone(t, session, repo1.Link(), 1, 2)
491+
492+
// validate the webhook is triggered
493+
assert.Equal(t, "issues", triggeredEvent)
494+
assert.Len(t, payloads, 1)
495+
assert.Equal(t, "milestoned", string(payloads[0].Action))
496+
assert.Equal(t, "repo1", payloads[0].Issue.Repo.Name)
497+
assert.Equal(t, "user2/repo1", payloads[0].Issue.Repo.FullName)
498+
assert.Equal(t, "issue1", payloads[0].Issue.Title)
499+
assert.Equal(t, "content for the first issue", payloads[0].Issue.Body)
500+
assert.EqualValues(t, 2, payloads[0].Issue.Milestone.ID)
501+
})
502+
503+
t.Run("remove a milestone", func(t *testing.T) {
504+
// trigger the webhook again
505+
triggeredEvent = ""
506+
payloads = make([]api.IssuePayload, 0, 1)
507+
// change milestone to 0
508+
testIssueChangeMilestone(t, session, repo1.Link(), 1, 0)
509+
510+
// validate the webhook is triggered
511+
assert.Equal(t, "issues", triggeredEvent)
512+
assert.Len(t, payloads, 1)
513+
assert.Equal(t, "demilestoned", string(payloads[0].Action))
514+
assert.Equal(t, "repo1", payloads[0].Issue.Repo.Name)
515+
assert.Equal(t, "user2/repo1", payloads[0].Issue.Repo.FullName)
516+
assert.Equal(t, "issue1", payloads[0].Issue.Title)
517+
assert.Equal(t, "content for the first issue", payloads[0].Issue.Body)
518+
assert.Nil(t, payloads[0].Issue.Milestone)
519+
})
520+
})
521+
}
522+
451523
func Test_WebhookPullRequest(t *testing.T) {
452524
var payloads []api.PullRequestPayload
453525
var triggeredEvent string

0 commit comments

Comments
 (0)