fix pr review requests for teams

This commit is contained in:
mercimat 2021-05-24 17:00:25 +02:00
parent 55b183f3c9
commit a612f06dee
3 changed files with 105 additions and 5 deletions

View file

@ -151,17 +151,27 @@ type PullRequestFile struct {
type ReviewRequests struct {
Nodes []struct {
RequestedReviewer struct {
TypeName string `json:"__typename"`
Login string `json:"login"`
Name string `json:"name"`
TypeName string `json:"__typename"`
Login string `json:"login"`
Name string `json:"name"`
Slug string `json:"slug"`
Organization struct {
Login string `json:"login"`
}
}
}
}
const teamTypeName = "Team"
func (r ReviewRequests) Logins() []string {
logins := make([]string, len(r.Nodes))
for i, a := range r.Nodes {
logins[i] = a.RequestedReviewer.Login
if a.RequestedReviewer.TypeName == teamTypeName {
logins[i] = a.RequestedReviewer.Organization.Login + "/" + a.RequestedReviewer.Slug
} else {
logins[i] = a.RequestedReviewer.Login
}
}
return logins
}

View file

@ -1,6 +1,7 @@
package api
import (
"encoding/json"
"reflect"
"testing"
@ -158,3 +159,88 @@ func Test_determinePullRequestFeatures(t *testing.T) {
})
}
}
func Test_Logins(t *testing.T) {
rr := ReviewRequests{}
var tests = []struct {
name string
requestedReviews string
want []string
}{
{
name: "no requested reviewers",
requestedReviews: `{"nodes": []}`,
want: []string{},
},
{
name: "user",
requestedReviews: `{"nodes": [
{
"requestedreviewer": {
"__typename": "User", "login": "testuser"
}
}
]}`,
want: []string{"testuser"},
},
{
name: "team",
requestedReviews: `{"nodes": [
{
"requestedreviewer": {
"__typename": "Team",
"name": "Test Team",
"slug": "test-team",
"organization": {"login": "myorg"}
}
}
]}`,
want: []string{"myorg/test-team"},
},
{
name: "multiple users and teams",
requestedReviews: `{"nodes": [
{
"requestedreviewer": {
"__typename": "User", "login": "user1"
}
},
{
"requestedreviewer": {
"__typename": "User", "login": "user2"
}
},
{
"requestedreviewer": {
"__typename": "Team",
"name": "Test Team",
"slug": "test-team",
"organization": {"login": "myorg"}
}
},
{
"requestedreviewer": {
"__typename": "Team",
"name": "Dev Team",
"slug": "dev-team",
"organization": {"login": "myorg"}
}
}
]}`,
want: []string{"user1", "user2", "myorg/test-team", "myorg/dev-team"},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := json.Unmarshal([]byte(tt.requestedReviews), &rr)
if err != nil {
t.Fatalf("Failed to unmarshal json string as ReviewRequests: %v", tt.requestedReviews)
}
got := rr.Logins()
if !reflect.DeepEqual(got, tt.want) {
t.Fatalf("Unexpected results: expected %v but got %v", tt.want, got)
}
})
}
}

View file

@ -41,7 +41,11 @@ var prReviewRequests = shortenQuery(`
requestedReviewer {
__typename,
...on User{login},
...on Team{name}
...on Team{
organization{login}
name,
slug
}
}
}
}