@@ -27,23 +27,32 @@ func testGitHubProvider(hostname string) *GitHubProvider {
27
27
return p
28
28
}
29
29
30
- func testGitHubBackend (payload string ) * httptest.Server {
31
- pathToQueryMap := map [string ]string {
32
- "/user" : "" ,
33
- "/user/emails" : "" ,
30
+ func testGitHubBackend (payload []string ) * httptest.Server {
31
+ pathToQueryMap := map [string ][]string {
32
+ "/user" : []string {"" },
33
+ "/user/emails" : []string {"" },
34
+ "/user/orgs" : []string {"limit=200&page=1" , "limit=200&page=2" , "limit=200&page=3" },
34
35
}
35
36
36
37
return httptest .NewServer (http .HandlerFunc (
37
38
func (w http.ResponseWriter , r * http.Request ) {
38
39
url := r .URL
39
40
query , ok := pathToQueryMap [url .Path ]
41
+ validQuery := false
42
+ index := 0
43
+ for i , q := range query {
44
+ if q == url .RawQuery {
45
+ validQuery = true
46
+ index = i
47
+ }
48
+ }
40
49
if ! ok {
41
50
w .WriteHeader (404 )
42
- } else if url . RawQuery != query {
51
+ } else if ! validQuery {
43
52
w .WriteHeader (404 )
44
53
} else {
45
54
w .WriteHeader (200 )
46
- w .Write ([]byte (payload ))
55
+ w .Write ([]byte (payload [ index ] ))
47
56
}
48
57
}))
49
58
}
@@ -89,11 +98,29 @@ func TestGitHubProviderOverrides(t *testing.T) {
89
98
}
90
99
91
100
func TestGitHubProviderGetEmailAddress (t * testing.T ) {
92
- b := testGitHubBackend (
`[ {"email": "[email protected] ", "primary": true} ]` )
101
+ b := testGitHubBackend ([]
string {
`[ {"email": "[email protected] ", "primary": true} ]` })
102
+ defer b .Close ()
103
+
104
+ bURL , _ := url .Parse (b .URL )
105
+ p := testGitHubProvider (bURL .Host )
106
+
107
+ session := & SessionState {AccessToken : "imaginary_access_token" }
108
+ email , err := p .GetEmailAddress (session )
109
+ assert .Equal (t , nil , err )
110
+ assert .
Equal (
t ,
"[email protected] " ,
email )
111
+ }
112
+
113
+ func TestGitHubProviderGetEmailAddressWithOrg (t * testing.T ) {
114
+ b := testGitHubBackend ([]string {
115
+ `[ {"email": "[email protected] ", "primary": true, "login":"testorg"} ]` ,
116
+ `[ {"email": "[email protected] ", "primary": true, "login":"testorg1"} ]` ,
117
+ `[ ]` ,
118
+ })
93
119
defer b .Close ()
94
120
95
121
bURL , _ := url .Parse (b .URL )
96
122
p := testGitHubProvider (bURL .Host )
123
+ p .Org = "testorg1"
97
124
98
125
session := & SessionState {AccessToken : "imaginary_access_token" }
99
126
email , err := p .GetEmailAddress (session )
@@ -104,7 +131,7 @@ func TestGitHubProviderGetEmailAddress(t *testing.T) {
104
131
// Note that trying to trigger the "failed building request" case is not
105
132
// practical, since the only way it can fail is if the URL fails to parse.
106
133
func TestGitHubProviderGetEmailAddressFailedRequest (t * testing.T ) {
107
- b := testGitHubBackend ("unused payload" )
134
+ b := testGitHubBackend ([] string { "unused payload" } )
108
135
defer b .Close ()
109
136
110
137
bURL , _ := url .Parse (b .URL )
@@ -120,7 +147,7 @@ func TestGitHubProviderGetEmailAddressFailedRequest(t *testing.T) {
120
147
}
121
148
122
149
func TestGitHubProviderGetEmailAddressEmailNotPresentInPayload (t * testing.T ) {
123
- b := testGitHubBackend ("{\" foo\" : \" bar\" }" )
150
+ b := testGitHubBackend ([] string { "{\" foo\" : \" bar\" }" } )
124
151
defer b .Close ()
125
152
126
153
bURL , _ := url .Parse (b .URL )
@@ -133,7 +160,7 @@ func TestGitHubProviderGetEmailAddressEmailNotPresentInPayload(t *testing.T) {
133
160
}
134
161
135
162
func TestGitHubProviderGetUserName (t * testing.T ) {
136
- b := testGitHubBackend (
`{"email": "[email protected] ", "login": "mbland"}` )
163
+ b := testGitHubBackend (
[] string { `{"email": "[email protected] ", "login": "mbland"}` } )
137
164
defer b .Close ()
138
165
139
166
bURL , _ := url .Parse (b .URL )
0 commit comments