@@ -3,12 +3,15 @@ package providers
33import (
44 "encoding/base64"
55 "encoding/json"
6+ "fmt"
67 "net/http"
78 "net/http/httptest"
89 "net/url"
910 "testing"
1011
1112 "github.com/stretchr/testify/assert"
13+
14+ admin "google.golang.org/api/admin/directory/v1"
1215)
1316
1417func newRedeemServer(body []byte) (*url.URL, *httptest.Server) {
@@ -179,3 +182,37 @@ func TestGoogleProviderGetEmailAddressEmailMissing(t *testing.T) {
179182 }
180183
181184}
185+
186+func TestGoogleProviderUserInGroup(t *testing.T) {
187+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
188+ if r.URL.Path == "/users/member-by-email@example.com" {
189+ fmt.Fprintln(w, "{}")
190+ } else if r.URL.Path == "/users/non-member-by-email@example.com" {
191+ fmt.Fprintln(w, "{}")
192+ } else if r.URL.Path == "/users/member-by-id@example.com" {
193+ fmt.Fprintln(w, "{\"id\": \"member-id\"}")
194+ } else if r.URL.Path == "/users/non-member-by-id@example.com" {
195+ fmt.Fprintln(w, "{\"id\": \"non-member-id\"}")
196+ } else if r.URL.Path == "/groups/group@example.com/members" {
197+ fmt.Fprintln(w, "{\"members\": [{\"email\": \"member-by-email@example.com\"}, {\"id\": \"member-id\", \"type\": \"USER\"}]}")
198+ }
199+ }))
200+ defer ts.Close()
201+
202+ client := ts.Client()
203+ service, err := admin.New(client)
204+ service.BasePath = ts.URL
205+ assert.Equal(t, nil, err)
206+
207+ result := userInGroup(service, []string{"group@example.com"}, "member-by-email@example.com")
208+ assert.True(t, result)
209+
210+ result = userInGroup(service, []string{"group@example.com"}, "member-by-id@example.com")
211+ assert.True(t, result)
212+
213+ result = userInGroup(service, []string{"group@example.com"}, "non-member-by-id@example.com")
214+ assert.False(t, result)
215+
216+ result = userInGroup(service, []string{"group@example.com"}, "non-member-by-email@example.com")
217+ assert.False(t, result)
218+}