141 lines
3.2 KiB
Go
141 lines
3.2 KiB
Go
package resource_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/derailed/k9s/internal/k8s"
|
|
"github.com/derailed/k9s/internal/resource"
|
|
m "github.com/petergtz/pegomock"
|
|
"github.com/stretchr/testify/assert"
|
|
"k8s.io/cli-runtime/pkg/genericclioptions"
|
|
api "k8s.io/client-go/tools/clientcmd/api"
|
|
)
|
|
|
|
func NewContextListWithArgs(ns string, ctx *resource.Context) resource.List {
|
|
return resource.NewList(resource.NotNamespaced, "ctx", ctx, resource.SwitchAccess)
|
|
}
|
|
|
|
func NewContextWithArgs(c k8s.Connection, s resource.SwitchableCruder) *resource.Context {
|
|
ctx := &resource.Context{Base: resource.NewBase(c, s)}
|
|
ctx.Factory = ctx
|
|
return ctx
|
|
}
|
|
|
|
func TestCTXSwitch(t *testing.T) {
|
|
mc := NewMockConnection()
|
|
mr := NewMockSwitchableCruder()
|
|
m.When(mr.Switch("fred")).ThenReturn(nil)
|
|
|
|
ctx := NewContextWithArgs(mc, mr)
|
|
err := ctx.Switch("fred")
|
|
|
|
assert.Nil(t, err)
|
|
mr.VerifyWasCalledOnce().Switch("fred")
|
|
}
|
|
|
|
func TestCTXList(t *testing.T) {
|
|
mc := NewMockConnection()
|
|
mr := NewMockSwitchableCruder()
|
|
m.When(mr.List("blee")).ThenReturn(k8s.Collection{*k8sNamedCTX()}, nil)
|
|
|
|
ctx := NewContextWithArgs(mc, mr)
|
|
cc, err := ctx.List("blee")
|
|
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, resource.Columnars{ctx.New(k8sNamedCTX())}, cc)
|
|
mr.VerifyWasCalledOnce().List("blee")
|
|
}
|
|
|
|
func TestCTXDelete(t *testing.T) {
|
|
mc := NewMockConnection()
|
|
mr := NewMockSwitchableCruder()
|
|
m.When(mr.Delete("", "fred")).ThenReturn(nil)
|
|
|
|
ctx := NewContextWithArgs(mc, mr)
|
|
|
|
assert.Nil(t, ctx.Delete("fred"))
|
|
mr.VerifyWasCalledOnce().Delete("", "fred")
|
|
}
|
|
|
|
func TestCTXListHasName(t *testing.T) {
|
|
mc := NewMockConnection()
|
|
mr := NewMockSwitchableCruder()
|
|
|
|
ctx := NewContextWithArgs(mc, mr)
|
|
l := NewContextListWithArgs("blee", ctx)
|
|
|
|
assert.Equal(t, "ctx", l.GetName())
|
|
}
|
|
|
|
func TestCTXListHasNamespace(t *testing.T) {
|
|
mc := NewMockConnection()
|
|
mr := NewMockSwitchableCruder()
|
|
|
|
ctx := NewContextWithArgs(mc, mr)
|
|
l := NewContextListWithArgs("blee", ctx)
|
|
|
|
assert.Equal(t, resource.NotNamespaced, l.GetNamespace())
|
|
}
|
|
|
|
func TestCTXListHasResource(t *testing.T) {
|
|
mc := NewMockConnection()
|
|
mr := NewMockSwitchableCruder()
|
|
|
|
ctx := NewContextWithArgs(mc, mr)
|
|
l := NewContextListWithArgs("blee", ctx)
|
|
|
|
assert.NotNil(t, l.Resource())
|
|
}
|
|
|
|
func TestCTXHeader(t *testing.T) {
|
|
mc := NewMockConnection()
|
|
mr := NewMockSwitchableCruder()
|
|
|
|
ctx := NewContextWithArgs(mc, mr)
|
|
|
|
assert.Equal(t, 4, len(ctx.Header("")))
|
|
}
|
|
|
|
func TestCTXFields(t *testing.T) {
|
|
mc := NewMockConnection()
|
|
m.When(mc.Config()).ThenReturn(k8sConfig())
|
|
mr := NewMockSwitchableCruder()
|
|
m.When(mr.MustCurrentContextName()).ThenReturn("test")
|
|
|
|
ctx := NewContextWithArgs(mc, mr)
|
|
c := ctx.New(k8sNamedCTX())
|
|
|
|
assert.Equal(t, 4, len(c.Fields("")))
|
|
assert.Equal(t, "test*", c.Fields("")[0])
|
|
}
|
|
|
|
// Helpers...
|
|
|
|
func k8sConfig() *k8s.Config {
|
|
ctx := "test"
|
|
f := genericclioptions.ConfigFlags{
|
|
Context: &ctx,
|
|
}
|
|
return k8s.NewConfig(&f)
|
|
}
|
|
|
|
func k8sCTX() *api.Context {
|
|
return &api.Context{
|
|
LocationOfOrigin: "fred",
|
|
Cluster: "blee",
|
|
AuthInfo: "secret",
|
|
}
|
|
}
|
|
|
|
func k8sNamedCTX() *k8s.NamedContext {
|
|
return k8s.NewNamedContext(
|
|
k8sConfig(),
|
|
"test",
|
|
&api.Context{
|
|
LocationOfOrigin: "fred",
|
|
Cluster: "blee",
|
|
AuthInfo: "secret",
|
|
},
|
|
)
|
|
}
|