k9s/internal/config/alias_test.go

141 lines
2.8 KiB
Go

// SPDX-License-Identifier: Apache-2.0
// Copyright Authors of K9s
package config_test
import (
"fmt"
"os"
"slices"
"testing"
"github.com/derailed/k9s/internal/config"
"github.com/derailed/k9s/internal/config/data"
"github.com/stretchr/testify/assert"
)
func TestAliasClear(t *testing.T) {
a := testAliases()
a.Clear()
assert.Equal(t, 0, len(a.Keys()))
}
func TestAliasKeys(t *testing.T) {
a := testAliases()
kk := a.Keys()
slices.Sort(kk)
assert.Equal(t, []string{"a1", "a11", "a2", "a3"}, kk)
}
func TestAliasShortNames(t *testing.T) {
a := testAliases()
ess := config.ShortNames{
"gvr1": []string{"a1", "a11"},
"gvr2": []string{"a2"},
"gvr3": []string{"a3"},
}
ss := a.ShortNames()
assert.Equal(t, len(ess), len(ss))
for k, v := range ss {
v1, ok := ess[k]
assert.True(t, ok, fmt.Sprintf("missing: %q", k))
slices.Sort(v)
assert.Equal(t, v1, v)
}
}
func TestAliasDefine(t *testing.T) {
type aliasDef struct {
cmd string
aliases []string
}
uu := map[string]struct {
aliases []aliasDef
registeredCommands map[string]string
}{
"simple": {
aliases: []aliasDef{
{
cmd: "one",
aliases: []string{"blee", "duh"},
},
},
registeredCommands: map[string]string{
"blee": "one",
"duh": "one",
},
},
"duplicates": {
aliases: []aliasDef{
{
cmd: "one",
aliases: []string{"blee", "duh"},
}, {
cmd: "two",
aliases: []string{"blee", "duh", "fred", "zorg"},
},
},
registeredCommands: map[string]string{
"blee": "one",
"duh": "one",
"fred": "two",
"zorg": "two",
},
},
}
for k := range uu {
u := uu[k]
t.Run(k, func(t *testing.T) {
configAlias := config.NewAliases()
for _, aliases := range u.aliases {
for _, a := range aliases.aliases {
configAlias.Define(aliases.cmd, a)
}
}
for alias, cmd := range u.registeredCommands {
v, ok := configAlias.Get(alias)
assert.True(t, ok)
assert.Equal(t, cmd, v, "Wrong command for alias "+alias)
}
})
}
}
func TestAliasesLoad(t *testing.T) {
config.AppConfigDir = "testdata/aliases"
a := config.NewAliases()
assert.Nil(t, a.Load("testdata/aliases/plain.yaml"))
assert.Equal(t, 56, len(a.Alias))
}
func TestAliasesSave(t *testing.T) {
assert.NoError(t, data.EnsureFullPath("/tmp/test-aliases", data.DefaultDirMod))
defer assert.NoError(t, os.RemoveAll("/tmp/test-aliases"))
config.AppAliasesFile = "/tmp/test-aliases/aliases.yaml"
a := testAliases()
c := len(a.Alias)
assert.Equal(t, c, len(a.Alias))
assert.Nil(t, a.Save())
assert.Nil(t, a.LoadFile("/tmp/test-aliases/aliases.yaml"))
assert.Equal(t, c, len(a.Alias))
}
// Helpers...
func testAliases() *config.Aliases {
a := config.NewAliases()
a.Alias["a1"] = "gvr1"
a.Alias["a11"] = "gvr1"
a.Alias["a2"] = "gvr2"
a.Alias["a3"] = "gvr3"
return a
}