From ca234aa0dc931c85711aaba4325d2bde6e5ff6f6 Mon Sep 17 00:00:00 2001 From: andreaangiolillo Date: Fri, 8 Apr 2022 14:51:12 +0100 Subject: [PATCH 1/5] CLOUDP-118028: [atlascli] Allow to list and edit project settings --- mongodbatlas/project_settings.go | 80 ++++++++++++++++++++++ mongodbatlas/project_settings_test.go | 98 +++++++++++++++++++++++++++ mongodbatlas/projects.go | 2 + 3 files changed, 180 insertions(+) create mode 100644 mongodbatlas/project_settings.go create mode 100644 mongodbatlas/project_settings_test.go diff --git a/mongodbatlas/project_settings.go b/mongodbatlas/project_settings.go new file mode 100644 index 000000000..b27df7ec2 --- /dev/null +++ b/mongodbatlas/project_settings.go @@ -0,0 +1,80 @@ +// Copyright 2022 MongoDB Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package mongodbatlas + +import ( + "context" + "fmt" + "net/http" +) + +const projectSettingsBasePath = projectBasePath + "/%s/settings" + +type ProjectSettings struct { + IsCollectDatabaseSpecificsStatisticsEnabled *bool `url:"isCollectDatabaseSpecificsStatisticsEnabled,omitempty"` + isDataExplorerEnabled *bool `url:"isDataExplorerEnabled,omitempty"` + isPerformanceAdvisorEnabled *bool `url:"isPerformanceAdvisorEnabled,omitempty"` + isRealtimePerformancePanelEnabled *bool `url:"isRealtimePerformancePanelEnabled,omitempty"` + isSchemaAdvisorEnabled *bool `url:"isRealtimePerformancePanelEnabled,omitempty"` +} + + +// GetProjectSettings gets details about the settings for specified project. +// +// See more: https://www.mongodb.com/docs/atlas/reference/api/project-settings-get-one/ +func (s *ProjectsServiceOp) GetProjectSettings(ctx context.Context, groupID string) (*ProjectSettings, *Response, error) { + if groupID == "" { + return nil, nil, NewArgError("groupID", "must be set") + } + + path := fmt.Sprintf(projectSettingsBasePath, groupID) + req, err := s.Client.NewRequest(ctx, http.MethodGet, path, nil) + if err != nil { + return nil, nil, err + } + + var root *ProjectSettings + resp, err := s.Client.Do(ctx, req, &root) + if err != nil { + return nil, resp, err + } + + return root, resp, nil +} + +// UpdateProjectSettings updates the settings for the specified project. +// +// See more: https://www.mongodb.com/docs/atlas/reference/api/project-settings-update-one/ +func (s *ProjectsServiceOp) UpdateProjectSettings(ctx context.Context, groupID string, projectSettings *ProjectSettings) (*ProjectSettings, *Response, error) { + if groupID == "" { + return nil, nil, NewArgError("groupID", "must be set") + } + + path := fmt.Sprintf(projectSettingsBasePath, groupID) + req, err := s.Client.NewRequest(ctx, http.MethodPatch, path, projectSettings) + if err != nil { + return nil, nil, err + } + + var root *ProjectSettings + resp, err := s.Client.Do(ctx, req, &root) + if err != nil { + return nil, resp, err + } + + return root, resp, nil +} + + diff --git a/mongodbatlas/project_settings_test.go b/mongodbatlas/project_settings_test.go new file mode 100644 index 000000000..d1b019fc2 --- /dev/null +++ b/mongodbatlas/project_settings_test.go @@ -0,0 +1,98 @@ +// Copyright 2022 MongoDB Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package mongodbatlas + +import ( + "fmt" + "github.com/openlyinc/pointy" + "net/http" + "testing" + + "github.com/go-test/deep" +) + +func TestProjects_GetProjectSettings(t *testing.T) { + client, mux, teardown := setup() + defer teardown() + + mux.HandleFunc(fmt.Sprintf("/api/atlas/v1.0/groups/%s/settings", groupID), func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, http.MethodGet) + _, _ = fmt.Fprint(w, `{ + "isCollectDatabaseSpecificsStatisticsEnabled": true, + "isDataExplorerEnabled": true, + "isPerformanceAdvisorEnabled": true, + "isRealtimePerformancePanelEnabled": true, + "isSchemaAdvisorEnabled": true +}`) + }) + + projectSettings, _, err := client.Projects.GetProjectSettings(ctx, groupID) + if err != nil { + t.Fatalf("Projects.GetProjectSettings returned error: %v", err) + } + + expected := &ProjectSettings{ + IsCollectDatabaseSpecificsStatisticsEnabled: pointy.Bool(true), + isDataExplorerEnabled: pointy.Bool(true), + isPerformanceAdvisorEnabled: pointy.Bool(true), + isRealtimePerformancePanelEnabled: pointy.Bool(true), + isSchemaAdvisorEnabled: pointy.Bool(true), + } + + if diff := deep.Equal(projectSettings, expected); diff != nil { + t.Error(diff) + } +} + +func TestProjects_UpdateProjectSettings(t *testing.T) { + client, mux, teardown := setup() + defer teardown() + + mux.HandleFunc(fmt.Sprintf("/api/atlas/v1.0/groups/%s/settings", groupID), func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, http.MethodPatch) + _, _ = fmt.Fprint(w, `{ + "isCollectDatabaseSpecificsStatisticsEnabled": true, + "isDataExplorerEnabled": true, + "isPerformanceAdvisorEnabled": true, + "isRealtimePerformancePanelEnabled": true, + "isSchemaAdvisorEnabled": true +}`) + }) + + body := &ProjectSettings{ + IsCollectDatabaseSpecificsStatisticsEnabled: pointy.Bool(true), + isDataExplorerEnabled: pointy.Bool(true), + isPerformanceAdvisorEnabled: pointy.Bool(true), + isRealtimePerformancePanelEnabled: pointy.Bool(true), + isSchemaAdvisorEnabled: pointy.Bool(true), + } + + response, _, err := client.Projects.UpdateProjectSettings(ctx, groupID, body) + if err != nil { + t.Fatalf("Projects.UpdateProjectSettings returned error: %v", err) + } + + expected := &ProjectSettings{ + IsCollectDatabaseSpecificsStatisticsEnabled: pointy.Bool(true), + isDataExplorerEnabled: pointy.Bool(true), + isPerformanceAdvisorEnabled: pointy.Bool(true), + isRealtimePerformancePanelEnabled: pointy.Bool(true), + isSchemaAdvisorEnabled: pointy.Bool(true), + } + + if diff := deep.Equal(response, expected); diff != nil { + t.Error(diff) + } +} diff --git a/mongodbatlas/projects.go b/mongodbatlas/projects.go index 31f636e18..ba5e95aa6 100644 --- a/mongodbatlas/projects.go +++ b/mongodbatlas/projects.go @@ -53,6 +53,8 @@ type ProjectsService interface { UpdateInvitation(context.Context, string, *Invitation) (*Invitation, *Response, error) UpdateInvitationByID(context.Context, string, string, *Invitation) (*Invitation, *Response, error) DeleteInvitation(context.Context, string, string) (*Response, error) + GetProjectSettings(context.Context, string)(*ProjectSettings, *Response, error) + UpdateProjectSettings(context.Context, string, *ProjectSettings) (*ProjectSettings, *Response, error) } // ProjectsServiceOp handles communication with the Projects related methods of the From f559fe7003f4237cd9123803455a501b1e9ee47a Mon Sep 17 00:00:00 2001 From: andreaangiolillo Date: Fri, 8 Apr 2022 14:52:44 +0100 Subject: [PATCH 2/5] lint --- mongodbatlas/project_settings.go | 11 +++---- mongodbatlas/project_settings_test.go | 43 ++++++++++++++------------- mongodbatlas/projects.go | 2 +- 3 files changed, 27 insertions(+), 29 deletions(-) diff --git a/mongodbatlas/project_settings.go b/mongodbatlas/project_settings.go index b27df7ec2..346f96d83 100644 --- a/mongodbatlas/project_settings.go +++ b/mongodbatlas/project_settings.go @@ -24,13 +24,12 @@ const projectSettingsBasePath = projectBasePath + "/%s/settings" type ProjectSettings struct { IsCollectDatabaseSpecificsStatisticsEnabled *bool `url:"isCollectDatabaseSpecificsStatisticsEnabled,omitempty"` - isDataExplorerEnabled *bool `url:"isDataExplorerEnabled,omitempty"` - isPerformanceAdvisorEnabled *bool `url:"isPerformanceAdvisorEnabled,omitempty"` - isRealtimePerformancePanelEnabled *bool `url:"isRealtimePerformancePanelEnabled,omitempty"` - isSchemaAdvisorEnabled *bool `url:"isRealtimePerformancePanelEnabled,omitempty"` + IsDataExplorerEnabled *bool `url:"IsDataExplorerEnabled,omitempty"` + IsPerformanceAdvisorEnabled *bool `url:"IsPerformanceAdvisorEnabled,omitempty"` + IsRealtimePerformancePanelEnabled *bool `url:"IsRealtimePerformancePanelEnabled,omitempty"` + IsSchemaAdvisorEnabled *bool `url:"IsRealtimePerformancePanelEnabled,omitempty"` } - // GetProjectSettings gets details about the settings for specified project. // // See more: https://www.mongodb.com/docs/atlas/reference/api/project-settings-get-one/ @@ -76,5 +75,3 @@ func (s *ProjectsServiceOp) UpdateProjectSettings(ctx context.Context, groupID s return root, resp, nil } - - diff --git a/mongodbatlas/project_settings_test.go b/mongodbatlas/project_settings_test.go index d1b019fc2..74ade0324 100644 --- a/mongodbatlas/project_settings_test.go +++ b/mongodbatlas/project_settings_test.go @@ -16,10 +16,11 @@ package mongodbatlas import ( "fmt" - "github.com/openlyinc/pointy" "net/http" "testing" + "github.com/openlyinc/pointy" + "github.com/go-test/deep" ) @@ -31,10 +32,10 @@ func TestProjects_GetProjectSettings(t *testing.T) { testMethod(t, r, http.MethodGet) _, _ = fmt.Fprint(w, `{ "isCollectDatabaseSpecificsStatisticsEnabled": true, - "isDataExplorerEnabled": true, - "isPerformanceAdvisorEnabled": true, - "isRealtimePerformancePanelEnabled": true, - "isSchemaAdvisorEnabled": true + "IsDataExplorerEnabled": true, + "IsPerformanceAdvisorEnabled": true, + "IsRealtimePerformancePanelEnabled": true, + "IsSchemaAdvisorEnabled": true }`) }) @@ -45,10 +46,10 @@ func TestProjects_GetProjectSettings(t *testing.T) { expected := &ProjectSettings{ IsCollectDatabaseSpecificsStatisticsEnabled: pointy.Bool(true), - isDataExplorerEnabled: pointy.Bool(true), - isPerformanceAdvisorEnabled: pointy.Bool(true), - isRealtimePerformancePanelEnabled: pointy.Bool(true), - isSchemaAdvisorEnabled: pointy.Bool(true), + IsDataExplorerEnabled: pointy.Bool(true), + IsPerformanceAdvisorEnabled: pointy.Bool(true), + IsRealtimePerformancePanelEnabled: pointy.Bool(true), + IsSchemaAdvisorEnabled: pointy.Bool(true), } if diff := deep.Equal(projectSettings, expected); diff != nil { @@ -64,19 +65,19 @@ func TestProjects_UpdateProjectSettings(t *testing.T) { testMethod(t, r, http.MethodPatch) _, _ = fmt.Fprint(w, `{ "isCollectDatabaseSpecificsStatisticsEnabled": true, - "isDataExplorerEnabled": true, - "isPerformanceAdvisorEnabled": true, - "isRealtimePerformancePanelEnabled": true, - "isSchemaAdvisorEnabled": true + "IsDataExplorerEnabled": true, + "IsPerformanceAdvisorEnabled": true, + "IsRealtimePerformancePanelEnabled": true, + "IsSchemaAdvisorEnabled": true }`) }) body := &ProjectSettings{ IsCollectDatabaseSpecificsStatisticsEnabled: pointy.Bool(true), - isDataExplorerEnabled: pointy.Bool(true), - isPerformanceAdvisorEnabled: pointy.Bool(true), - isRealtimePerformancePanelEnabled: pointy.Bool(true), - isSchemaAdvisorEnabled: pointy.Bool(true), + IsDataExplorerEnabled: pointy.Bool(true), + IsPerformanceAdvisorEnabled: pointy.Bool(true), + IsRealtimePerformancePanelEnabled: pointy.Bool(true), + IsSchemaAdvisorEnabled: pointy.Bool(true), } response, _, err := client.Projects.UpdateProjectSettings(ctx, groupID, body) @@ -86,10 +87,10 @@ func TestProjects_UpdateProjectSettings(t *testing.T) { expected := &ProjectSettings{ IsCollectDatabaseSpecificsStatisticsEnabled: pointy.Bool(true), - isDataExplorerEnabled: pointy.Bool(true), - isPerformanceAdvisorEnabled: pointy.Bool(true), - isRealtimePerformancePanelEnabled: pointy.Bool(true), - isSchemaAdvisorEnabled: pointy.Bool(true), + IsDataExplorerEnabled: pointy.Bool(true), + IsPerformanceAdvisorEnabled: pointy.Bool(true), + IsRealtimePerformancePanelEnabled: pointy.Bool(true), + IsSchemaAdvisorEnabled: pointy.Bool(true), } if diff := deep.Equal(response, expected); diff != nil { diff --git a/mongodbatlas/projects.go b/mongodbatlas/projects.go index ba5e95aa6..4bccaddf9 100644 --- a/mongodbatlas/projects.go +++ b/mongodbatlas/projects.go @@ -53,7 +53,7 @@ type ProjectsService interface { UpdateInvitation(context.Context, string, *Invitation) (*Invitation, *Response, error) UpdateInvitationByID(context.Context, string, string, *Invitation) (*Invitation, *Response, error) DeleteInvitation(context.Context, string, string) (*Response, error) - GetProjectSettings(context.Context, string)(*ProjectSettings, *Response, error) + GetProjectSettings(context.Context, string) (*ProjectSettings, *Response, error) UpdateProjectSettings(context.Context, string, *ProjectSettings) (*ProjectSettings, *Response, error) } From afc6ac536bb0176e4115bf05eee1e6bd2e3bd272 Mon Sep 17 00:00:00 2001 From: andreaangiolillo Date: Fri, 8 Apr 2022 14:54:34 +0100 Subject: [PATCH 3/5] goimports --- mongodbatlas/project_settings_test.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mongodbatlas/project_settings_test.go b/mongodbatlas/project_settings_test.go index 74ade0324..353fe06e9 100644 --- a/mongodbatlas/project_settings_test.go +++ b/mongodbatlas/project_settings_test.go @@ -19,9 +19,8 @@ import ( "net/http" "testing" - "github.com/openlyinc/pointy" - "github.com/go-test/deep" + "github.com/openlyinc/pointy" ) func TestProjects_GetProjectSettings(t *testing.T) { From 0568c66300aefb56f5a1d75676c0b894820dd58d Mon Sep 17 00:00:00 2001 From: andreaangiolillo Date: Fri, 8 Apr 2022 14:57:48 +0100 Subject: [PATCH 4/5] Updated json --- mongodbatlas/project_settings.go | 8 ++++---- mongodbatlas/project_settings_test.go | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/mongodbatlas/project_settings.go b/mongodbatlas/project_settings.go index 346f96d83..70f18c0cd 100644 --- a/mongodbatlas/project_settings.go +++ b/mongodbatlas/project_settings.go @@ -24,10 +24,10 @@ const projectSettingsBasePath = projectBasePath + "/%s/settings" type ProjectSettings struct { IsCollectDatabaseSpecificsStatisticsEnabled *bool `url:"isCollectDatabaseSpecificsStatisticsEnabled,omitempty"` - IsDataExplorerEnabled *bool `url:"IsDataExplorerEnabled,omitempty"` - IsPerformanceAdvisorEnabled *bool `url:"IsPerformanceAdvisorEnabled,omitempty"` - IsRealtimePerformancePanelEnabled *bool `url:"IsRealtimePerformancePanelEnabled,omitempty"` - IsSchemaAdvisorEnabled *bool `url:"IsRealtimePerformancePanelEnabled,omitempty"` + IsDataExplorerEnabled *bool `url:"isDataExplorerEnabled,omitempty"` + IsPerformanceAdvisorEnabled *bool `url:"isPerformanceAdvisorEnabled,omitempty"` + IsRealtimePerformancePanelEnabled *bool `url:"isRealtimePerformancePanelEnabled,omitempty"` + IsSchemaAdvisorEnabled *bool `url:"isRealtimePerformancePanelEnabled,omitempty"` } // GetProjectSettings gets details about the settings for specified project. diff --git a/mongodbatlas/project_settings_test.go b/mongodbatlas/project_settings_test.go index 353fe06e9..9d4daebc8 100644 --- a/mongodbatlas/project_settings_test.go +++ b/mongodbatlas/project_settings_test.go @@ -31,10 +31,10 @@ func TestProjects_GetProjectSettings(t *testing.T) { testMethod(t, r, http.MethodGet) _, _ = fmt.Fprint(w, `{ "isCollectDatabaseSpecificsStatisticsEnabled": true, - "IsDataExplorerEnabled": true, - "IsPerformanceAdvisorEnabled": true, - "IsRealtimePerformancePanelEnabled": true, - "IsSchemaAdvisorEnabled": true + "isDataExplorerEnabled": true, + "isPerformanceAdvisorEnabled": true, + "isRealtimePerformancePanelEnabled": true, + "isSchemaAdvisorEnabled": true }`) }) @@ -64,10 +64,10 @@ func TestProjects_UpdateProjectSettings(t *testing.T) { testMethod(t, r, http.MethodPatch) _, _ = fmt.Fprint(w, `{ "isCollectDatabaseSpecificsStatisticsEnabled": true, - "IsDataExplorerEnabled": true, - "IsPerformanceAdvisorEnabled": true, - "IsRealtimePerformancePanelEnabled": true, - "IsSchemaAdvisorEnabled": true + "isDataExplorerEnabled": true, + "isPerformanceAdvisorEnabled": true, + "isRealtimePerformancePanelEnabled": true, + "isSchemaAdvisorEnabled": true }`) }) From 7e463c65c439a5ededa41c38a98333cb49802e42 Mon Sep 17 00:00:00 2001 From: andreaangiolillo Date: Fri, 8 Apr 2022 15:08:15 +0100 Subject: [PATCH 5/5] addressed comments --- mongodbatlas/project_settings.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mongodbatlas/project_settings.go b/mongodbatlas/project_settings.go index 70f18c0cd..8e4dec9bd 100644 --- a/mongodbatlas/project_settings.go +++ b/mongodbatlas/project_settings.go @@ -27,7 +27,7 @@ type ProjectSettings struct { IsDataExplorerEnabled *bool `url:"isDataExplorerEnabled,omitempty"` IsPerformanceAdvisorEnabled *bool `url:"isPerformanceAdvisorEnabled,omitempty"` IsRealtimePerformancePanelEnabled *bool `url:"isRealtimePerformancePanelEnabled,omitempty"` - IsSchemaAdvisorEnabled *bool `url:"isRealtimePerformancePanelEnabled,omitempty"` + IsSchemaAdvisorEnabled *bool `url:"isSchemaAdvisorEnabled,omitempty"` } // GetProjectSettings gets details about the settings for specified project.