X Tutup
Skip to content

Commit a612f06

Browse files
committed
fix pr review requests for teams
1 parent 55b183f commit a612f06

File tree

3 files changed

+105
-5
lines changed

3 files changed

+105
-5
lines changed

api/queries_pr.go

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,17 +151,27 @@ type PullRequestFile struct {
151151
type ReviewRequests struct {
152152
Nodes []struct {
153153
RequestedReviewer struct {
154-
TypeName string `json:"__typename"`
155-
Login string `json:"login"`
156-
Name string `json:"name"`
154+
TypeName string `json:"__typename"`
155+
Login string `json:"login"`
156+
Name string `json:"name"`
157+
Slug string `json:"slug"`
158+
Organization struct {
159+
Login string `json:"login"`
160+
}
157161
}
158162
}
159163
}
160164

165+
const teamTypeName = "Team"
166+
161167
func (r ReviewRequests) Logins() []string {
162168
logins := make([]string, len(r.Nodes))
163169
for i, a := range r.Nodes {
164-
logins[i] = a.RequestedReviewer.Login
170+
if a.RequestedReviewer.TypeName == teamTypeName {
171+
logins[i] = a.RequestedReviewer.Organization.Login + "/" + a.RequestedReviewer.Slug
172+
} else {
173+
logins[i] = a.RequestedReviewer.Login
174+
}
165175
}
166176
return logins
167177
}

api/queries_pr_test.go

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package api
22

33
import (
4+
"encoding/json"
45
"reflect"
56
"testing"
67

@@ -158,3 +159,88 @@ func Test_determinePullRequestFeatures(t *testing.T) {
158159
})
159160
}
160161
}
162+
163+
func Test_Logins(t *testing.T) {
164+
rr := ReviewRequests{}
165+
var tests = []struct {
166+
name string
167+
requestedReviews string
168+
want []string
169+
}{
170+
{
171+
name: "no requested reviewers",
172+
requestedReviews: `{"nodes": []}`,
173+
want: []string{},
174+
},
175+
{
176+
name: "user",
177+
requestedReviews: `{"nodes": [
178+
{
179+
"requestedreviewer": {
180+
"__typename": "User", "login": "testuser"
181+
}
182+
}
183+
]}`,
184+
want: []string{"testuser"},
185+
},
186+
{
187+
name: "team",
188+
requestedReviews: `{"nodes": [
189+
{
190+
"requestedreviewer": {
191+
"__typename": "Team",
192+
"name": "Test Team",
193+
"slug": "test-team",
194+
"organization": {"login": "myorg"}
195+
}
196+
}
197+
]}`,
198+
want: []string{"myorg/test-team"},
199+
},
200+
{
201+
name: "multiple users and teams",
202+
requestedReviews: `{"nodes": [
203+
{
204+
"requestedreviewer": {
205+
"__typename": "User", "login": "user1"
206+
}
207+
},
208+
{
209+
"requestedreviewer": {
210+
"__typename": "User", "login": "user2"
211+
}
212+
},
213+
{
214+
"requestedreviewer": {
215+
"__typename": "Team",
216+
"name": "Test Team",
217+
"slug": "test-team",
218+
"organization": {"login": "myorg"}
219+
}
220+
},
221+
{
222+
"requestedreviewer": {
223+
"__typename": "Team",
224+
"name": "Dev Team",
225+
"slug": "dev-team",
226+
"organization": {"login": "myorg"}
227+
}
228+
}
229+
]}`,
230+
want: []string{"user1", "user2", "myorg/test-team", "myorg/dev-team"},
231+
},
232+
}
233+
234+
for _, tt := range tests {
235+
t.Run(tt.name, func(t *testing.T) {
236+
err := json.Unmarshal([]byte(tt.requestedReviews), &rr)
237+
if err != nil {
238+
t.Fatalf("Failed to unmarshal json string as ReviewRequests: %v", tt.requestedReviews)
239+
}
240+
got := rr.Logins()
241+
if !reflect.DeepEqual(got, tt.want) {
242+
t.Fatalf("Unexpected results: expected %v but got %v", tt.want, got)
243+
}
244+
})
245+
}
246+
}

api/query_builder.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,11 @@ var prReviewRequests = shortenQuery(`
4141
requestedReviewer {
4242
__typename,
4343
...on User{login},
44-
...on Team{name}
44+
...on Team{
45+
organization{login}
46+
name,
47+
slug
48+
}
4549
}
4650
}
4751
}

0 commit comments

Comments
 (0)
X Tutup