Skip to content

Commit

Permalink
Merge pull request #108 from slashdevops/fix-issue-107
Browse files Browse the repository at this point in the history
fix: issue #107
  • Loading branch information
christiangda committed Sep 10, 2023
2 parents c9fc22f + a462d14 commit 1d50740
Show file tree
Hide file tree
Showing 2 changed files with 118 additions and 12 deletions.
42 changes: 30 additions & 12 deletions pkg/google/google.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,59 +76,74 @@ func NewDirectoryService(svc *admin.Service) (*DirectoryService, error) {
// ListUsers list all users in a Google Directory filtered by query.
func (ds *DirectoryService) ListUsers(ctx context.Context, query []string) ([]*admin.User, error) {
u := make([]*admin.User, 0)
var err error

if len(query) > 0 {
for _, q := range query {
if q != "" {
err = ds.svc.Users.List().Query(q).Customer("my_customer").Fields(listUsersRequiredFields).Pages(ctx, func(users *admin.Users) error {
err := ds.svc.Users.List().Query(q).Customer("my_customer").Fields(listUsersRequiredFields).Pages(ctx, func(users *admin.Users) error {
u = append(u, users.Users...)
return nil
})
if err != nil {
return nil, err
}
} else {
err = ds.svc.Users.List().Customer("my_customer").Fields(listUsersRequiredFields).Pages(ctx, func(users *admin.Users) error {
err := ds.svc.Users.List().Customer("my_customer").Fields(listUsersRequiredFields).Pages(ctx, func(users *admin.Users) error {
u = append(u, users.Users...)
return nil
})
if err != nil {
return nil, err
}
}
}
} else {
err = ds.svc.Users.List().Customer("my_customer").Fields(listUsersRequiredFields).Pages(ctx, func(users *admin.Users) error {
err := ds.svc.Users.List().Customer("my_customer").Fields(listUsersRequiredFields).Pages(ctx, func(users *admin.Users) error {
u = append(u, users.Users...)
return nil
})
if err != nil {
return nil, err
}
}
return u, err
return u, nil
}

// ListGroups list all groups in a Google Directory filtered by query.
// References:
// - https://developers.google.com/admin-sdk/directory/reference/rest/v1/groups
func (ds *DirectoryService) ListGroups(ctx context.Context, query []string) ([]*admin.Group, error) {
g := make([]*admin.Group, 0)
var err error

if len(query) > 0 {
for _, q := range query {
if q != "" {
err = ds.svc.Groups.List().Customer("my_customer").Query(q).Fields(groupsRequiredFields).Pages(ctx, func(groups *admin.Groups) error {
err := ds.svc.Groups.List().Customer("my_customer").Query(q).Fields(groupsRequiredFields).Pages(ctx, func(groups *admin.Groups) error {
g = append(g, groups.Groups...)
return nil
})
if err != nil {
return nil, err
}
} else {
err = ds.svc.Groups.List().Customer("my_customer").Fields(groupsRequiredFields).Pages(ctx, func(groups *admin.Groups) error {
err := ds.svc.Groups.List().Customer("my_customer").Fields(groupsRequiredFields).Pages(ctx, func(groups *admin.Groups) error {
g = append(g, groups.Groups...)
return nil
})
if err != nil {
return nil, err
}
}
}
} else {
err = ds.svc.Groups.List().Customer("my_customer").Fields(groupsRequiredFields).Pages(ctx, func(groups *admin.Groups) error {
err := ds.svc.Groups.List().Customer("my_customer").Fields(groupsRequiredFields).Pages(ctx, func(groups *admin.Groups) error {
g = append(g, groups.Groups...)
return nil
})
if err != nil {
return nil, err
}
}
return g, err
return g, nil
}

// ListGroupMembers return a list of all members given a group ID.
Expand Down Expand Up @@ -173,8 +188,11 @@ func (ds *DirectoryService) ListGroupMembers(ctx context.Context, groupID string
}
return nil
})
if err != nil {
return nil, err
}

return m, err
return m, nil
}

// GetUser return a user given a user ID.
Expand Down
88 changes: 88 additions & 0 deletions pkg/google/google_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ import (
"google.golang.org/api/option"
)

func TestListUsers(t *testing.T) {
}

func TestNewService(t *testing.T) {
t.Run("Should return a new Service with mocked parameters", func(t *testing.T) {
ctx := context.TODO()
Expand Down Expand Up @@ -301,6 +304,91 @@ func TestNewDirectoryService_ListUsers(t *testing.T) {
assert.Equal(t, "user", got[0].Name.GivenName)
assert.False(t, got[0].Suspended)
})

t.Run("show return an error when pages() return error because the json is bad", func(t *testing.T) {
ctx := context.TODO()

filter := []string{"name:user* email:user*"}
urlPath := "/admin/directory/v1/users"

svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
assert.Equal(t, "GET", r.Method)
assert.Equal(t, urlPath, r.URL.Path)
assert.Equal(t, filter[0], r.URL.Query().Get("query"))
w.WriteHeader(http.StatusOK)
w.Write([]byte(`{"etag":"etag-users","kind":"directory#users","users":[{"id":"123456789","etag":"etag-user-123456789","primaryEmail":"""}]}`))
}))
defer svr.Close()

svc, err := admin.NewService(ctx, option.WithHTTPClient(svr.Client()), option.WithEndpoint(svr.URL), option.WithUserAgent("test"))
assert.NoError(t, err)

client, err := NewDirectoryService(svc)
assert.NoError(t, err)
assert.NotNil(t, client)

got, err := client.ListUsers(ctx, filter)
assert.Error(t, err)

t.Logf("got: %+v", got)
assert.Equal(t, 0, len(got))
})

t.Run("show return an error when pages() return error", func(t *testing.T) {
ctx := context.TODO()

filter := []string{"name:user* email:user*"}
urlPath := "/admin/directory/v1/users"

svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
assert.Equal(t, "GET", r.Method)
assert.Equal(t, urlPath, r.URL.Path)
assert.Equal(t, filter[0], r.URL.Query().Get("query"))
w.WriteHeader(http.StatusServiceUnavailable)
}))
defer svr.Close()

svc, err := admin.NewService(ctx, option.WithHTTPClient(svr.Client()), option.WithEndpoint(svr.URL), option.WithUserAgent("test"))
assert.NoError(t, err)

client, err := NewDirectoryService(svc)
assert.NoError(t, err)
assert.NotNil(t, client)

got, err := client.ListUsers(ctx, filter)
assert.Error(t, err)

t.Logf("got: %+v", got)
assert.Equal(t, 0, len(got))
})

t.Run("show return an error when pages() return error", func(t *testing.T) {
ctx := context.TODO()

filter := []string{"name:user* email:user*"}
urlPath := "/admin/directory/v1/users"

svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
assert.Equal(t, "GET", r.Method)
assert.Equal(t, urlPath, r.URL.Path)
assert.Equal(t, filter[0], r.URL.Query().Get("query"))
w.WriteHeader(http.StatusTooManyRequests)
}))
defer svr.Close()

svc, err := admin.NewService(ctx, option.WithHTTPClient(svr.Client()), option.WithEndpoint(svr.URL), option.WithUserAgent("test"))
assert.NoError(t, err)

client, err := NewDirectoryService(svc)
assert.NoError(t, err)
assert.NotNil(t, client)

got, err := client.ListUsers(ctx, filter)
assert.Error(t, err)

t.Logf("got: %+v", got)
assert.Equal(t, 0, len(got))
})
}

func TestNewDirectoryService_ListGroups(t *testing.T) {
Expand Down

0 comments on commit 1d50740

Please sign in to comment.