111 lines
2.7 KiB
Go
111 lines
2.7 KiB
Go
package config
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
ghConfig "github.com/cli/go-gh/v2/pkg/config"
|
|
)
|
|
|
|
func NewBlankConfig() *ConfigMock {
|
|
return NewFromString(defaultConfigStr)
|
|
}
|
|
|
|
func NewFromString(cfgStr string) *ConfigMock {
|
|
c := ghConfig.ReadFromString(cfgStr)
|
|
cfg := cfg{c}
|
|
mock := &ConfigMock{}
|
|
mock.GetOrDefaultFunc = func(host, key string) (string, error) {
|
|
return cfg.GetOrDefault(host, key)
|
|
}
|
|
mock.SetFunc = func(host, key, value string) {
|
|
cfg.Set(host, key, value)
|
|
}
|
|
mock.WriteFunc = func() error {
|
|
return cfg.Write()
|
|
}
|
|
mock.AliasesFunc = func() *AliasConfig {
|
|
return &AliasConfig{cfg: c}
|
|
}
|
|
mock.AuthenticationFunc = func() *AuthConfig {
|
|
return &AuthConfig{
|
|
cfg: c,
|
|
defaultHostOverride: func() (string, string) {
|
|
return "github.com", "default"
|
|
},
|
|
hostsOverride: func() []string {
|
|
keys, _ := c.Keys([]string{hostsKey})
|
|
return keys
|
|
},
|
|
tokenOverride: func(hostname string) (string, string) {
|
|
token, _ := c.Get([]string{hostsKey, hostname, oauthTokenKey})
|
|
return token, oauthTokenKey
|
|
},
|
|
}
|
|
}
|
|
mock.BrowserFunc = func(hostname string) string {
|
|
val, _ := cfg.GetOrDefault(hostname, browserKey)
|
|
return val
|
|
}
|
|
mock.EditorFunc = func(hostname string) string {
|
|
val, _ := cfg.GetOrDefault(hostname, editorKey)
|
|
return val
|
|
}
|
|
mock.GitProtocolFunc = func(hostname string) string {
|
|
val, _ := cfg.GetOrDefault(hostname, gitProtocolKey)
|
|
return val
|
|
}
|
|
mock.HTTPUnixSocketFunc = func(hostname string) string {
|
|
val, _ := cfg.GetOrDefault(hostname, httpUnixSocketKey)
|
|
return val
|
|
}
|
|
mock.PagerFunc = func(hostname string) string {
|
|
val, _ := cfg.GetOrDefault(hostname, pagerKey)
|
|
return val
|
|
}
|
|
mock.PromptFunc = func(hostname string) string {
|
|
val, _ := cfg.GetOrDefault(hostname, promptKey)
|
|
return val
|
|
}
|
|
return mock
|
|
}
|
|
|
|
// StubWriteConfig stubs out the filesystem where config file are written.
|
|
// It then returns a function that will read in the config files into io.Writers.
|
|
// It automatically cleans up environment variables and written files.
|
|
func StubWriteConfig(t *testing.T) func(io.Writer, io.Writer) {
|
|
t.Helper()
|
|
tempDir := t.TempDir()
|
|
t.Setenv("GH_CONFIG_DIR", tempDir)
|
|
return func(wc io.Writer, wh io.Writer) {
|
|
config, err := os.Open(filepath.Join(tempDir, "config.yml"))
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer config.Close()
|
|
configData, err := io.ReadAll(config)
|
|
if err != nil {
|
|
return
|
|
}
|
|
_, err = wc.Write(configData)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
hosts, err := os.Open(filepath.Join(tempDir, "hosts.yml"))
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer hosts.Close()
|
|
hostsData, err := io.ReadAll(hosts)
|
|
if err != nil {
|
|
return
|
|
}
|
|
_, err = wh.Write(hostsData)
|
|
if err != nil {
|
|
return
|
|
}
|
|
}
|
|
}
|