@@ -27,23 +27,32 @@ func testGitHubProvider(hostname string) *GitHubProvider {
30−func testGitHubBackend(payload string) *httptest.Server {
30+func testGitHubBackend(payload []string) *httptest.Server {
31− pathToQueryMap := map[string]string{
31+ pathToQueryMap := map[string][]string{
32− "/user": "",
32+ "/user": []string{""},
33− "/user/emails": "",
33+ "/user/emails": []string{""},
34+ "/user/orgs": []string{"limit=200&page=1", "limit=200&page=2", "limit=200&page=3"},
36 return httptest.NewServer(http.HandlerFunc(
37 return httptest.NewServer(http.HandlerFunc(
37 func(w http.ResponseWriter, r *http.Request) {
38 func(w http.ResponseWriter, r *http.Request) {
38 url := r.URL
39 url := r.URL
39 query, ok := pathToQueryMap[url.Path]
40 query, ok := pathToQueryMap[url.Path]
43+ for i, q := range query {
44+ if q == url.RawQuery {
41 w.WriteHeader(404)
50 w.WriteHeader(404)
42− } else if url.RawQuery != query {
51+ } else if !validQuery {
43 w.WriteHeader(404)
52 w.WriteHeader(404)
45 w.WriteHeader(200)
54 w.WriteHeader(200)
46− w.Write([]byte(payload))
55+ w.Write([]byte(payload[index]))
@@ -89,11 +98,29 @@ func TestGitHubProviderOverrides(t *testing.T) {
91func TestGitHubProviderGetEmailAddress(t *testing.T) {
100func 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} ]`})
104+ bURL, _ := url.Parse(b.URL)
105+ p := testGitHubProvider(bURL.Host)
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)
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"} ]`,
93 defer b.Close()
119 defer b.Close()
95 bURL, _ := url.Parse(b.URL)
121 bURL, _ := url.Parse(b.URL)
96 p := testGitHubProvider(bURL.Host)
122 p := testGitHubProvider(bURL.Host)
98 session := &SessionState{AccessToken: "imaginary_access_token"}
125 session := &SessionState{AccessToken: "imaginary_access_token"}
99 email, err := p.GetEmailAddress(session)
126 email, err := p.GetEmailAddress(session)
@@ -104,7 +131,7 @@ func TestGitHubProviderGetEmailAddress(t *testing.T) {
104// Note that trying to trigger the "failed building request" case is not
131// Note that trying to trigger the "failed building request" case is not
105// practical, since the only way it can fail is if the URL fails to parse.
132// practical, since the only way it can fail is if the URL fails to parse.
106func TestGitHubProviderGetEmailAddressFailedRequest(t *testing.T) {
133func TestGitHubProviderGetEmailAddressFailedRequest(t *testing.T) {
107− b := testGitHubBackend("unused payload")
134+ b := testGitHubBackend([]string{"unused payload"})
108 defer b.Close()
135 defer b.Close()
110 bURL, _ := url.Parse(b.URL)
137 bURL, _ := url.Parse(b.URL)
@@ -120,7 +147,7 @@ func TestGitHubProviderGetEmailAddressFailedRequest(t *testing.T) {
122func TestGitHubProviderGetEmailAddressEmailNotPresentInPayload(t *testing.T) {
149func TestGitHubProviderGetEmailAddressEmailNotPresentInPayload(t *testing.T) {
123− b := testGitHubBackend("{\"foo\": \"bar\"}")
150+ b := testGitHubBackend([]string{"{\"foo\": \"bar\"}"})
124 defer b.Close()
151 defer b.Close()
126 bURL, _ := url.Parse(b.URL)
153 bURL, _ := url.Parse(b.URL)
@@ -133,7 +160,7 @@ func TestGitHubProviderGetEmailAddressEmailNotPresentInPayload(t *testing.T) {
135func TestGitHubProviderGetUserName(t *testing.T) {
162func 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"}`})
137 defer b.Close()
164 defer b.Close()
139 bURL, _ := url.Parse(b.URL)
166 bURL, _ := url.Parse(b.URL)