177 lines
3.7 KiB
Go
177 lines
3.7 KiB
Go
package config
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
|
|
"github.com/cli/cli/internal/config"
|
|
"github.com/cli/cli/pkg/cmdutil"
|
|
"github.com/cli/cli/pkg/iostreams"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
type configStub map[string]string
|
|
|
|
func genKey(host, key string) string {
|
|
if host != "" {
|
|
return host + ":" + key
|
|
}
|
|
return key
|
|
}
|
|
|
|
func (c configStub) Get(host, key string) (string, error) {
|
|
val, _, err := c.GetWithSource(host, key)
|
|
return val, err
|
|
}
|
|
|
|
func (c configStub) GetWithSource(host, key string) (string, string, error) {
|
|
if v, found := c[genKey(host, key)]; found {
|
|
return v, "(memory)", nil
|
|
}
|
|
return "", "", errors.New("not found")
|
|
}
|
|
|
|
func (c configStub) Set(host, key, value string) error {
|
|
c[genKey(host, key)] = value
|
|
return nil
|
|
}
|
|
|
|
func (c configStub) Aliases() (*config.AliasConfig, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
func (c configStub) Hosts() ([]string, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
func (c configStub) UnsetHost(hostname string) {
|
|
}
|
|
|
|
func (c configStub) CheckWriteable(host, key string) error {
|
|
return nil
|
|
}
|
|
|
|
func (c configStub) Write() error {
|
|
c["_written"] = "true"
|
|
return nil
|
|
}
|
|
|
|
func TestConfigGet(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
config configStub
|
|
args []string
|
|
stdout string
|
|
stderr string
|
|
}{
|
|
{
|
|
name: "get key",
|
|
config: configStub{
|
|
"editor": "ed",
|
|
},
|
|
args: []string{"editor"},
|
|
stdout: "ed\n",
|
|
stderr: "",
|
|
},
|
|
{
|
|
name: "get key scoped by host",
|
|
config: configStub{
|
|
"editor": "ed",
|
|
"github.com:editor": "vim",
|
|
},
|
|
args: []string{"editor", "-h", "github.com"},
|
|
stdout: "vim\n",
|
|
stderr: "",
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
io, _, stdout, stderr := iostreams.Test()
|
|
f := &cmdutil.Factory{
|
|
IOStreams: io,
|
|
Config: func() (config.Config, error) {
|
|
return tt.config, nil
|
|
},
|
|
}
|
|
|
|
cmd := NewCmdConfigGet(f)
|
|
cmd.Flags().BoolP("help", "x", false, "")
|
|
cmd.SetArgs(tt.args)
|
|
cmd.SetOut(stdout)
|
|
cmd.SetErr(stderr)
|
|
|
|
_, err := cmd.ExecuteC()
|
|
require.NoError(t, err)
|
|
|
|
assert.Equal(t, tt.stdout, stdout.String())
|
|
assert.Equal(t, tt.stderr, stderr.String())
|
|
assert.Equal(t, "", tt.config["_written"])
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestConfigSet(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
config configStub
|
|
args []string
|
|
expectKey string
|
|
expectVal string
|
|
stdout string
|
|
stderr string
|
|
}{
|
|
{
|
|
name: "set key",
|
|
config: configStub{},
|
|
args: []string{"editor", "vim"},
|
|
expectKey: "editor",
|
|
expectVal: "vim",
|
|
stdout: "",
|
|
stderr: "",
|
|
},
|
|
{
|
|
name: "set key scoped by host",
|
|
config: configStub{},
|
|
args: []string{"editor", "vim", "-h", "github.com"},
|
|
expectKey: "github.com:editor",
|
|
expectVal: "vim",
|
|
stdout: "",
|
|
stderr: "",
|
|
},
|
|
{
|
|
name: "set key",
|
|
config: configStub{},
|
|
args: []string{"unknownKey", "someValue"},
|
|
expectKey: "unknownKey",
|
|
expectVal: "someValue",
|
|
stdout: "",
|
|
stderr: "! warning: 'unknownKey' is not a known configuration key\n",
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
io, _, stdout, stderr := iostreams.Test()
|
|
f := &cmdutil.Factory{
|
|
IOStreams: io,
|
|
Config: func() (config.Config, error) {
|
|
return tt.config, nil
|
|
},
|
|
}
|
|
|
|
cmd := NewCmdConfigSet(f)
|
|
cmd.Flags().BoolP("help", "x", false, "")
|
|
cmd.SetArgs(tt.args)
|
|
cmd.SetOut(stdout)
|
|
cmd.SetErr(stderr)
|
|
|
|
_, err := cmd.ExecuteC()
|
|
require.NoError(t, err)
|
|
|
|
assert.Equal(t, tt.stdout, stdout.String())
|
|
assert.Equal(t, tt.stderr, stderr.String())
|
|
assert.Equal(t, tt.expectVal, tt.config[tt.expectKey])
|
|
assert.Equal(t, "true", tt.config["_written"])
|
|
})
|
|
}
|
|
}
|