diff --git a/packages/cli/internal/pkg/cli/config/config_client.go b/packages/cli/internal/pkg/cli/config/config_client.go index 109eeaa7..a8dae681 100644 --- a/packages/cli/internal/pkg/cli/config/config_client.go +++ b/packages/cli/internal/pkg/cli/config/config_client.go @@ -16,6 +16,8 @@ const ( configFileName = "config.yaml" ) +var defaultConfig = Config{Format: Format{defaultFormat}} + type Client struct { configFilePath string } @@ -68,22 +70,21 @@ func userIdFromEmailAddress(emailAddress string) string { sanitizedUserName := sanitizeUserName(userName) return sanitizedUserName + hash(emailAddress) } - func (c Client) Read() (Config, error) { return c.loadFromFile() } func (c Client) loadFromFile() (Config, error) { - configData, err := fromYaml(c.configFilePath) + configData, err := configFromYaml(c.configFilePath, defaultConfig) if err != nil { - return Config{}, err + return defaultConfig, err } configData.User.Id = userIdFromEmailAddress(configData.User.Email) return configData, nil } func (c Client) storeToFile(config Config) error { - return toYaml(c.configFilePath, config) + return configToYaml(c.configFilePath, config) } func (c Client) GetUserEmailAddress() (string, error) { diff --git a/packages/cli/internal/pkg/cli/config/config_client_test.go b/packages/cli/internal/pkg/cli/config/config_client_test.go index 9f9db0e4..54ff861c 100644 --- a/packages/cli/internal/pkg/cli/config/config_client_test.go +++ b/packages/cli/internal/pkg/cli/config/config_client_test.go @@ -1,6 +1,7 @@ package config import ( + "fmt" "io/fs" "testing" @@ -98,3 +99,23 @@ func TestSetFormat(t *testing.T) { err := client.SetFormat(defaultFormat) require.NoError(t, err) } + +func TestLoadFromFile(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + mockFileReader := iomocks.NewMockFileReader(ctrl) + mockErr := fmt.Errorf("unable to read from file") + mockFileReader.EXPECT().ReadFile(testFileName).Return(nil, mockErr) + + origReadFile := readFile + readFile = mockFileReader.ReadFile + defer func() { readFile = origReadFile }() + + var client = Client{ + configFilePath: testFileName, + } + configData, err := client.loadFromFile() + require.Error(t, err) + assert.Equal(t, configData, expectedDefaultConfig) +} diff --git a/packages/cli/internal/pkg/cli/config/config_test.go b/packages/cli/internal/pkg/cli/config/config_test.go index 4ed983b7..cb4c6e5b 100644 --- a/packages/cli/internal/pkg/cli/config/config_test.go +++ b/packages/cli/internal/pkg/cli/config/config_test.go @@ -17,7 +17,7 @@ const ( user: email: my@email.com format: - format: text` + name: text` ) var ( @@ -29,6 +29,15 @@ var ( Name: "text", }, } + + expectedDefaultConfig = Config{ + User{ + Email: "", + }, + Format{ + Name: "text", + }, + } ) func TestConfig_ReadData(t *testing.T) { @@ -42,7 +51,7 @@ func TestConfig_ReadData(t *testing.T) { readFile = mockFileReader.ReadFile defer func() { readFile = origReadFile }() - configData, err := fromYaml(testFileName) + configData, err := configFromYaml(testFileName, defaultConfig) require.NoError(t, err) assert.Equal(t, expectedConfig, configData) } @@ -59,6 +68,6 @@ func TestConfig_WriteData(t *testing.T) { writeFile = mockFileWriter.WriteFile defer func() { writeFile = origWriteFile }() - err := toYaml(testFileName, expectedConfig) + err := configToYaml(testFileName, expectedConfig) require.NoError(t, err) } diff --git a/packages/cli/internal/pkg/cli/config/io.go b/packages/cli/internal/pkg/cli/config/io.go index 233874a9..231b45c7 100644 --- a/packages/cli/internal/pkg/cli/config/io.go +++ b/packages/cli/internal/pkg/cli/config/io.go @@ -15,7 +15,7 @@ const ( defaultFormat = "text" ) -func toYaml(filePath string, configData Config) error { +func configToYaml(filePath string, configData Config) error { bytes, err := yaml.Marshal(configData) if err != nil { return err @@ -23,14 +23,13 @@ func toYaml(filePath string, configData Config) error { return writeFile(filePath, bytes, 0644) } -func fromYaml(filePath string) (Config, error) { - configData := Config{Format: Format{defaultFormat}} +func configFromYaml(filePath string, configData Config) (Config, error) { bytes, err := readFile(filePath) if err != nil { - return configData, err + return Config{}, err } if err := yaml.Unmarshal(bytes, &configData); err != nil { - return configData, err + return Config{}, err } return configData, nil }