k9s/internal/view/cmd/args_test.go

237 lines
4.4 KiB
Go

// SPDX-License-Identifier: Apache-2.0
// Copyright Authors of K9s
package cmd
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestFlagsNew(t *testing.T) {
uu := map[string]struct {
i *Interpreter
aa []string
ll args
}{
"empty": {
i: NewInterpreter("po"),
ll: make(args),
},
"ns": {
i: NewInterpreter("po"),
aa: []string{"ns1"},
ll: args{nsKey: "ns1"},
},
"ns+spaces": {
i: NewInterpreter("po"),
aa: []string{" ns1 "},
ll: args{nsKey: "ns1"},
},
"filter": {
i: NewInterpreter("po"),
aa: []string{"/fred"},
ll: args{filterKey: "fred"},
},
"inverse-filter": {
i: NewInterpreter("po"),
aa: []string{"/!fred"},
ll: args{filterKey: "!fred"},
},
"fuzzy-filter": {
i: NewInterpreter("po"),
aa: []string{"-f", "fred"},
ll: args{fuzzyKey: "fred"},
},
"fuzzy-filter-nospace": {
i: NewInterpreter("po"),
aa: []string{"-ffred"},
ll: args{fuzzyKey: "fred"},
},
"filter+ns": {
i: NewInterpreter("po"),
aa: []string{"/fred", " ns1 "},
ll: args{nsKey: "ns1", filterKey: "fred"},
},
"label": {
i: NewInterpreter("po"),
aa: []string{"app=fred"},
ll: args{labelKey: "app=fred"},
},
"label-toast": {
i: NewInterpreter("po"),
aa: []string{"="},
ll: make(args),
},
"multi-labels": {
i: NewInterpreter("po"),
aa: []string{"app=fred,blee=duh"},
ll: args{labelKey: "app=fred,blee=duh"},
},
"label+ns": {
i: NewInterpreter("po"),
aa: []string{"a=b,c=d", " ns1 "},
ll: args{labelKey: "a=b,c=d", nsKey: "ns1"},
},
"full-monty": {
i: NewInterpreter("po"),
aa: []string{"app=fred", "ns1", "-f", "blee", "/zorg"},
ll: args{
filterKey: "zorg",
fuzzyKey: "blee",
labelKey: "app=fred",
nsKey: "ns1",
},
},
"full-monty+ctx": {
i: NewInterpreter("po"),
aa: []string{"app=fred", "ns1", "-f", "blee", "/zorg", "@ctx1"},
ll: args{
filterKey: "zorg",
fuzzyKey: "blee",
labelKey: "app=fred",
nsKey: "ns1",
contextKey: "ctx1",
},
},
"full-monty+ctx-with-space": {
i: NewInterpreter("po"),
aa: []string{"app=fred", "ns1", "-f", "blee", "/zorg", "@zorg fred"},
ll: args{
filterKey: "zorg",
fuzzyKey: "blee",
labelKey: "app=fred",
nsKey: "ns1",
contextKey: "zorg fred",
},
},
"full-monty+ctx-first": {
i: NewInterpreter("po"),
aa: []string{"@ctx1", "app=fred", "ns1", "-f", "blee", "/zorg"},
ll: args{
filterKey: "zorg",
fuzzyKey: "blee",
labelKey: "app=fred",
nsKey: "ns1",
contextKey: "ctx1",
},
},
"full-monty+ctx-with-space-middle": {
i: NewInterpreter("po"),
aa: []string{"app=fred", "@ctx1", "ns1", "-f", "blee", "/zorg"},
ll: args{
filterKey: "zorg",
fuzzyKey: "blee",
labelKey: "app=fred",
nsKey: "ns1",
contextKey: "ctx1",
},
},
"caps": {
i: NewInterpreter("po"),
aa: []string{"app=fred", "ns1", "-f", "blee", "/zorg", "@Dev"},
ll: args{
filterKey: "zorg",
fuzzyKey: "blee",
labelKey: "app=fred",
nsKey: "ns1",
contextKey: "Dev",
},
},
"ctx": {
i: NewInterpreter("ctx"),
aa: []string{"Dev"},
ll: args{contextKey: "Dev"},
},
"toast": {
i: NewInterpreter("apply -f"),
ll: args{},
},
}
for k := range uu {
u := uu[k]
t.Run(k, func(t *testing.T) {
l := newArgs(u.i, u.aa)
assert.Equal(t, u.ll, l)
})
}
}
func TestFlagsHasFilters(t *testing.T) {
uu := map[string]struct {
i *Interpreter
aa []string
ok bool
}{
"empty": {},
"ns": {
i: NewInterpreter("po"),
aa: []string{"ns1"},
},
"filter": {
i: NewInterpreter("po"),
aa: []string{"/fred"},
ok: true,
},
"inverse-filter": {
i: NewInterpreter("po"),
aa: []string{"/!fred"},
ok: true,
},
"fuzzy-filter": {
i: NewInterpreter("po"),
aa: []string{"-f", "fred"},
ok: true,
},
"filter+ns": {
i: NewInterpreter("po"),
aa: []string{"/fred", "ns1"},
ok: true,
},
"label": {
i: NewInterpreter("po"),
aa: []string{"app=fred"},
ok: true,
},
"multi-labels": {
i: NewInterpreter("po"),
aa: []string{"app=fred,blee=duh"},
ok: true,
},
"label+ns": {
i: NewInterpreter("po"),
aa: []string{"app=fred", "ns1"},
ok: true,
},
}
for k := range uu {
u := uu[k]
t.Run(k, func(t *testing.T) {
l := newArgs(u.i, u.aa)
assert.Equal(t, u.ok, l.hasFilters())
})
}
}