@@ -2,8 +2,12 @@ package plugin
2
2
3
3
import (
4
4
"context"
5
+ "crypto/hmac"
6
+ "crypto/sha1" // #nosec G505
7
+ "encoding/hex"
5
8
"fmt"
6
9
"testing"
10
+ "time"
7
11
8
12
"github.com/golang/mock/gomock"
9
13
"github.com/google/go-github/v54/github"
@@ -15,24 +19,30 @@ import (
15
19
)
16
20
17
21
const (
18
- MockUserID = "mockUserID"
19
- MockUsername = "mockUsername"
20
- MockAccessToken = "mockAccessToken"
21
- MockChannelID = "mockChannelID"
22
- MockCreatorID = "mockCreatorID"
23
- MockBotID = "mockBotID"
24
- MockOrg = "mockOrg"
25
- MockSender = "mockSender"
26
- MockPostMessage = "mockPostMessage"
27
- MockOrgRepo = "mockOrg/mockRepo"
28
- MockHead = "mockHead"
29
- MockRepoName = "mockRepoName"
30
- MockEventReference = "refs/heads/main"
31
- MockUserLogin = "mockUser"
32
- MockBranch = "mockBranch"
33
- MockRepo = "mockRepo"
34
- MockIssueAuthor = "issueAuthor"
35
- GithubBaseURL = "https://github.com/"
22
+ MockUserID = "mockUserID"
23
+ MockUsername = "mockUsername"
24
+ MockAccessToken = "mockAccessToken"
25
+ MockChannelID = "mockChannelID"
26
+ MockCreatorID = "mockCreatorID"
27
+ MockWebhookSecret = "mockWebhookSecret" // #nosec G101
28
+ MockBotID = "mockBotID"
29
+ MockOrg = "mockOrg"
30
+ MockSender = "mockSender"
31
+ MockPostMessage = "mockPostMessage"
32
+ MockOrgRepo = "mockOrg/mockRepo"
33
+ MockHead = "mockHead"
34
+ MockPRTitle = "mockPRTitle"
35
+ MockProfileUsername = "@username"
36
+ MockPostID = "mockPostID"
37
+ MockRepoName = "mockRepoName"
38
+ MockEventReference = "refs/heads/main"
39
+ MockUserLogin = "mockUser"
40
+ MockBranch = "mockBranch"
41
+ MockRepo = "mockRepo"
42
+ MockLabel = "mockLabel"
43
+ MockValidLabel = "validLabel"
44
+ MockIssueAuthor = "issueAuthor"
45
+ GithubBaseURL = "https://github.com/"
36
46
)
37
47
38
48
type GitHubUserResponse struct {
@@ -93,6 +103,104 @@ func GetMockUserContext(p *Plugin, mockLogger *mocks.MockLogger) (*UserContext,
93
103
return mockUserContext , nil
94
104
}
95
105
106
+ func generateSignature (secret , body []byte ) string {
107
+ h := hmac .New (sha1 .New , secret )
108
+ h .Write (body )
109
+ return "sha1=" + hex .EncodeToString (h .Sum (nil ))
110
+ }
111
+
112
+ func GetMockPingEvent () * github.PingEvent {
113
+ return & github.PingEvent {
114
+ Zen : github .String ("Keep it logically awesome." ),
115
+ HookID : github .Int64 (123456 ),
116
+ Hook : & github.Hook {
117
+ Type : github .String ("Repository" ),
118
+ ID : github .Int64 (654321 ),
119
+ Config : map [string ]interface {}{
120
+ "url" : "https://example.com/webhook" ,
121
+ "content_type" : "json" ,
122
+ "secret" : "mocksecret" ,
123
+ "insecure_ssl" : "0" ,
124
+ },
125
+ Active : github .Bool (true ),
126
+ },
127
+ Repo : & github.Repository {
128
+ Name : github .String (MockRepoName ),
129
+ FullName : github .String (MockOrgRepo ),
130
+ Private : github .Bool (false ),
131
+ HTMLURL : github .String (fmt .Sprintf ("%s/%s" , GithubBaseURL , MockOrgRepo )),
132
+ },
133
+ Org : & github.Organization {
134
+ Login : github .String ("mockorg" ),
135
+ ID : github .Int64 (12345 ),
136
+ URL : github .String (fmt .Sprintf ("%s/mockorg" , GithubBaseURL )),
137
+ },
138
+ Sender : & github.User {
139
+ Login : github .String (MockUserLogin ),
140
+ ID : github .Int64 (98765 ),
141
+ URL : github .String (fmt .Sprintf ("%s/users/%s" , GithubBaseURL , MockUserLogin )),
142
+ },
143
+ Installation : & github.Installation {
144
+ ID : github .Int64 (246810 ),
145
+ NodeID : github .String ("MDQ6VXNlcjE=" ),
146
+ },
147
+ }
148
+ }
149
+
150
+ func GetMockPRDescriptionEvent (repo , org , sender , prUser , action , label string ) * github.PullRequestEvent {
151
+ return & github.PullRequestEvent {
152
+ Action : github .String (action ),
153
+ PullRequest : & github.PullRequest {
154
+ Title : github .String (MockPRTitle ),
155
+ Body : github .String ("Mock PR description with label: " + label ),
156
+ State : github .String ("open" ),
157
+ User : & github.User {Login : github .String (prUser )},
158
+ Head : & github.PullRequestBranch {Ref : github .String (MockBranch )},
159
+ Base : & github.PullRequestBranch {Ref : github .String ("main" )},
160
+ HTMLURL : github .String (GithubBaseURL + org + "/" + repo + "/pull/1" ),
161
+ Number : github .Int (1 ),
162
+ },
163
+ Repo : & github.Repository {
164
+ Name : github .String (repo ),
165
+ Owner : & github.User {Login : github .String (org )},
166
+ FullName : github .String (org + "/" + repo ),
167
+ },
168
+ Sender : & github.User {
169
+ Login : github .String (sender ),
170
+ },
171
+ }
172
+ }
173
+
174
+ func GetMockIssueEvent (repo , org , sender , action , label string ) * github.IssuesEvent {
175
+ event := & github.IssuesEvent {
176
+ Repo : & github.Repository {
177
+ Name : github .String (repo ),
178
+ Owner : & github.User {Login : github .String (org )},
179
+ FullName : github .String (fmt .Sprintf ("%s/%s" , repo , org )),
180
+ },
181
+ Sender : & github.User {Login : github .String (sender )},
182
+ Issue : & github.Issue {
183
+ Number : github .Int (123 ),
184
+ Labels : []* github.Label {
185
+ {Name : github .String (label )},
186
+ },
187
+ },
188
+ Action : github .String (action ),
189
+ }
190
+
191
+ if action == actionLabeled || action == "unlabeled" {
192
+ event .Label = & github.Label {Name : github .String (label )}
193
+ }
194
+
195
+ return event
196
+ }
197
+
198
+ func GetMockIssueEventWithTimeDiff (repo , org , sender , action , label string , timeDiff time.Duration ) * github.IssuesEvent {
199
+ event := GetMockIssueEvent (repo , org , sender , action , label )
200
+ event .Issue .CreatedAt = & github.Timestamp {Time : time .Now ().Add (timeDiff )}
201
+ return event
202
+ }
203
+
96
204
func GetMockPushEvent () * github.PushEvent {
97
205
return & github.PushEvent {
98
206
PushID : github .Int64 (1 ),
@@ -351,9 +459,10 @@ func GetMockIssueCommentEventWithAssignees(eventType, action, body, sender strin
351
459
}
352
460
}
353
461
354
- func GetMockPullRequestEvent (action , repoName string , isPrivate bool , sender , user , assignee string ) * github.PullRequestEvent {
462
+ func GetMockPullRequestEvent (action , repoName , eventLabel string , isPrivate bool , sender , user , assignee string ) * github.PullRequestEvent {
355
463
return & github.PullRequestEvent {
356
464
Action : github .String (action ),
465
+ Label : & github.Label {Name : github .String (eventLabel )},
357
466
Repo : & github.Repository {
358
467
Name : github .String (repoName ),
359
468
FullName : github .String (fmt .Sprintf ("mockOrg/%s" , repoName )),
@@ -364,6 +473,8 @@ func GetMockPullRequestEvent(action, repoName string, isPrivate bool, sender, us
364
473
HTMLURL : github .String (fmt .Sprintf ("%s%s/%s/pull/123" , GithubBaseURL , MockOrgRepo , repoName )),
365
474
Assignee : & github.User {Login : github .String (assignee )},
366
475
RequestedReviewers : []* github.User {{Login : github .String (user )}},
476
+ Labels : []* github.Label {{Name : github .String ("validLabel" )}},
477
+ Draft : github .Bool (true ),
367
478
},
368
479
Sender : & github.User {
369
480
Login : github .String (sender ),
0 commit comments