fix: check server status before local config to improve error message (#58)
This commit is contained in:
@ -34,12 +34,6 @@ var (
|
|||||||
const MinPasswordLen = 8
|
const MinPasswordLen = 8
|
||||||
|
|
||||||
func (c *CLI) Setup(ctx context.Context, client api.SetupApi, params *SetupParams) error {
|
func (c *CLI) Setup(ctx context.Context, client api.SetupApi, params *SetupParams) error {
|
||||||
// Ensure we'll be able to write onboarding results to local config.
|
|
||||||
// Do this first so we catch any problems before modifying state on the server side.
|
|
||||||
if err := c.validateNoNameCollision(params.ConfigName); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if setup is even allowed.
|
// Check if setup is even allowed.
|
||||||
checkResp, _, err := client.GetSetup(ctx).Execute()
|
checkResp, _, err := client.GetSetup(ctx).Execute()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -49,6 +43,12 @@ func (c *CLI) Setup(ctx context.Context, client api.SetupApi, params *SetupParam
|
|||||||
return ErrAlreadySetUp
|
return ErrAlreadySetUp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ensure we'll be able to write onboarding results to local config.
|
||||||
|
// Do this so we catch any problems before modifying state on the server side.
|
||||||
|
if err := c.validateNoNameCollision(params.ConfigName); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// Initialize the server.
|
// Initialize the server.
|
||||||
setupBody, err := c.onboardingRequest(params)
|
setupBody, err := c.onboardingRequest(params)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -20,6 +20,12 @@ import (
|
|||||||
func Test_SetupConfigNameCollision(t *testing.T) {
|
func Test_SetupConfigNameCollision(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
|
client := &mock.SetupApi{
|
||||||
|
GetSetupExecuteFn: func(api.ApiGetSetupRequest) (api.InlineResponse200, *http.Response, error) {
|
||||||
|
return api.InlineResponse200{Allowed: api.PtrBool(true)}, nil, nil
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
cfg := "foo"
|
cfg := "foo"
|
||||||
configSvc := &mock.ConfigService{
|
configSvc := &mock.ConfigService{
|
||||||
ListConfigsFn: func() (config.Configs, error) {
|
ListConfigsFn: func() (config.Configs, error) {
|
||||||
@ -28,7 +34,7 @@ func Test_SetupConfigNameCollision(t *testing.T) {
|
|||||||
}
|
}
|
||||||
cli := &internal.CLI{ConfigService: configSvc}
|
cli := &internal.CLI{ConfigService: configSvc}
|
||||||
|
|
||||||
err := cli.Setup(context.Background(), &mock.SetupApi{}, &internal.SetupParams{ConfigName: cfg})
|
err := cli.Setup(context.Background(), client, &internal.SetupParams{ConfigName: cfg})
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
require.Contains(t, err.Error(), cfg)
|
require.Contains(t, err.Error(), cfg)
|
||||||
require.Contains(t, err.Error(), "already exists")
|
require.Contains(t, err.Error(), "already exists")
|
||||||
@ -37,6 +43,12 @@ func Test_SetupConfigNameCollision(t *testing.T) {
|
|||||||
func Test_SetupConfigNameRequired(t *testing.T) {
|
func Test_SetupConfigNameRequired(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
|
client := &mock.SetupApi{
|
||||||
|
GetSetupExecuteFn: func(api.ApiGetSetupRequest) (api.InlineResponse200, *http.Response, error) {
|
||||||
|
return api.InlineResponse200{Allowed: api.PtrBool(true)}, nil, nil
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
configSvc := &mock.ConfigService{
|
configSvc := &mock.ConfigService{
|
||||||
ListConfigsFn: func() (config.Configs, error) {
|
ListConfigsFn: func() (config.Configs, error) {
|
||||||
return map[string]config.Config{"foo": {}}, nil
|
return map[string]config.Config{"foo": {}}, nil
|
||||||
@ -44,7 +56,7 @@ func Test_SetupConfigNameRequired(t *testing.T) {
|
|||||||
}
|
}
|
||||||
cli := &internal.CLI{ConfigService: configSvc}
|
cli := &internal.CLI{ConfigService: configSvc}
|
||||||
|
|
||||||
err := cli.Setup(context.Background(), &mock.SetupApi{}, &internal.SetupParams{})
|
err := cli.Setup(context.Background(), client, &internal.SetupParams{})
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
require.Equal(t, internal.ErrConfigNameRequired, err)
|
require.Equal(t, internal.ErrConfigNameRequired, err)
|
||||||
}
|
}
|
||||||
@ -60,7 +72,7 @@ func Test_SetupAlreadySetup(t *testing.T) {
|
|||||||
|
|
||||||
configSvc := &mock.ConfigService{
|
configSvc := &mock.ConfigService{
|
||||||
ListConfigsFn: func() (config.Configs, error) {
|
ListConfigsFn: func() (config.Configs, error) {
|
||||||
return nil, nil
|
return map[string]config.Config{"foo": {}}, nil
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
cli := &internal.CLI{ConfigService: configSvc}
|
cli := &internal.CLI{ConfigService: configSvc}
|
||||||
|
Reference in New Issue
Block a user