Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
blva committed Mar 21, 2024
1 parent 7095e5a commit a40caeb
Show file tree
Hide file tree
Showing 11 changed files with 171 additions and 22 deletions.
1 change: 1 addition & 0 deletions internal/cli/atlas/deployments/delete.go
Expand Up @@ -86,6 +86,7 @@ func (opts *DeleteOpts) runLocal(ctx context.Context) error {
}

func (opts *DeleteOpts) PostRun() error {
opts.UpdateDeploymentTelemetry()
if !opts.EnableWatch || !opts.IsAtlasDeploymentType() {
return nil
}
Expand Down
24 changes: 24 additions & 0 deletions internal/cli/atlas/deployments/delete_test.go
Expand Up @@ -159,3 +159,27 @@ func TestDeleteBuilder(t *testing.T) {
[]string{flag.TypeFlag, flag.Force, flag.EnableWatch, flag.WatchTimeout, flag.ProjectID},
)
}

func TestDelete_PostRun(t *testing.T) {
ctrl := gomock.NewController(t)
deploymentsTest := fixture.NewMockLocalDeploymentOpts(ctrl, "localDeployment")
buf := new(bytes.Buffer)

opts := &DeleteOpts{
DeploymentOpts: *deploymentsTest.Opts,
GlobalOpts: cli.GlobalOpts{
ProjectID: "64f670f0bf789926667dad1a",
},
OutputOpts: cli.OutputOpts{
OutWriter: buf,
},
DeleteOpts: cli.NewDeleteOpts(deleteSuccessMessage, deleteFailMessage),
}

deploymentsTest.MockDeploymentTelemetry.EXPECT().AppendDeploymentType().Times(1)

if err := opts.PostRun(); err != nil {
t.Fatalf("PostRun() unexpected error: %v", err)
}
t.Log(buf.String())
}
4 changes: 3 additions & 1 deletion internal/cli/atlas/deployments/list.go
Expand Up @@ -71,6 +71,7 @@ func (opts *ListOpts) Run(ctx context.Context) error {
}

func (opts *ListOpts) PostRun() error {
opts.UpdateDeploymentTelemetry()
return opts.PostRunMessages()
}

Expand All @@ -89,7 +90,8 @@ func ListBuilder() *cobra.Command {
PreRunE: func(cmd *cobra.Command, _ []string) error {
return opts.PreRunE(
opts.InitStore(cmd.Context(), cmd.OutOrStdout()),
opts.InitOutput(cmd.OutOrStdout(), listTemplate))
opts.InitOutput(cmd.OutOrStdout(), listTemplate),
)
},
RunE: func(cmd *cobra.Command, _ []string) error {
return opts.Run(cmd.Context())
Expand Down
41 changes: 41 additions & 0 deletions internal/cli/atlas/deployments/list_test.go
Expand Up @@ -24,6 +24,7 @@ import (
"github.com/golang/mock/gomock"
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/cli"
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/cli/atlas/deployments/options"
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/cli/atlas/deployments/test/fixture"
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/config"
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/flag"
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/mocks"
Expand Down Expand Up @@ -147,3 +148,43 @@ func TestListBuilder(t *testing.T) {
[]string{flag.ProjectID},
)
}

func TestList_PostRun(t *testing.T) {
ctrl := gomock.NewController(t)
buf := new(bytes.Buffer)

mockStore := mocks.NewMockClusterLister(ctrl)
mockCredentialsGetter := mocks.NewMockCredentialsGetter(ctrl)
mockProfileReader := mocks.NewMockProfileReader(ctrl)

deploymentsTest := fixture.NewMockLocalDeploymentOpts(ctrl, "localDeployment")
deploymentsTest.Opts.Config = mockProfileReader
deploymentsTest.Opts.CredStore = mockCredentialsGetter
deploymentsTest.Opts.AtlasClusterListStore = mockStore

listOpts := &ListOpts{
DeploymentOpts: *deploymentsTest.Opts,
GlobalOpts: cli.GlobalOpts{
ProjectID: "64f670f0bf789926667dad1a",
},
OutputOpts: cli.OutputOpts{
Template: listTemplate,
OutWriter: buf,
},
}

mockCredentialsGetter.
EXPECT().
AuthType().
Return(config.OAuth).
Times(1)

deploymentsTest.MockDeploymentTelemetry.
EXPECT().
AppendDeploymentType().
Times(1)

if err := listOpts.PostRun(); err != nil {
t.Fatalf("PostRun() unexpected error: %v", err)
}
}
3 changes: 0 additions & 3 deletions internal/cli/atlas/deployments/logs.go
Expand Up @@ -30,7 +30,6 @@ import (
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/flag"
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/search"
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/store"
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/telemetry"
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/usage"
"github.com/spf13/afero"
"github.com/spf13/cobra"
Expand Down Expand Up @@ -67,12 +66,10 @@ func (opts *DownloadOpts) Run(ctx context.Context) error {
}

if opts.IsLocalDeploymentType() {
telemetry.AppendOption(telemetry.WithDeploymentType(options.LocalCluster))
return opts.RunLocal(ctx)
}

if opts.IsAtlasDeploymentType() {
telemetry.AppendOption(telemetry.WithDeploymentType(options.LocalCluster))
if err := opts.validateAtlasFlags(); err != nil {
return err
}
Expand Down
2 changes: 0 additions & 2 deletions internal/cli/atlas/deployments/options/connect_opts.go
Expand Up @@ -53,15 +53,13 @@ func (opts *ConnectOpts) Connect(ctx context.Context) error {
}

if opts.IsAtlasDeploymentType() {
telemetry.AppendOption(telemetry.WithDeploymentType(AtlasCluster))
if err := opts.validateAndPromptAtlasOpts(); err != nil {
return err
}

return opts.connectToAtlas()
}

telemetry.AppendOption(telemetry.WithDeploymentType(LocalCluster))
return opts.connectToLocal(ctx)
}

Expand Down
19 changes: 9 additions & 10 deletions internal/cli/atlas/deployments/options/deployment_opts.go
Expand Up @@ -96,6 +96,7 @@ type DeploymentOpts struct {
DefaultSetter cli.DefaultSetterOpts
AtlasClusterListStore store.ClusterLister
Config setup.ProfileReader
DeploymentTelemetry DeploymentTelemetry
}

type Deployment struct {
Expand All @@ -115,6 +116,8 @@ func (opts *DeploymentOpts) InitStore(ctx context.Context, writer io.Writer) fun
return err
}
opts.DefaultSetter.OutWriter = writer
opts.DeploymentTelemetry = NewDeploymentTypeTelemetry(opts)
opts.UpdateDeploymentTelemetry()
return opts.DefaultSetter.InitStore(ctx)
}
}
Expand Down Expand Up @@ -242,19 +245,11 @@ func (opts *DeploymentOpts) ValidateAndPromptDeploymentType() error {
}

func (opts *DeploymentOpts) IsAtlasDeploymentType() bool {
if strings.EqualFold(opts.DeploymentType, AtlasCluster) {
telemetry.AppendOption(telemetry.WithDeploymentType(AtlasCluster))
return true
}
return false
return strings.EqualFold(opts.DeploymentType, AtlasCluster)
}

func (opts *DeploymentOpts) IsLocalDeploymentType() bool {
if strings.EqualFold(opts.DeploymentType, LocalCluster) {
telemetry.AppendOption(telemetry.WithDeploymentType(LocalCluster))
return true
}
return false
return strings.EqualFold(opts.DeploymentType, LocalCluster)
}

func (opts *DeploymentOpts) NoDeploymentTypeSet() bool {
Expand All @@ -264,3 +259,7 @@ func (opts *DeploymentOpts) NoDeploymentTypeSet() bool {
func (opts *DeploymentOpts) IsAuthEnabled() bool {
return opts.DBUsername != ""
}

func (opts *DeploymentOpts) UpdateDeploymentTelemetry() {
opts.DeploymentTelemetry.AppendDeploymentType()
}
@@ -0,0 +1,36 @@
// Copyright 2023 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 options

import (
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/telemetry"
)

//go:generate mockgen -destination=../../../../mocks/mock_deployment_opts_telemetry.go -package=mocks github.com/mongodb/mongodb-atlas-cli/atlascli/internal/cli/atlas/deployments/options DeploymentTelemetry
type DeploymentTelemetry interface {
AppendDeploymentType()
}

func NewDeploymentTypeTelemetry(opts *DeploymentOpts) DeploymentTelemetry {
return opts
}

func (opts *DeploymentOpts) AppendDeploymentType() {
if opts.IsLocalDeploymentType() {
telemetry.AppendOption(telemetry.WithDeploymentType(LocalCluster))
} else if opts.IsAtlasDeploymentType() {
telemetry.AppendOption(telemetry.WithDeploymentType(AtlasCluster))
}
}
1 change: 1 addition & 0 deletions internal/cli/atlas/deployments/test/fixture/deployment.go
Expand Up @@ -24,5 +24,6 @@ type MockDeploymentOpts struct {
MockCredentialsGetter *mocks.MockCredentialsGetter
MockAtlasClusterListStore *mocks.MockClusterLister
MockPodman *mocks.MockClient
MockDeploymentTelemetry *mocks.MockDeploymentTelemetry
Opts *options.DeploymentOpts
}
16 changes: 10 additions & 6 deletions internal/cli/atlas/deployments/test/fixture/deployment_local.go
Expand Up @@ -24,15 +24,19 @@ import (

func NewMockLocalDeploymentOpts(ctrl *gomock.Controller, deploymentName string) MockDeploymentOpts {
mockPodman := mocks.NewMockClient(ctrl)
return MockDeploymentOpts{
ctrl: ctrl,
MockPodman: mockPodman,
mockDeploymentTelemetry := mocks.NewMockDeploymentTelemetry(ctrl)
mockOpts := MockDeploymentOpts{
ctrl: ctrl,
MockPodman: mockPodman,
MockDeploymentTelemetry: mockDeploymentTelemetry,
Opts: &options.DeploymentOpts{
PodmanClient: mockPodman,
DeploymentName: deploymentName,
DeploymentType: "local",
PodmanClient: mockPodman,
DeploymentName: deploymentName,
DeploymentType: "local",
DeploymentTelemetry: mockDeploymentTelemetry,
},
}
return mockOpts
}

func (m *MockDeploymentOpts) LocalMockFlowWithMockContainer(ctx context.Context, mockContainer []*podman.Container) {
Expand Down
46 changes: 46 additions & 0 deletions internal/mocks/mock_deployment_opts_telemetry.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit a40caeb

Please sign in to comment.