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", "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 TestGitHubProviderGetEmailAddressWithOrg(t *testing.T) {
113 b := testGitHubBackend([]string{
114 `[ {"email": "michael.bland@gsa.gov", "primary": true, "login":"testorg"} ]`,
115 `[ {"email": "michael.bland1@gsa.gov", "primary": true, "login":"testorg1"} ]`,
120 bURL, _ := url.Parse(b.URL)
121 p := testGitHubProvider(bURL.Host)
124 session := &SessionState{AccessToken: "imaginary_access_token"}
125 email, err := p.GetEmailAddress(session)
126 assert.Equal(t, nil, err)
127 assert.Equal(t, "michael.bland@gsa.gov", email)
130// Note that trying to trigger the "failed building request" case is not
131// practical, since the only way it can fail is if the URL fails to parse.
132func TestGitHubProviderGetEmailAddressFailedRequest(t *testing.T) {
133 b := testGitHubBackend([]string{"unused payload"})
136 bURL, _ := url.Parse(b.URL)
137 p := testGitHubProvider(bURL.Host)
139 // We'll trigger a request failure by using an unexpected access
140 // token. Alternatively, we could allow the parsing of the payload as
142 session := &SessionState{AccessToken: "unexpected_access_token"}
143 email, err := p.GetEmailAddress(session)
144 assert.NotEqual(t, nil, err)
145 assert.Equal(t, "", email)
148func TestGitHubProviderGetEmailAddressEmailNotPresentInPayload(t *testing.T) {
149 b := testGitHubBackend([]string{"{\"foo\": \"bar\"}"})
152 bURL, _ := url.Parse(b.URL)
153 p := testGitHubProvider(bURL.Host)
155 session := &SessionState{AccessToken: "imaginary_access_token"}
156 email, err := p.GetEmailAddress(session)
157 assert.NotEqual(t, nil, err)
158 assert.Equal(t, "", email)
161func TestGitHubProviderGetUserName(t *testing.T) {
162 b := testGitHubBackend([]string{`{"email": "michael.bland@gsa.gov", "login": "mbland"}`})
165 bURL, _ := url.Parse(b.URL)
166 p := testGitHubProvider(bURL.Host)
168 session := &SessionState{AccessToken: "imaginary_access_token"}
169 email, err := p.GetUserName(session)
170 assert.Equal(t, nil, err)
171 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