k9s/internal/model1/header_test.go

319 lines
6.3 KiB
Go

// SPDX-License-Identifier: Apache-2.0
// Copyright Authors of K9s
package model1_test
import (
"testing"
"github.com/derailed/k9s/internal/model1"
"github.com/stretchr/testify/assert"
)
func TestHeaderMapIndices(t *testing.T) {
uu := map[string]struct {
h1 model1.Header
cols []string
wide bool
e []int
}{
"all": {
h1: makeHeader(),
cols: []string{"A", "B", "C"},
e: []int{0, 1, 2},
},
"reverse": {
h1: makeHeader(),
cols: []string{"C", "B", "A"},
e: []int{2, 1, 0},
},
"missing": {
h1: makeHeader(),
cols: []string{"Duh", "B", "A"},
e: []int{-1, 1, 0},
},
"skip": {
h1: makeHeader(),
cols: []string{"C", "A"},
e: []int{2, 0},
},
}
for k := range uu {
u := uu[k]
t.Run(k, func(t *testing.T) {
ii := u.h1.MapIndices(u.cols, u.wide)
assert.Equal(t, u.e, ii)
})
}
}
func TestHeaderIndexOf(t *testing.T) {
uu := map[string]struct {
h model1.Header
name string
wide, ok bool
e int
}{
"shown": {
h: makeHeader(),
name: "A",
e: 0,
ok: true,
},
"hidden": {
h: makeHeader(),
name: "B",
e: -1,
},
"hidden-wide": {
h: makeHeader(),
name: "B",
wide: true,
e: 1,
ok: true,
},
}
for k := range uu {
u := uu[k]
t.Run(k, func(t *testing.T) {
idx, ok := u.h.IndexOf(u.name, u.wide)
assert.Equal(t, u.ok, ok)
assert.Equal(t, u.e, idx)
})
}
}
func TestHeaderCustomize(t *testing.T) {
uu := map[string]struct {
h model1.Header
cols []string
wide bool
e model1.Header
}{
"default": {
h: makeHeader(),
e: makeHeader(),
},
"default-wide": {
h: makeHeader(),
wide: true,
e: makeHeader(),
},
"reverse": {
h: model1.Header{
model1.HeaderColumn{Name: "A"},
model1.HeaderColumn{Name: "B", Attrs: model1.Attrs{Wide: true}},
model1.HeaderColumn{Name: "C"},
},
cols: []string{"C", "A"},
e: model1.Header{
model1.HeaderColumn{Name: "C"},
model1.HeaderColumn{Name: "A"},
},
},
"reverse-wide": {
h: model1.Header{
model1.HeaderColumn{Name: "A"},
model1.HeaderColumn{Name: "B", Attrs: model1.Attrs{Wide: true}},
model1.HeaderColumn{Name: "C"},
},
cols: []string{"C", "A"},
wide: true,
e: model1.Header{
model1.HeaderColumn{Name: "C"},
model1.HeaderColumn{Name: "A"},
model1.HeaderColumn{Name: "B", Attrs: model1.Attrs{Wide: true}},
},
},
"toggle-wide": {
h: model1.Header{
model1.HeaderColumn{Name: "A"},
model1.HeaderColumn{Name: "B", Attrs: model1.Attrs{Wide: true}},
model1.HeaderColumn{Name: "C"},
},
cols: []string{"C", "B"},
wide: true,
e: model1.Header{
model1.HeaderColumn{Name: "C"},
model1.HeaderColumn{Name: "B", Attrs: model1.Attrs{Wide: false}},
model1.HeaderColumn{Name: "A", Attrs: model1.Attrs{Wide: true}},
},
},
"missing": {
h: model1.Header{
model1.HeaderColumn{Name: "A"},
model1.HeaderColumn{Name: "B", Attrs: model1.Attrs{Wide: true}},
model1.HeaderColumn{Name: "C"},
},
cols: []string{"BLEE", "A"},
wide: true,
e: model1.Header{
model1.HeaderColumn{Name: "BLEE"},
model1.HeaderColumn{Name: "A"},
model1.HeaderColumn{Name: "B", Attrs: model1.Attrs{Wide: true}},
model1.HeaderColumn{Name: "C", Attrs: model1.Attrs{Wide: true}},
},
},
}
for k := range uu {
u := uu[k]
t.Run(k, func(t *testing.T) {
assert.Equal(t, u.e, u.h.Customize(u.cols, u.wide))
})
}
}
func TestHeaderDiff(t *testing.T) {
uu := map[string]struct {
h1, h2 model1.Header
e bool
}{
"same": {
h1: makeHeader(),
h2: makeHeader(),
},
"size": {
h1: makeHeader(),
h2: makeHeader()[1:],
e: true,
},
"differ-wide": {
h1: model1.Header{
model1.HeaderColumn{Name: "A"},
model1.HeaderColumn{Name: "B", Attrs: model1.Attrs{Wide: true}},
model1.HeaderColumn{Name: "C"},
},
h2: model1.Header{
model1.HeaderColumn{Name: "A"},
model1.HeaderColumn{Name: "B"},
model1.HeaderColumn{Name: "C"},
},
e: true,
},
"differ-order": {
h1: model1.Header{
model1.HeaderColumn{Name: "A"},
model1.HeaderColumn{Name: "B", Attrs: model1.Attrs{Wide: true}},
model1.HeaderColumn{Name: "C"},
},
h2: model1.Header{
model1.HeaderColumn{Name: "A"},
model1.HeaderColumn{Name: "C"},
model1.HeaderColumn{Name: "B", Attrs: model1.Attrs{Wide: true}},
},
e: true,
},
"differ-name": {
h1: model1.Header{
model1.HeaderColumn{Name: "A"},
},
h2: model1.Header{
model1.HeaderColumn{Name: "B"},
},
e: true,
},
}
for k := range uu {
u := uu[k]
t.Run(k, func(t *testing.T) {
assert.Equal(t, u.e, u.h1.Diff(u.h2))
})
}
}
func TestHeaderHasAge(t *testing.T) {
uu := map[string]struct {
h model1.Header
age, e bool
}{
"no-age": {
h: model1.Header{},
},
"age": {
h: model1.Header{
model1.HeaderColumn{Name: "A"},
model1.HeaderColumn{Name: "B", Attrs: model1.Attrs{Wide: true}},
model1.HeaderColumn{Name: "AGE", Attrs: model1.Attrs{Time: true}},
},
e: true,
age: true,
},
}
for k := range uu {
u := uu[k]
t.Run(k, func(t *testing.T) {
assert.Equal(t, u.e, u.h.HasAge())
assert.Equal(t, u.e, u.h.IsTimeCol(2))
})
}
}
func TestHeaderColumns(t *testing.T) {
uu := map[string]struct {
h model1.Header
wide bool
e []string
}{
"empty": {
h: model1.Header{},
},
"regular": {
h: makeHeader(),
e: []string{"A", "C"},
},
"wide": {
h: makeHeader(),
e: []string{"A", "B", "C"},
wide: true,
},
}
for k := range uu {
u := uu[k]
t.Run(k, func(t *testing.T) {
assert.Equal(t, u.e, u.h.ColumnNames(u.wide))
})
}
}
func TestHeaderClone(t *testing.T) {
uu := map[string]struct {
h model1.Header
}{
"empty": {
h: model1.Header{},
},
"full": {
h: makeHeader(),
},
}
for k := range uu {
u := uu[k]
t.Run(k, func(t *testing.T) {
c := u.h.Clone()
assert.Len(t, u.h, len(c))
if len(u.h) > 0 {
u.h[0].Name = "blee"
assert.Equal(t, "A", c[0].Name)
}
})
}
}
// ----------------------------------------------------------------------------
// Helpers...
func makeHeader() model1.Header {
return model1.Header{
model1.HeaderColumn{Name: "A"},
model1.HeaderColumn{Name: "B", Attrs: model1.Attrs{Wide: true}},
model1.HeaderColumn{Name: "C"},
}
}