Skip to content
This repository was archived by the owner on May 31, 2024. It is now read-only.
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions packages/cli/internal/pkg/cli/config/config_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ const (
configFileName = "config.yaml"
)

var defaultConfig = Config{Format: Format{defaultFormat}}

type Client struct {
configFilePath string
}
Expand Down Expand Up @@ -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) {
Expand Down
21 changes: 21 additions & 0 deletions packages/cli/internal/pkg/cli/config/config_client_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package config

import (
"fmt"
"io/fs"
"testing"

Expand Down Expand Up @@ -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)
}
15 changes: 12 additions & 3 deletions packages/cli/internal/pkg/cli/config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ const (
user:
email: my@email.com
format:
format: text`
name: text`
)

var (
Expand All @@ -29,6 +29,15 @@ var (
Name: "text",
},
}

expectedDefaultConfig = Config{
User{
Email: "",
},
Format{
Name: "text",
},
}
)

func TestConfig_ReadData(t *testing.T) {
Expand All @@ -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)
}
Expand All @@ -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)
}
9 changes: 4 additions & 5 deletions packages/cli/internal/pkg/cli/config/io.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,21 @@ 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
}
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
}