9 "github.com/pusher/oauth2_proxy/pkg/apis/sessions"
10 "github.com/stretchr/testify/assert"
13func testGitHubProvider(hostname string) *GitHubProvider {
14 p := NewGitHubProvider(
18 RedeemURL: &url.URL{},
19 ProfileURL: &url.URL{},
20 ValidateURL: &url.URL{},
23 updateURL(p.Data().LoginURL, hostname)
24 updateURL(p.Data().RedeemURL, hostname)
25 updateURL(p.Data().ProfileURL, hostname)
26 updateURL(p.Data().ValidateURL, hostname)
31func testGitHubBackend(payload []string) *httptest.Server {
32 pathToQueryMap := map[string][]string{
35 "/user/orgs": {"limit=200&page=1", "limit=200&page=2", "limit=200&page=3"},
38 return httptest.NewServer(http.HandlerFunc(
39 func(w http.ResponseWriter, r *http.Request) {
40 query, ok := pathToQueryMap[r.URL.Path]
43 for i, q := range query {
44 if q == r.URL.RawQuery {
51 } else if !validQuery {
55 w.Write([]byte(payload[index]))
60func TestGitHubProviderDefaults(t *testing.T) {
61 p := testGitHubProvider("")
62 assert.NotEqual(t, nil, p)
63 assert.Equal(t, "GitHub", p.Data().ProviderName)
64 assert.Equal(t, "https://github.com/login/oauth/authorize",
65 p.Data().LoginURL.String())
66 assert.Equal(t, "https://github.com/login/oauth/access_token",
67 p.Data().RedeemURL.String())
68 assert.Equal(t, "https://api.github.com/",
69 p.Data().ValidateURL.String())
70 assert.Equal(t, "user:email", p.Data().Scope)
73func TestGitHubProviderOverrides(t *testing.T) {
74 p := NewGitHubProvider(
79 Path: "/login/oauth/authorize"},
83 Path: "/login/oauth/access_token"},
84 ValidateURL: &url.URL{
86 Host: "api.example.com",
89 assert.NotEqual(t, nil, p)
90 assert.Equal(t, "GitHub", p.Data().ProviderName)
91 assert.Equal(t, "https://example.com/login/oauth/authorize",
92 p.Data().LoginURL.String())
93 assert.Equal(t, "https://example.com/login/oauth/access_token",
94 p.Data().RedeemURL.String())
95 assert.Equal(t, "https://api.example.com/",
96 p.Data().ValidateURL.String())
97 assert.Equal(t, "profile", p.Data().Scope)
100func TestGitHubProviderGetEmailAddress(t *testing.T) {
101 b := testGitHubBackend([]string{`[ {"email": "michael.bland@gsa.gov", "verified": true, "primary": true} ]`})
104 bURL, _ := url.Parse(b.URL)
105 p := testGitHubProvider(bURL.Host)
107 session := &sessions.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)
113func TestGitHubProviderGetEmailAddressNotVerified(t *testing.T) {
114 b := testGitHubBackend([]string{`[ {"email": "michael.bland@gsa.gov", "verified": false, "primary": true} ]`})
117 bURL, _ := url.Parse(b.URL)
118 p := testGitHubProvider(bURL.Host)
120 session := &sessions.SessionState{AccessToken: "imaginary_access_token"}
121 email, err := p.GetEmailAddress(session)
122 assert.Equal(t, nil, err)
123 assert.Empty(t, "", email)
126func TestGitHubProviderGetEmailAddressWithOrg(t *testing.T) {
127 b := testGitHubBackend([]string{
128 `[ {"email": "michael.bland@gsa.gov", "primary": true, "verified": true, "login":"testorg"} ]`,
129 `[ {"email": "michael.bland1@gsa.gov", "primary": true, "verified": true, "login":"testorg1"} ]`,
134 bURL, _ := url.Parse(b.URL)
135 p := testGitHubProvider(bURL.Host)
138 session := &sessions.SessionState{AccessToken: "imaginary_access_token"}
139 email, err := p.GetEmailAddress(session)
140 assert.Equal(t, nil, err)
141 assert.Equal(t, "michael.bland@gsa.gov", email)
144// Note that trying to trigger the "failed building request" case is not
145// practical, since the only way it can fail is if the URL fails to parse.
146func TestGitHubProviderGetEmailAddressFailedRequest(t *testing.T) {
147 b := testGitHubBackend([]string{"unused payload"})
150 bURL, _ := url.Parse(b.URL)
151 p := testGitHubProvider(bURL.Host)
153 // We'll trigger a request failure by using an unexpected access
154 // token. Alternatively, we could allow the parsing of the payload as
156 session := &sessions.SessionState{AccessToken: "unexpected_access_token"}
157 email, err := p.GetEmailAddress(session)
158 assert.NotEqual(t, nil, err)
159 assert.Equal(t, "", email)
162func TestGitHubProviderGetEmailAddressEmailNotPresentInPayload(t *testing.T) {
163 b := testGitHubBackend([]string{"{\"foo\": \"bar\"}"})
166 bURL, _ := url.Parse(b.URL)
167 p := testGitHubProvider(bURL.Host)
169 session := &sessions.SessionState{AccessToken: "imaginary_access_token"}
170 email, err := p.GetEmailAddress(session)
171 assert.NotEqual(t, nil, err)
172 assert.Equal(t, "", email)
175func TestGitHubProviderGetUserName(t *testing.T) {
176 b := testGitHubBackend([]string{`{"email": "michael.bland@gsa.gov", "login": "mbland"}`})
179 bURL, _ := url.Parse(b.URL)
180 p := testGitHubProvider(bURL.Host)
182 session := &sessions.SessionState{AccessToken: "imaginary_access_token"}
183 email, err := p.GetUserName(session)
184 assert.Equal(t, nil, err)
185 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