123 lines
3 KiB
Go
123 lines
3 KiB
Go
package config
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"fmt"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
func eq(t *testing.T, got interface{}, expected interface{}) {
|
|
t.Helper()
|
|
if !reflect.DeepEqual(got, expected) {
|
|
t.Errorf("expected: %v, got: %v", expected, got)
|
|
}
|
|
}
|
|
|
|
func Test_parseConfig(t *testing.T) {
|
|
defer StubConfig(`---
|
|
hosts:
|
|
github.com:
|
|
user: monalisa
|
|
oauth_token: OTOKEN
|
|
`, "")()
|
|
config, err := ParseConfig("config.yml")
|
|
eq(t, err, nil)
|
|
user, err := config.Get("github.com", "user")
|
|
eq(t, err, nil)
|
|
eq(t, user, "monalisa")
|
|
token, err := config.Get("github.com", "oauth_token")
|
|
eq(t, err, nil)
|
|
eq(t, token, "OTOKEN")
|
|
}
|
|
|
|
func Test_parseConfig_multipleHosts(t *testing.T) {
|
|
defer StubConfig(`---
|
|
hosts:
|
|
example.com:
|
|
user: wronguser
|
|
oauth_token: NOTTHIS
|
|
github.com:
|
|
user: monalisa
|
|
oauth_token: OTOKEN
|
|
`, "")()
|
|
config, err := ParseConfig("config.yml")
|
|
eq(t, err, nil)
|
|
user, err := config.Get("github.com", "user")
|
|
eq(t, err, nil)
|
|
eq(t, user, "monalisa")
|
|
token, err := config.Get("github.com", "oauth_token")
|
|
eq(t, err, nil)
|
|
eq(t, token, "OTOKEN")
|
|
}
|
|
|
|
func Test_parseConfig_hostsFile(t *testing.T) {
|
|
defer StubConfig("", `---
|
|
github.com:
|
|
user: monalisa
|
|
oauth_token: OTOKEN
|
|
`)()
|
|
config, err := ParseConfig("config.yml")
|
|
eq(t, err, nil)
|
|
user, err := config.Get("github.com", "user")
|
|
eq(t, err, nil)
|
|
eq(t, user, "monalisa")
|
|
token, err := config.Get("github.com", "oauth_token")
|
|
eq(t, err, nil)
|
|
eq(t, token, "OTOKEN")
|
|
}
|
|
|
|
func Test_parseConfig_notFound(t *testing.T) {
|
|
defer StubConfig(`---
|
|
hosts:
|
|
example.com:
|
|
user: wronguser
|
|
oauth_token: NOTTHIS
|
|
`, "")()
|
|
config, err := ParseConfig("config.yml")
|
|
eq(t, err, nil)
|
|
_, err = config.Get("github.com", "user")
|
|
eq(t, err, &NotFoundError{errors.New(`could not find config entry for "github.com"`)})
|
|
}
|
|
|
|
func Test_ParseConfig_migrateConfig(t *testing.T) {
|
|
defer StubConfig(`---
|
|
github.com:
|
|
- user: keiyuri
|
|
oauth_token: 123456
|
|
`, "")()
|
|
|
|
mainBuf := bytes.Buffer{}
|
|
hostsBuf := bytes.Buffer{}
|
|
defer StubWriteConfig(&mainBuf, &hostsBuf)()
|
|
defer StubBackupConfig()()
|
|
|
|
_, err := ParseConfig("config.yml")
|
|
assert.Nil(t, err)
|
|
|
|
expectedMain := "# What protocol to use when performing git operations. Supported values: ssh, https\ngit_protocol: https\n# What editor gh should run when creating issues, pull requests, etc. If blank, will refer to environment.\neditor:\n# Aliases allow you to create nicknames for gh commands\naliases:\n co: pr checkout\n"
|
|
expectedHosts := `github.com:
|
|
user: keiyuri
|
|
oauth_token: "123456"
|
|
`
|
|
|
|
assert.Equal(t, expectedMain, mainBuf.String())
|
|
assert.Equal(t, expectedHosts, hostsBuf.String())
|
|
}
|
|
|
|
func Test_parseConfigFile(t *testing.T) {
|
|
fileContents := []string{"", " ", "\n"}
|
|
for _, contents := range fileContents {
|
|
t.Run(fmt.Sprintf("contents: %q", contents), func(t *testing.T) {
|
|
defer StubConfig(contents, "")()
|
|
_, yamlRoot, err := parseConfigFile("config.yml")
|
|
eq(t, err, nil)
|
|
eq(t, yamlRoot.Content[0].Kind, yaml.MappingNode)
|
|
eq(t, len(yamlRoot.Content[0].Content), 0)
|
|
})
|
|
}
|
|
}
|