169 lines
3.7 KiB
Go
169 lines
3.7 KiB
Go
package config
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
func Test_parseConfig(t *testing.T) {
|
|
defer StubConfig(`---
|
|
hosts:
|
|
github.com:
|
|
user: monalisa
|
|
oauth_token: OTOKEN
|
|
`, "")()
|
|
config, err := parseConfig("config.yml")
|
|
assert.NoError(t, err)
|
|
user, err := config.Get("github.com", "user")
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "monalisa", user)
|
|
token, err := config.Get("github.com", "oauth_token")
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "OTOKEN", token)
|
|
}
|
|
|
|
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")
|
|
assert.NoError(t, err)
|
|
user, err := config.Get("github.com", "user")
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "monalisa", user)
|
|
token, err := config.Get("github.com", "oauth_token")
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "OTOKEN", token)
|
|
}
|
|
|
|
func Test_parseConfig_hostsFile(t *testing.T) {
|
|
defer StubConfig("", `---
|
|
github.com:
|
|
user: monalisa
|
|
oauth_token: OTOKEN
|
|
`)()
|
|
config, err := parseConfig("config.yml")
|
|
assert.NoError(t, err)
|
|
user, err := config.Get("github.com", "user")
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "monalisa", user)
|
|
token, err := config.Get("github.com", "oauth_token")
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "OTOKEN", token)
|
|
}
|
|
|
|
func Test_parseConfig_hostFallback(t *testing.T) {
|
|
defer StubConfig(`---
|
|
git_protocol: ssh
|
|
`, `---
|
|
github.com:
|
|
user: monalisa
|
|
oauth_token: OTOKEN
|
|
example.com:
|
|
user: wronguser
|
|
oauth_token: NOTTHIS
|
|
git_protocol: https
|
|
`)()
|
|
config, err := parseConfig("config.yml")
|
|
assert.NoError(t, err)
|
|
val, err := config.Get("example.com", "git_protocol")
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "https", val)
|
|
val, err = config.Get("github.com", "git_protocol")
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "ssh", val)
|
|
val, err = config.Get("nonexistent.io", "git_protocol")
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "ssh", val)
|
|
}
|
|
|
|
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.NoError(t, err)
|
|
|
|
expectedHosts := `github.com:
|
|
user: keiyuri
|
|
oauth_token: "123456"
|
|
`
|
|
|
|
assert.Equal(t, expectedHosts, hostsBuf.String())
|
|
assert.NotContains(t, mainBuf.String(), "github.com")
|
|
assert.NotContains(t, mainBuf.String(), "oauth_token")
|
|
}
|
|
|
|
func Test_parseConfigFile(t *testing.T) {
|
|
tests := []struct {
|
|
contents string
|
|
wantsErr bool
|
|
}{
|
|
{
|
|
contents: "",
|
|
wantsErr: true,
|
|
},
|
|
{
|
|
contents: " ",
|
|
wantsErr: false,
|
|
},
|
|
{
|
|
contents: "\n",
|
|
wantsErr: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(fmt.Sprintf("contents: %q", tt.contents), func(t *testing.T) {
|
|
defer StubConfig(tt.contents, "")()
|
|
_, yamlRoot, err := parseConfigFile("config.yml")
|
|
if tt.wantsErr != (err != nil) {
|
|
t.Fatalf("got error: %v", err)
|
|
}
|
|
if tt.wantsErr {
|
|
return
|
|
}
|
|
assert.Equal(t, yaml.MappingNode, yamlRoot.Content[0].Kind)
|
|
assert.Equal(t, 0, len(yamlRoot.Content[0].Content))
|
|
})
|
|
}
|
|
}
|
|
|
|
func Test_ConfigDir(t *testing.T) {
|
|
tests := []struct {
|
|
envVar string
|
|
want string
|
|
}{
|
|
{"/tmp/gh", ".tmp.gh"},
|
|
{"", ".config.gh"},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(fmt.Sprintf("envVar: %q", tt.envVar), func(t *testing.T) {
|
|
if tt.envVar != "" {
|
|
os.Setenv(GH_CONFIG_DIR, tt.envVar)
|
|
defer os.Unsetenv(GH_CONFIG_DIR)
|
|
}
|
|
assert.Regexp(t, tt.want, ConfigDir())
|
|
})
|
|
}
|
|
}
|