Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tests: don't delete my profile when testing #2795

Merged
merged 2 commits into from Mar 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 0 additions & 3 deletions internal/cli/atlas/setup/setup_cmd_test.go
Expand Up @@ -59,7 +59,6 @@ func TestBuilder(t *testing.T) {
}

func Test_setupOpts_PreRunWithAPIKeys(t *testing.T) {
t.Cleanup(test.CleanupConfig)
ctrl := gomock.NewController(t)
mockFlow := mocks.NewMockRefresher(ctrl)
ctx := context.TODO()
Expand Down Expand Up @@ -99,7 +98,6 @@ func Test_setupOpts_RunSkipRegister(t *testing.T) {
}

func TestCluster_Run(t *testing.T) {
t.Cleanup(test.CleanupConfig)
ctrl := gomock.NewController(t)
mockStore := mocks.NewMockAtlasClusterQuickStarter(ctrl)
mockFlow := mocks.NewMockRefresher(ctrl)
Expand Down Expand Up @@ -158,7 +156,6 @@ func TestCluster_Run(t *testing.T) {
}

func TestCluster_Run_CheckFlagsSet(t *testing.T) {
t.Cleanup(test.CleanupConfig)
ctrl := gomock.NewController(t)
mockStore := mocks.NewMockAtlasClusterQuickStarter(ctrl)
mockFlow := mocks.NewMockRefresher(ctrl)
Expand Down
14 changes: 8 additions & 6 deletions internal/cli/auth/login.go
Expand Up @@ -39,6 +39,8 @@ import (
type LoginConfig interface {
config.SetSaver
AccessTokenSubject() (string, error)
OrgID() string
ProjectID() string
}

var (
Expand Down Expand Up @@ -137,11 +139,11 @@ func (opts *LoginOpts) checkProfile(ctx context.Context) error {
if err := opts.InitStore(ctx); err != nil {
return err
}
if config.OrgID() != "" && !opts.OrgExists(config.OrgID()) {
if opts.config.OrgID() != "" && !opts.OrgExists(opts.config.OrgID()) {
opts.config.Set("org_id", "")
}

if config.ProjectID() != "" && !opts.ProjectExists(config.ProjectID()) {
if opts.config.ProjectID() != "" && !opts.ProjectExists(opts.config.ProjectID()) {
opts.config.Set("project_id", "")
}
return nil
Expand All @@ -158,15 +160,15 @@ func (opts *LoginOpts) setUpProfile(ctx context.Context) error {
}
}

if config.OrgID() == "" || !opts.OrgExists(config.OrgID()) {
if opts.config.OrgID() == "" || !opts.OrgExists(opts.config.OrgID()) {
if err := opts.AskOrg(); err != nil {
return err
}
}

opts.SetUpOrg()

if config.ProjectID() == "" || !opts.ProjectExists(config.ProjectID()) {
if opts.config.ProjectID() == "" || !opts.ProjectExists(opts.config.ProjectID()) {
if err := opts.AskProject(); err != nil {
return err
}
Expand All @@ -175,11 +177,11 @@ func (opts *LoginOpts) setUpProfile(ctx context.Context) error {

// Only make references to profile if user was asked about org or projects
if opts.AskedOrgsOrProjects && opts.ProjectID != "" && opts.OrgID != "" {
if !opts.ProjectExists(config.ProjectID()) {
if !opts.ProjectExists(opts.config.ProjectID()) {
return ErrProjectIDNotFound
}

if !opts.OrgExists(config.OrgID()) {
if !opts.OrgExists(opts.config.OrgID()) {
return ErrOrgIDNotFound
}

Expand Down
2 changes: 2 additions & 0 deletions internal/cli/auth/login_test.go
Expand Up @@ -133,6 +133,8 @@ func Test_loginOpts_Run(t *testing.T) {
mockConfig.EXPECT().Set("access_token", "asdf").Times(1)
mockConfig.EXPECT().Set("refresh_token", "querty").Times(1)
mockConfig.EXPECT().Set("ops_manager_url", gomock.Any()).Times(0)
mockConfig.EXPECT().OrgID().Return("").AnyTimes()
mockConfig.EXPECT().ProjectID().Return("").AnyTimes()
mockConfig.EXPECT().AccessTokenSubject().Return("test@10gen.com", nil).Times(1)
mockConfig.EXPECT().Save().Return(nil).Times(2)
expectedOrgs := &admin.PaginatedOrganization{
Expand Down
38 changes: 21 additions & 17 deletions internal/cli/auth/logout.go
Expand Up @@ -16,7 +16,6 @@ package auth

import (
"context"
"fmt"
"io"

"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/cli"
Expand All @@ -29,24 +28,29 @@ import (
atlas "go.mongodb.org/atlas/mongodbatlas"
)

type logoutOpts struct {
*cli.DeleteOpts
OutWriter io.Writer
config ConfigDeleter
flow Revoker
keepConfig bool
}

//go:generate mockgen -destination=../../mocks/mock_logout.go -package=mocks github.com/mongodb/mongodb-atlas-cli/atlascli/internal/cli/auth Revoker,ConfigDeleter

type ConfigDeleter interface {
Delete() error
SetAccessToken(string)
SetRefreshToken(string)
SetProjectID(string)
SetOrgID(string)
Save() error
}

type Revoker interface {
RevokeToken(context.Context, string, string) (*atlas.Response, error)
}

type logoutOpts struct {
*cli.DeleteOpts
OutWriter io.Writer
config ConfigDeleter
flow Revoker
keepConfig bool
}

func (opts *logoutOpts) initFlow() error {
var err error
opts.flow, err = oauth.FlowWithConfig(config.Default())
Expand All @@ -62,11 +66,11 @@ func (opts *logoutOpts) Run(ctx context.Context) error {
if !opts.keepConfig {
return opts.Delete(opts.config.Delete)
}
config.SetAccessToken("")
config.SetRefreshToken("")
config.SetProjectID("")
config.SetOrgID("")
return config.Save()
opts.config.SetAccessToken("")
opts.config.SetRefreshToken("")
opts.config.SetProjectID("")
opts.config.SetOrgID("")
return opts.config.Save()
}

func LogoutBuilder() *cobra.Command {
Expand All @@ -77,9 +81,9 @@ func LogoutBuilder() *cobra.Command {
cmd := &cobra.Command{
Use: "logout",
Short: "Log out of the CLI.",
Example: fmt.Sprintf(` # To log out from the CLI:
%s auth logout
`, config.BinName()),
Example: ` # To log out from the CLI:
atlas auth logout
`,
PreRunE: func(cmd *cobra.Command, _ []string) error {
opts.OutWriter = cmd.OutOrStdout()
opts.config = config.Default()
Expand Down
22 changes: 22 additions & 0 deletions internal/cli/auth/logout_test.go
Expand Up @@ -90,5 +90,27 @@ func Test_logoutOpts_Run_Keep(t *testing.T) {
Return(nil, nil).
Times(1)

mockConfig.
EXPECT().
SetAccessToken("").
Times(1)
mockConfig.
EXPECT().
SetRefreshToken("").
Times(1)
mockConfig.
EXPECT().
SetProjectID("").
Times(1)
mockConfig.
EXPECT().
SetOrgID("").
Times(1)
mockConfig.
EXPECT().
Save().
Return(nil).
Times(1)

require.NoError(t, opts.Run(ctx))
}
6 changes: 3 additions & 3 deletions internal/cli/auth/register.go
Expand Up @@ -99,9 +99,9 @@ func RegisterBuilder() *cobra.Command {
cmd := &cobra.Command{
Use: "register",
Short: "Register with MongoDB Atlas.",
Example: fmt.Sprintf(` # To start the interactive setup:
%s auth register
`, config.BinName()),
Example: ` # To start the interactive setup:
atlas auth register
`,
PreRunE: func(cmd *cobra.Command, _ []string) error {
opts.OutWriter = cmd.OutOrStdout()
defaultProfile := config.Default()
Expand Down
15 changes: 12 additions & 3 deletions internal/cli/auth/register_test.go
Expand Up @@ -43,7 +43,6 @@ func TestRegisterBuilder(t *testing.T) {
}

func Test_registerOpts_Run(t *testing.T) {
t.Cleanup(test.CleanupConfig)
ctrl := gomock.NewController(t)
mockFlow := mocks.NewMockRefresher(ctrl)
mockConfig := mocks.NewMockLoginConfig(ctrl)
Expand Down Expand Up @@ -96,6 +95,8 @@ func Test_registerOpts_Run(t *testing.T) {
mockConfig.EXPECT().Set("access_token", "asdf").Times(1)
mockConfig.EXPECT().Set("refresh_token", "querty").Times(1)
mockConfig.EXPECT().Set("ops_manager_url", gomock.Any()).Times(0)
mockConfig.EXPECT().OrgID().Return("").AnyTimes()
mockConfig.EXPECT().ProjectID().Return("").AnyTimes()
mockConfig.EXPECT().AccessTokenSubject().Return("test@10gen.com", nil).Times(1)
mockConfig.EXPECT().Save().Return(nil).Times(2)
expectedOrgs := &admin.PaginatedOrganization{
Expand All @@ -104,13 +105,21 @@ func Test_registerOpts_Run(t *testing.T) {
{Id: pointer.Get("o1"), Name: "Org1"},
},
}
mockStore.EXPECT().Organizations(gomock.Any()).Return(expectedOrgs, nil).Times(1)
mockStore.
EXPECT().
Organizations(gomock.Any()).
Return(expectedOrgs, nil).
Times(1)
expectedProjects := &admin.PaginatedAtlasGroup{TotalCount: pointer.Get(1),
Results: &[]admin.Group{
{Id: pointer.Get("p1"), Name: "Project1"},
},
}
mockStore.EXPECT().GetOrgProjects("o1", gomock.Any()).Return(expectedProjects, nil).Times(1)
mockStore.
EXPECT().
GetOrgProjects("o1", gomock.Any()).
Return(expectedProjects, nil).
Times(1)

require.NoError(t, opts.RegisterRun(ctx))
assert.Equal(t, `
Expand Down