Skip to content

Commit 56b24ee

Browse files
CLOUDP-62030: Add pagination to listing projects and orgs (#155)
1 parent 1906ae1 commit 56b24ee

File tree

6 files changed

+51
-42
lines changed

6 files changed

+51
-42
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ require (
1919
github.com/spf13/pflag v1.0.5 // indirect
2020
github.com/spf13/viper v1.6.2
2121
github.com/stretchr/testify v1.4.0 // indirect
22-
go.mongodb.org/ops-manager v0.5.0
22+
go.mongodb.org/ops-manager v0.5.1
2323
golang.org/x/crypto v0.0.0-20191108234033-bd318be0434a // indirect
2424
golang.org/x/sys v0.0.0-20200413165638-669c56c373c4 // indirect
2525
golang.org/x/text v0.3.2 // indirect

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,8 @@ github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGr
168168
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
169169
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
170170
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
171-
go.mongodb.org/ops-manager v0.5.0 h1:2T2CxZICAh/Y77Z+WrNT7XN2QlELDr3mSyCfmcPdOo0=
172-
go.mongodb.org/ops-manager v0.5.0/go.mod h1:PpGSUCpa7ncGGh+JWFKuAeW87V5RdOdFPMsEgH1uyHg=
171+
go.mongodb.org/ops-manager v0.5.1 h1:P+Wi9r6JiSZEpuRfLrAem1v2zZ7Ew3cIZbHLibMVmKM=
172+
go.mongodb.org/ops-manager v0.5.1/go.mod h1:PpGSUCpa7ncGGh+JWFKuAeW87V5RdOdFPMsEgH1uyHg=
173173
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
174174
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
175175
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=

internal/cli/iam_projects_list.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626

2727
type iamProjectsListOpts struct {
2828
globalOpts
29+
listOpts
2930
store store.ProjectLister
3031
}
3132

@@ -38,10 +39,11 @@ func (opts *iamProjectsListOpts) init() error {
3839
func (opts *iamProjectsListOpts) Run() error {
3940
var projects interface{}
4041
var err error
42+
listOptions := opts.newListOptions()
4143
if opts.OrgID() != "" && config.Service() == config.OpsManagerService {
42-
projects, err = opts.store.GetOrgProjects(opts.OrgID())
44+
projects, err = opts.store.GetOrgProjects(opts.OrgID(), listOptions)
4345
} else {
44-
projects, err = opts.store.GetAllProjects()
46+
projects, err = opts.store.GetAllProjects(listOptions)
4547
}
4648
if err != nil {
4749
return err
@@ -64,6 +66,9 @@ func IAMProjectsListBuilder() *cobra.Command {
6466
},
6567
}
6668

69+
cmd.Flags().IntVar(&opts.pageNum, flags.Page, 0, usage.Page)
70+
cmd.Flags().IntVar(&opts.itemsPerPage, flags.Limit, 0, usage.Limit)
71+
6772
cmd.Flags().StringVar(&opts.orgID, flags.OrgID, "", usage.OrgID)
6873

6974
return cmd

internal/cli/iam_projects_list_test.go

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,33 +31,35 @@ func TestIAMProjectsList_Run(t *testing.T) {
3131

3232
expected := &mongodbatlas.Projects{}
3333

34+
listOpts := &iamProjectsListOpts{
35+
store: mockStore,
36+
}
37+
3438
t.Run("No OrgID is given", func(t *testing.T) {
3539
mockStore.
3640
EXPECT().
37-
GetAllProjects().
41+
GetAllProjects(listOpts.newListOptions()).
3842
Return(expected, nil).
3943
Times(1)
4044

41-
listOpts := &iamProjectsListOpts{
42-
store: mockStore,
43-
}
4445
err := listOpts.Run()
4546
if err != nil {
4647
t.Fatalf("Run() unexpected error: %v", err)
4748
}
4849
})
4950

5051
t.Run("An OrgID is given for OM", func(t *testing.T) {
52+
listOpts := &iamProjectsListOpts{
53+
store: mockStore,
54+
}
55+
listOpts.orgID = "1"
56+
5157
mockStore.
5258
EXPECT().
53-
GetOrgProjects("1").
59+
GetOrgProjects("1", listOpts.newListOptions()).
5460
Return(expected, nil).
5561
Times(1)
5662

57-
listOpts := &iamProjectsListOpts{
58-
store: mockStore,
59-
}
60-
listOpts.orgID = "1"
6163
config.SetService(config.OpsManagerService)
6264
err := listOpts.Run()
6365
if err != nil {
@@ -66,16 +68,17 @@ func TestIAMProjectsList_Run(t *testing.T) {
6668
})
6769

6870
t.Run("An OrgID is given for Atlas", func(t *testing.T) {
71+
listOpts := &iamProjectsListOpts{
72+
store: mockStore,
73+
}
74+
listOpts.orgID = "1"
75+
6976
mockStore.
7077
EXPECT().
71-
GetAllProjects().
78+
GetAllProjects(listOpts.newListOptions()).
7279
Return(expected, nil).
7380
Times(1)
7481

75-
listOpts := &iamProjectsListOpts{
76-
store: mockStore,
77-
}
78-
listOpts.orgID = "1"
7982
config.SetService(config.CloudService)
8083
err := listOpts.Run()
8184
if err != nil {

internal/mocks/mock_projects.go

Lines changed: 17 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/store/projects.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ import (
2424
)
2525

2626
type ProjectLister interface {
27-
GetAllProjects() (interface{}, error)
28-
GetOrgProjects(string) (interface{}, error)
27+
GetAllProjects(*atlas.ListOptions) (interface{}, error)
28+
GetOrgProjects(string, *atlas.ListOptions) (interface{}, error)
2929
}
3030

3131
type OrgProjectLister interface {
@@ -47,24 +47,24 @@ type ProjectStore interface {
4747
}
4848

4949
// GetAllProjects encapsulate the logic to manage different cloud providers
50-
func (s *Store) GetAllProjects() (interface{}, error) {
50+
func (s *Store) GetAllProjects(opts *atlas.ListOptions) (interface{}, error) {
5151
switch s.service {
5252
case config.CloudService:
53-
result, _, err := s.client.(*atlas.Client).Projects.GetAllProjects(context.Background(), nil)
53+
result, _, err := s.client.(*atlas.Client).Projects.GetAllProjects(context.Background(), opts)
5454
return result, err
5555
case config.CloudManagerService, config.OpsManagerService:
56-
result, _, err := s.client.(*opsmngr.Client).Projects.List(context.Background(), nil)
56+
result, _, err := s.client.(*opsmngr.Client).Projects.List(context.Background(), opts)
5757
return result, err
5858
default:
5959
return nil, fmt.Errorf("unsupported service: %s", s.service)
6060
}
6161
}
6262

6363
// GetOrgProjects encapsulate the logic to manage different cloud providers
64-
func (s *Store) GetOrgProjects(orgID string) (interface{}, error) {
64+
func (s *Store) GetOrgProjects(orgID string, opts *atlas.ListOptions) (interface{}, error) {
6565
switch s.service {
6666
case config.CloudManagerService, config.OpsManagerService:
67-
result, _, err := s.client.(*opsmngr.Client).Organizations.GetProjects(context.Background(), orgID)
67+
result, _, err := s.client.(*opsmngr.Client).Organizations.GetProjects(context.Background(), orgID, opts)
6868
return result, err
6969
default:
7070
return nil, fmt.Errorf("unsupported service: %s", s.service)

0 commit comments

Comments
 (0)