@@ -27,23 +27,32 @@ func testGitHubProvider(hostname string) *GitHubProvider {
2727 return p
2828}
2929
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"},
3435 }
3536
3637 return httptest.NewServer(http.HandlerFunc(
3738 func(w http.ResponseWriter, r *http.Request) {
3839 url := r.URL
3940 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+ }
4049 if !ok {
4150 w.WriteHeader(404)
42− } else if url.RawQuery != query {
51+ } else if !validQuery {
4352 w.WriteHeader(404)
4453 } else {
4554 w.WriteHeader(200)
46− w.Write([]byte(payload))
55+ w.Write([]byte(payload[index]))
4756 }
4857 }))
4958}
@@ -89,11 +98,29 @@ func TestGitHubProviderOverrides(t *testing.T) {
8998}
9099
91100func TestGitHubProviderGetEmailAddress(t *testing.T) {
92− b := testGitHubBackend(`[ {"email": "michael.bland@gsa.gov", "primary": true} ]`)
101+ b := testGitHubBackend([]string{`[ {"email": "michael.bland@gsa.gov", "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, "michael.bland@gsa.gov", email)
111+}
112+
113+func TestGitHubProviderGetEmailAddressWithOrg(t *testing.T) {
114+ b := testGitHubBackend([]string{
115+ `[ {"email": "michael.bland@gsa.gov", "primary": true, "login":"testorg"} ]`,
116+ `[ {"email": "michael.bland1@gsa.gov", "primary": true, "login":"testorg1"} ]`,
117+ `[ ]`,
118+ })
93119 defer b.Close()
94120
95121 bURL, _ := url.Parse(b.URL)
96122 p := testGitHubProvider(bURL.Host)
123+ p.Org = "testorg1"
97124
98125 session := &SessionState{AccessToken: "imaginary_access_token"}
99126 email, err := p.GetEmailAddress(session)
@@ -104,7 +131,7 @@ func TestGitHubProviderGetEmailAddress(t *testing.T) {
104131// Note that trying to trigger the "failed building request" case is not
105132// practical, since the only way it can fail is if the URL fails to parse.
106133func TestGitHubProviderGetEmailAddressFailedRequest(t *testing.T) {
107− b := testGitHubBackend("unused payload")
134+ b := testGitHubBackend([]string{"unused payload"})
108135 defer b.Close()
109136
110137 bURL, _ := url.Parse(b.URL)
@@ -120,7 +147,7 @@ func TestGitHubProviderGetEmailAddressFailedRequest(t *testing.T) {
120147}
121148
122149func TestGitHubProviderGetEmailAddressEmailNotPresentInPayload(t *testing.T) {
123− b := testGitHubBackend("{\"foo\": \"bar\"}")
150+ b := testGitHubBackend([]string{"{\"foo\": \"bar\"}"})
124151 defer b.Close()
125152
126153 bURL, _ := url.Parse(b.URL)
@@ -133,7 +160,7 @@ func TestGitHubProviderGetEmailAddressEmailNotPresentInPayload(t *testing.T) {
133160}
134161
135162func TestGitHubProviderGetUserName(t *testing.T) {
136− b := testGitHubBackend(`{"email": "michael.bland@gsa.gov", "login": "mbland"}`)
163+ b := testGitHubBackend([]string{`{"email": "michael.bland@gsa.gov", "login": "mbland"}`})
137164 defer b.Close()
138165
139166 bURL, _ := url.Parse(b.URL)