From 71f32376d09d1d8330c72dec2e15982797232bce Mon Sep 17 00:00:00 2001 From: Mark Phelps Date: Tue, 22 Feb 2022 20:20:52 -0500 Subject: [PATCH] Fix tests --- pkg/cmd/codespace/create.go | 52 +++++++++++++++----------------- pkg/cmd/codespace/create_test.go | 10 +++--- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/pkg/cmd/codespace/create.go b/pkg/cmd/codespace/create.go index 20952bb6d..3f2ee0c35 100644 --- a/pkg/cmd/codespace/create.go +++ b/pkg/cmd/codespace/create.go @@ -112,15 +112,17 @@ func (a *App) Create(ctx context.Context, opts createOptions) error { return errors.New("there are no available machine types for this repository") } - a.StartProgressIndicatorWithLabel("Creating codespace") - codespace, err := a.apiClient.CreateCodespace(ctx, &api.CreateCodespaceParams{ + createParams := &api.CreateCodespaceParams{ RepositoryID: repository.ID, Branch: branch, Machine: machine, Location: locationResult.Location, IdleTimeoutMinutes: int(opts.idleTimeout.Minutes()), PermissionsOptOut: opts.permissionsOptOut, - }) + } + + a.StartProgressIndicatorWithLabel("Creating codespace") + codespace, err := a.apiClient.CreateCodespace(ctx, createParams) a.StopProgressIndicator() if err != nil { @@ -129,27 +131,11 @@ func (a *App) Create(ctx context.Context, opts createOptions) error { return fmt.Errorf("error creating codespace: %w", err) } - if err := a.handleAdditionalPermissions(ctx, aerr.AllowPermissionsURL); err != nil { + codespace, err = a.handleAdditionalPermissions(ctx, createParams, aerr.AllowPermissionsURL) + if err != nil { // this error could be a cmdutil.SilentError (in the case that the user opened the browser) so we don't want to wrap it return err } - - // if the user chose to create the codespace without the permissions, - // we can continue with the create opting out of the additional permissions - a.StartProgressIndicatorWithLabel("Creating codespace") - codespace, err = a.apiClient.CreateCodespace(ctx, &api.CreateCodespaceParams{ - RepositoryID: repository.ID, - Branch: branch, - Machine: machine, - Location: locationResult.Location, - IdleTimeoutMinutes: int(opts.idleTimeout.Minutes()), - PermissionsOptOut: true, - }) - a.StopProgressIndicator() - - if err != nil { - return fmt.Errorf("error creating codespace: %w", err) - } } if opts.showStatus { @@ -162,7 +148,7 @@ func (a *App) Create(ctx context.Context, opts createOptions) error { return nil } -func (a *App) handleAdditionalPermissions(ctx context.Context, allowPermissionsURL string) error { +func (a *App) handleAdditionalPermissions(ctx context.Context, createParams *api.CreateCodespaceParams, allowPermissionsURL string) (*api.Codespace, error) { var ( isInteractive = a.io.CanPrompt() cs = a.io.ColorScheme() @@ -174,7 +160,7 @@ func (a *App) handleAdditionalPermissions(ctx context.Context, allowPermissionsU if !isInteractive { fmt.Fprintf(a.io.ErrOut, "%s to continue in your web browser to accept: %s\n", cs.Bold("Open this URL"), displayURL) fmt.Fprintf(a.io.ErrOut, "Alternatively, you can run %q with the %q option to create the codespace without these additional permissions.\n", a.io.ColorScheme().Bold("create"), cs.Bold("--default-permissions")) - return nil + return nil, cmdutil.SilentError } choices := []string{ @@ -199,20 +185,32 @@ func (a *App) handleAdditionalPermissions(ctx context.Context, allowPermissionsU } if err := ask(permsSurvey, &answers); err != nil { - return fmt.Errorf("error getting answers: %w", err) + return nil, fmt.Errorf("error getting answers: %w", err) } // if the user chose to continue in the browser, open the URL if answers.Accept == choices[0] { if err := a.browser.Browse(allowPermissionsURL); err != nil { - return fmt.Errorf("error opening browser: %w", err) + return nil, fmt.Errorf("error opening browser: %w", err) } // browser opened successfully but we do not know if they accepted the permissions // so we must exit and wait for the user to attempt the create again - return cmdutil.SilentError + return nil, cmdutil.SilentError } - return nil + // if the user chose to create the codespace without the permissions, + // we can continue with the create opting out of the additional permissions + createParams.PermissionsOptOut = true + + a.StartProgressIndicatorWithLabel("Creating codespace") + codespace, err := a.apiClient.CreateCodespace(ctx, createParams) + a.StopProgressIndicator() + + if err != nil { + return nil, fmt.Errorf("error creating codespace: %w", err) + } + + return codespace, nil } // showStatus polls the codespace for a list of post create states and their status. It will keep polling diff --git a/pkg/cmd/codespace/create_test.go b/pkg/cmd/codespace/create_test.go index 795552284..376f8c9eb 100644 --- a/pkg/cmd/codespace/create_test.go +++ b/pkg/cmd/codespace/create_test.go @@ -7,6 +7,7 @@ import ( "time" "github.com/cli/cli/v2/internal/codespaces/api" + "github.com/cli/cli/v2/pkg/cmdutil" "github.com/cli/cli/v2/pkg/iostreams" ) @@ -18,7 +19,7 @@ func TestApp_Create(t *testing.T) { name string fields fields opts createOptions - wantErr bool + wantErr error wantStdout string wantStderr string }{ @@ -114,9 +115,10 @@ func TestApp_Create(t *testing.T) { showStatus: false, idleTimeout: 30 * time.Minute, }, - wantStdout: `You must accept or deny additional permissions requested by the repository before you can create a codespace. + wantErr: cmdutil.SilentError, + wantStderr: `You must accept or deny additional permissions requested by the repository before you can create a codespace. Open this URL to continue in your web browser to accept: example.com/permissions -Alternatively, you can run "create" with the "--skip-permissions" option to create the codespace without these additional permissions. +Alternatively, you can run "create" with the "--default-permissions" option to create the codespace without these additional permissions. `, }, } @@ -127,7 +129,7 @@ Alternatively, you can run "create" with the "--skip-permissions" option to crea io: io, apiClient: tt.fields.apiClient, } - if err := a.Create(context.Background(), tt.opts); (err != nil) != tt.wantErr { + if err := a.Create(context.Background(), tt.opts); err != tt.wantErr { t.Errorf("App.Create() error = %v, wantErr %v", err, tt.wantErr) } if got := stdout.String(); got != tt.wantStdout {