9 "github.com/stretchr/testify/assert"
12func testGitHubProvider(hostname string) *GitHubProvider {
13 p := NewGitHubProvider(
17 RedeemURL: &url.URL{},
18 ProfileURL: &url.URL{},
19 ValidateURL: &url.URL{},
22 updateURL(p.Data().LoginURL, hostname)
23 updateURL(p.Data().RedeemURL, hostname)
24 updateURL(p.Data().ProfileURL, hostname)
25 updateURL(p.Data().ValidateURL, hostname)
30func testGitHubBackend(payload []string) *httptest.Server {
31 pathToQueryMap := map[string][]string{
34 "/user/orgs": {"limit=200&page=1", "limit=200&page=2", "limit=200&page=3"},
37 return httptest.NewServer(http.HandlerFunc(
38 func(w http.ResponseWriter, r *http.Request) {
39 query, ok := pathToQueryMap[r.URL.Path]
42 for i, q := range query {
43 if q == r.URL.RawQuery {
50 } else if !validQuery {
54 w.Write([]byte(payload[index]))
59func TestGitHubProviderDefaults(t *testing.T) {
60 p := testGitHubProvider("")
61 assert.NotEqual(t, nil, p)
62 assert.Equal(t, "GitHub", p.Data().ProviderName)
63 assert.Equal(t, "https://github.com/login/oauth/authorize",
64 p.Data().LoginURL.String())
65 assert.Equal(t, "https://github.com/login/oauth/access_token",
66 p.Data().RedeemURL.String())
67 assert.Equal(t, "https://api.github.com/",
68 p.Data().ValidateURL.String())
69 assert.Equal(t, "user:email", p.Data().Scope)
72func TestGitHubProviderOverrides(t *testing.T) {
73 p := NewGitHubProvider(
78 Path: "/login/oauth/authorize"},
82 Path: "/login/oauth/access_token"},
83 ValidateURL: &url.URL{
85 Host: "api.example.com",
88 assert.NotEqual(t, nil, p)
89 assert.Equal(t, "GitHub", p.Data().ProviderName)
90 assert.Equal(t, "https://example.com/login/oauth/authorize",
91 p.Data().LoginURL.String())
92 assert.Equal(t, "https://example.com/login/oauth/access_token",
93 p.Data().RedeemURL.String())
94 assert.Equal(t, "https://api.example.com/",
95 p.Data().ValidateURL.String())
96 assert.Equal(t, "profile", p.Data().Scope)
99func TestGitHubProviderGetEmailAddress(t *testing.T) {
100 b := testGitHubBackend([]string{`[ {"email": "michael.bland@gsa.gov", "verified": true, "primary": true} ]`})
103 bURL, _ := url.Parse(b.URL)
104 p := testGitHubProvider(bURL.Host)
106 session := &SessionState{AccessToken: "imaginary_access_token"}
107 email, err := p.GetEmailAddress(session)
108 assert.Equal(t, nil, err)
109 assert.Equal(t, "michael.bland@gsa.gov", email)
112func TestGitHubProviderGetEmailAddressNotVerified(t *testing.T) {
113 b := testGitHubBackend([]string{`[ {"email": "michael.bland@gsa.gov", "verified": false, "primary": true} ]`})
116 bURL, _ := url.Parse(b.URL)
117 p := testGitHubProvider(bURL.Host)
119 session := &SessionState{AccessToken: "imaginary_access_token"}
120 email, err := p.GetEmailAddress(session)
121 assert.Equal(t, nil, err)
122 assert.Empty(t, "", email)
125func TestGitHubProviderGetEmailAddressWithOrg(t *testing.T) {
126 b := testGitHubBackend([]string{
127 `[ {"email": "michael.bland@gsa.gov", "primary": true, "verified": true, "login":"testorg"} ]`,
128 `[ {"email": "michael.bland1@gsa.gov", "primary": true, "verified": true, "login":"testorg1"} ]`,
133 bURL, _ := url.Parse(b.URL)
134 p := testGitHubProvider(bURL.Host)
137 session := &SessionState{AccessToken: "imaginary_access_token"}
138 email, err := p.GetEmailAddress(session)
139 assert.Equal(t, nil, err)
140 assert.Equal(t, "michael.bland@gsa.gov", email)
143// Note that trying to trigger the "failed building request" case is not
144// practical, since the only way it can fail is if the URL fails to parse.
145func TestGitHubProviderGetEmailAddressFailedRequest(t *testing.T) {
146 b := testGitHubBackend([]string{"unused payload"})
149 bURL, _ := url.Parse(b.URL)
150 p := testGitHubProvider(bURL.Host)
152 // We'll trigger a request failure by using an unexpected access
153 // token. Alternatively, we could allow the parsing of the payload as
155 session := &SessionState{AccessToken: "unexpected_access_token"}
156 email, err := p.GetEmailAddress(session)
157 assert.NotEqual(t, nil, err)
158 assert.Equal(t, "", email)
161func TestGitHubProviderGetEmailAddressEmailNotPresentInPayload(t *testing.T) {
162 b := testGitHubBackend([]string{"{\"foo\": \"bar\"}"})
165 bURL, _ := url.Parse(b.URL)
166 p := testGitHubProvider(bURL.Host)
168 session := &SessionState{AccessToken: "imaginary_access_token"}
169 email, err := p.GetEmailAddress(session)
170 assert.NotEqual(t, nil, err)
171 assert.Equal(t, "", email)
174func TestGitHubProviderGetUserName(t *testing.T) {
175 b := testGitHubBackend([]string{`{"email": "michael.bland@gsa.gov", "login": "mbland"}`})
178 bURL, _ := url.Parse(b.URL)
179 p := testGitHubProvider(bURL.Host)
181 session := &SessionState{AccessToken: "imaginary_access_token"}
182 email, err := p.GetUserName(session)
183 assert.Equal(t, nil, err)
184 assert.Equal(t, "mbland", email)
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list