@@ -0,0 +1,94 @@
1+package providers
2+
3+import (
4+ "encoding/base64"
5+ "github.com/bitly/go-simplejson"
6+ "github.com/bmizerany/assert"
7+ "net/url"
8+ "testing"
9+)
10+
11+func newGoogleProvider() *GoogleProvider {
12+ return NewGoogleProvider(
13+ &ProviderData{
14+ LoginUrl: &url.URL{},
15+ RedeemUrl: &url.URL{},
16+ ProfileUrl: &url.URL{},
17+ Scope: ""})
18+}
19+
20+func TestGoogleProviderDefaults(t *testing.T) {
21+ p := newGoogleProvider()
22+ assert.NotEqual(t, nil, p)
23+ assert.Equal(t, "https://accounts.google.com/o/oauth2/auth",
24+ p.Data().LoginUrl.String())
25+ assert.Equal(t, "https://accounts.google.com/o/oauth2/token",
26+ p.Data().RedeemUrl.String())
27+ assert.Equal(t, "", p.Data().ProfileUrl.String())
28+ assert.Equal(t, "profile email", p.Data().Scope)
29+}
30+
31+func TestGoogleProviderOverrides(t *testing.T) {
32+ p := NewGoogleProvider(
33+ &ProviderData{
34+ LoginUrl: &url.URL{
35+ Scheme: "https",
36+ Host: "example.com",
37+ Path: "/oauth/auth"},
38+ RedeemUrl: &url.URL{
39+ Scheme: "https",
40+ Host: "example.com",
41+ Path: "/oauth/token"},
42+ ProfileUrl: &url.URL{
43+ Scheme: "https",
44+ Host: "example.com",
45+ Path: "/oauth/profile"},
46+ Scope: "profile"})
47+ assert.NotEqual(t, nil, p)
48+ assert.Equal(t, "https://example.com/oauth/auth",
49+ p.Data().LoginUrl.String())
50+ assert.Equal(t, "https://example.com/oauth/token",
51+ p.Data().RedeemUrl.String())
52+ assert.Equal(t, "https://example.com/oauth/profile",
53+ p.Data().ProfileUrl.String())
54+ assert.Equal(t, "profile", p.Data().Scope)
55+}
56+
57+func TestGoogleProviderGetEmailAddress(t *testing.T) {
58+ p := newGoogleProvider()
59+ j := simplejson.New()
60+ j.Set("id_token", "ignored prefix."+base64.URLEncoding.EncodeToString(
61+ []byte("{\"email\": \"michael.bland@gsa.gov\"}")))
62+ email, err := p.GetEmailAddress(j, "ignored access_token")
63+ assert.Equal(t, "michael.bland@gsa.gov", email)
64+ assert.Equal(t, nil, err)
65+}
66+
67+func TestGoogleProviderGetEmailAddressInvalidEncoding(t *testing.T) {
68+ p := newGoogleProvider()
69+ j := simplejson.New()
70+ j.Set("id_token", "ignored prefix.{\"email\": \"michael.bland@gsa.gov\"}")
71+ email, err := p.GetEmailAddress(j, "ignored access_token")
72+ assert.Equal(t, "", email)
73+ assert.NotEqual(t, nil, err)
74+}
75+
76+func TestGoogleProviderGetEmailAddressInvalidJson(t *testing.T) {
77+ p := newGoogleProvider()
78+ j := simplejson.New()
79+ j.Set("id_token", "ignored prefix."+base64.URLEncoding.EncodeToString(
80+ []byte("{email: michael.bland@gsa.gov}")))
81+ email, err := p.GetEmailAddress(j, "ignored access_token")
82+ assert.Equal(t, "", email)
83+ assert.NotEqual(t, nil, err)
84+}
85+
86+func TestGoogleProviderGetEmailAddressEmailMissing(t *testing.T) {
87+ p := newGoogleProvider()
88+ j := simplejson.New()
89+ j.Set("id_token", "ignored prefix."+base64.URLEncoding.EncodeToString(
90+ []byte("{\"not_email\": \"missing!\"}")))
91+ email, err := p.GetEmailAddress(j, "ignored access_token")
92+ assert.Equal(t, "", email)
93+ assert.NotEqual(t, nil, err)
94+}