Skip to content

Commit b51bd7f

Browse files
Refactor webhook payload convertion (#12310)
* Refactor webhook payload convertion * Fix lint Co-authored-by: techknowlogick <[email protected]>
1 parent e1535c7 commit b51bd7f

12 files changed

+397
-454
lines changed

modules/webhook/dingtalk.go

+29-45
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,24 @@ type (
2121
DingtalkPayload dingtalk.Payload
2222
)
2323

24+
var (
25+
_ PayloadConvertor = &DingtalkPayload{}
26+
)
27+
2428
// SetSecret sets the dingtalk secret
25-
func (p *DingtalkPayload) SetSecret(_ string) {}
29+
func (d *DingtalkPayload) SetSecret(_ string) {}
2630

2731
// JSONPayload Marshals the DingtalkPayload to json
28-
func (p *DingtalkPayload) JSONPayload() ([]byte, error) {
29-
data, err := json.MarshalIndent(p, "", " ")
32+
func (d *DingtalkPayload) JSONPayload() ([]byte, error) {
33+
data, err := json.MarshalIndent(d, "", " ")
3034
if err != nil {
3135
return []byte{}, err
3236
}
3337
return data, nil
3438
}
3539

36-
func getDingtalkCreatePayload(p *api.CreatePayload) (*DingtalkPayload, error) {
40+
// Create implements PayloadConvertor Create method
41+
func (d *DingtalkPayload) Create(p *api.CreatePayload) (api.Payloader, error) {
3742
// created tag/branch
3843
refName := git.RefEndName(p.Ref)
3944
title := fmt.Sprintf("[%s] %s %s created", p.Repo.FullName, p.RefType, refName)
@@ -50,7 +55,8 @@ func getDingtalkCreatePayload(p *api.CreatePayload) (*DingtalkPayload, error) {
5055
}, nil
5156
}
5257

53-
func getDingtalkDeletePayload(p *api.DeletePayload) (*DingtalkPayload, error) {
58+
// Delete implements PayloadConvertor Delete method
59+
func (d *DingtalkPayload) Delete(p *api.DeletePayload) (api.Payloader, error) {
5460
// created tag/branch
5561
refName := git.RefEndName(p.Ref)
5662
title := fmt.Sprintf("[%s] %s %s deleted", p.Repo.FullName, p.RefType, refName)
@@ -67,7 +73,8 @@ func getDingtalkDeletePayload(p *api.DeletePayload) (*DingtalkPayload, error) {
6773
}, nil
6874
}
6975

70-
func getDingtalkForkPayload(p *api.ForkPayload) (*DingtalkPayload, error) {
76+
// Fork implements PayloadConvertor Fork method
77+
func (d *DingtalkPayload) Fork(p *api.ForkPayload) (api.Payloader, error) {
7178
title := fmt.Sprintf("%s is forked to %s", p.Forkee.FullName, p.Repo.FullName)
7279

7380
return &DingtalkPayload{
@@ -82,7 +89,8 @@ func getDingtalkForkPayload(p *api.ForkPayload) (*DingtalkPayload, error) {
8289
}, nil
8390
}
8491

85-
func getDingtalkPushPayload(p *api.PushPayload) (*DingtalkPayload, error) {
92+
// Push implements PayloadConvertor Push method
93+
func (d *DingtalkPayload) Push(p *api.PushPayload) (api.Payloader, error) {
8694
var (
8795
branchName = git.RefEndName(p.Ref)
8896
commitDesc string
@@ -131,7 +139,8 @@ func getDingtalkPushPayload(p *api.PushPayload) (*DingtalkPayload, error) {
131139
}, nil
132140
}
133141

134-
func getDingtalkIssuesPayload(p *api.IssuePayload) (*DingtalkPayload, error) {
142+
// Issue implements PayloadConvertor Issue method
143+
func (d *DingtalkPayload) Issue(p *api.IssuePayload) (api.Payloader, error) {
135144
text, issueTitle, attachmentText, _ := getIssuesPayloadInfo(p, noneLinkFormatter, true)
136145

137146
return &DingtalkPayload{
@@ -147,7 +156,8 @@ func getDingtalkIssuesPayload(p *api.IssuePayload) (*DingtalkPayload, error) {
147156
}, nil
148157
}
149158

150-
func getDingtalkIssueCommentPayload(p *api.IssueCommentPayload) (*DingtalkPayload, error) {
159+
// IssueComment implements PayloadConvertor IssueComment method
160+
func (d *DingtalkPayload) IssueComment(p *api.IssueCommentPayload) (api.Payloader, error) {
151161
text, issueTitle, _ := getIssueCommentPayloadInfo(p, noneLinkFormatter, true)
152162

153163
return &DingtalkPayload{
@@ -162,7 +172,8 @@ func getDingtalkIssueCommentPayload(p *api.IssueCommentPayload) (*DingtalkPayloa
162172
}, nil
163173
}
164174

165-
func getDingtalkPullRequestPayload(p *api.PullRequestPayload) (*DingtalkPayload, error) {
175+
// PullRequest implements PayloadConvertor PullRequest method
176+
func (d *DingtalkPayload) PullRequest(p *api.PullRequestPayload) (api.Payloader, error) {
166177
text, issueTitle, attachmentText, _ := getPullRequestPayloadInfo(p, noneLinkFormatter, true)
167178

168179
return &DingtalkPayload{
@@ -178,7 +189,8 @@ func getDingtalkPullRequestPayload(p *api.PullRequestPayload) (*DingtalkPayload,
178189
}, nil
179190
}
180191

181-
func getDingtalkPullRequestApprovalPayload(p *api.PullRequestPayload, event models.HookEventType) (*DingtalkPayload, error) {
192+
// Review implements PayloadConvertor Review method
193+
func (d *DingtalkPayload) Review(p *api.PullRequestPayload, event models.HookEventType) (api.Payloader, error) {
182194
var text, title string
183195
switch p.Action {
184196
case api.HookIssueReviewed:
@@ -204,7 +216,8 @@ func getDingtalkPullRequestApprovalPayload(p *api.PullRequestPayload, event mode
204216
}, nil
205217
}
206218

207-
func getDingtalkRepositoryPayload(p *api.RepositoryPayload) (*DingtalkPayload, error) {
219+
// Repository implements PayloadConvertor Repository method
220+
func (d *DingtalkPayload) Repository(p *api.RepositoryPayload) (api.Payloader, error) {
208221
var title, url string
209222
switch p.Action {
210223
case api.HookRepoCreated:
@@ -235,7 +248,8 @@ func getDingtalkRepositoryPayload(p *api.RepositoryPayload) (*DingtalkPayload, e
235248
return nil, nil
236249
}
237250

238-
func getDingtalkReleasePayload(p *api.ReleasePayload) (*DingtalkPayload, error) {
251+
// Release implements PayloadConvertor Release method
252+
func (d *DingtalkPayload) Release(p *api.ReleasePayload) (api.Payloader, error) {
239253
text, _ := getReleasePayloadInfo(p, noneLinkFormatter, true)
240254

241255
return &DingtalkPayload{
@@ -251,36 +265,6 @@ func getDingtalkReleasePayload(p *api.ReleasePayload) (*DingtalkPayload, error)
251265
}
252266

253267
// GetDingtalkPayload converts a ding talk webhook into a DingtalkPayload
254-
func GetDingtalkPayload(p api.Payloader, event models.HookEventType, meta string) (*DingtalkPayload, error) {
255-
s := new(DingtalkPayload)
256-
257-
switch event {
258-
case models.HookEventCreate:
259-
return getDingtalkCreatePayload(p.(*api.CreatePayload))
260-
case models.HookEventDelete:
261-
return getDingtalkDeletePayload(p.(*api.DeletePayload))
262-
case models.HookEventFork:
263-
return getDingtalkForkPayload(p.(*api.ForkPayload))
264-
case models.HookEventIssues, models.HookEventIssueAssign, models.HookEventIssueLabel, models.HookEventIssueMilestone:
265-
return getDingtalkIssuesPayload(p.(*api.IssuePayload))
266-
case models.HookEventIssueComment, models.HookEventPullRequestComment:
267-
pl, ok := p.(*api.IssueCommentPayload)
268-
if ok {
269-
return getDingtalkIssueCommentPayload(pl)
270-
}
271-
return getDingtalkPullRequestPayload(p.(*api.PullRequestPayload))
272-
case models.HookEventPush:
273-
return getDingtalkPushPayload(p.(*api.PushPayload))
274-
case models.HookEventPullRequest, models.HookEventPullRequestAssign, models.HookEventPullRequestLabel,
275-
models.HookEventPullRequestMilestone, models.HookEventPullRequestSync:
276-
return getDingtalkPullRequestPayload(p.(*api.PullRequestPayload))
277-
case models.HookEventPullRequestReviewApproved, models.HookEventPullRequestReviewRejected, models.HookEventPullRequestReviewComment:
278-
return getDingtalkPullRequestApprovalPayload(p.(*api.PullRequestPayload), event)
279-
case models.HookEventRepository:
280-
return getDingtalkRepositoryPayload(p.(*api.RepositoryPayload))
281-
case models.HookEventRelease:
282-
return getDingtalkReleasePayload(p.(*api.ReleasePayload))
283-
}
284-
285-
return s, nil
268+
func GetDingtalkPayload(p api.Payloader, event models.HookEventType, meta string) (api.Payloader, error) {
269+
return convertPayloader(new(DingtalkPayload), p, event)
286270
}

modules/webhook/dingtalk_test.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,18 @@ import (
1414

1515
func TestGetDingTalkIssuesPayload(t *testing.T) {
1616
p := issueTestPayload()
17-
17+
d := new(DingtalkPayload)
1818
p.Action = api.HookIssueOpened
19-
pl, err := getDingtalkIssuesPayload(p)
19+
pl, err := d.Issue(p)
2020
require.NoError(t, err)
2121
require.NotNil(t, pl)
22-
assert.Equal(t, "#2 crash", pl.ActionCard.Title)
23-
assert.Equal(t, "[test/repo] Issue opened: #2 crash by user1\r\n\r\n", pl.ActionCard.Text)
22+
assert.Equal(t, "#2 crash", pl.(*DingtalkPayload).ActionCard.Title)
23+
assert.Equal(t, "[test/repo] Issue opened: #2 crash by user1\r\n\r\n", pl.(*DingtalkPayload).ActionCard.Text)
2424

2525
p.Action = api.HookIssueClosed
26-
pl, err = getDingtalkIssuesPayload(p)
26+
pl, err = d.Issue(p)
2727
require.NoError(t, err)
2828
require.NotNil(t, pl)
29-
assert.Equal(t, "#2 crash", pl.ActionCard.Title)
30-
assert.Equal(t, "[test/repo] Issue closed: #2 crash by user1\r\n\r\n", pl.ActionCard.Text)
29+
assert.Equal(t, "#2 crash", pl.(*DingtalkPayload).ActionCard.Title)
30+
assert.Equal(t, "[test/repo] Issue closed: #2 crash by user1\r\n\r\n", pl.(*DingtalkPayload).ActionCard.Text)
3131
}

0 commit comments

Comments
 (0)