mirror of https://github.com/knative/func.git
143 lines
3.1 KiB
Go
143 lines
3.1 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"knative.dev/client/pkg/util"
|
|
|
|
fn "knative.dev/kn-plugin-func"
|
|
)
|
|
|
|
func Test_mergeEnvMaps(t *testing.T) {
|
|
|
|
a := "A"
|
|
b := "B"
|
|
v1 := "x"
|
|
v2 := "y"
|
|
|
|
type args struct {
|
|
envs []fn.Env
|
|
toUpdate *util.OrderedMap
|
|
toRemove []string
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
want []fn.Env
|
|
}{
|
|
{
|
|
"add new var to empty list",
|
|
args{
|
|
[]fn.Env{},
|
|
util.NewOrderedMapWithKVStrings([][]string{{a, v1}}),
|
|
[]string{},
|
|
},
|
|
[]fn.Env{{Name: &a, Value: &v1}},
|
|
},
|
|
{
|
|
"add new var",
|
|
args{
|
|
[]fn.Env{{Name: &b, Value: &v2}},
|
|
util.NewOrderedMapWithKVStrings([][]string{{a, v1}}),
|
|
[]string{},
|
|
},
|
|
[]fn.Env{{Name: &b, Value: &v2}, {Name: &a, Value: &v1}},
|
|
},
|
|
{
|
|
"update var",
|
|
args{
|
|
[]fn.Env{{Name: &a, Value: &v1}},
|
|
util.NewOrderedMapWithKVStrings([][]string{{a, v2}}),
|
|
[]string{},
|
|
},
|
|
[]fn.Env{{Name: &a, Value: &v2}},
|
|
},
|
|
{
|
|
"update multiple vars",
|
|
args{
|
|
[]fn.Env{{Name: &a, Value: &v1}, {Name: &b, Value: &v2}},
|
|
util.NewOrderedMapWithKVStrings([][]string{{a, v2}, {b, v1}}),
|
|
[]string{},
|
|
},
|
|
[]fn.Env{{Name: &a, Value: &v2}, {Name: &b, Value: &v1}},
|
|
},
|
|
{
|
|
"remove var",
|
|
args{
|
|
[]fn.Env{{Name: &a, Value: &v1}},
|
|
util.NewOrderedMap(),
|
|
[]string{a},
|
|
},
|
|
[]fn.Env{},
|
|
},
|
|
{
|
|
"remove multiple vars",
|
|
args{
|
|
[]fn.Env{{Name: &a, Value: &v1}, {Name: &b, Value: &v2}},
|
|
util.NewOrderedMap(),
|
|
[]string{a, b},
|
|
},
|
|
[]fn.Env{},
|
|
},
|
|
{
|
|
"update and remove vars",
|
|
args{
|
|
[]fn.Env{{Name: &a, Value: &v1}, {Name: &b, Value: &v2}},
|
|
util.NewOrderedMapWithKVStrings([][]string{{a, v2}}),
|
|
[]string{b},
|
|
},
|
|
[]fn.Env{{Name: &a, Value: &v2}},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got, err := mergeEnvs(tt.args.envs, tt.args.toUpdate, tt.args.toRemove)
|
|
if err != nil {
|
|
t.Errorf("mergeEnvs() for initial vars %v and toUpdate %v and toRemove %v got error %v",
|
|
tt.args.envs, tt.args.toUpdate, tt.args.toRemove, err)
|
|
}
|
|
if !reflect.DeepEqual(got, tt.want) {
|
|
|
|
gotString := "{ "
|
|
for _, e := range got {
|
|
gotString += fmt.Sprintf("{ %s: %s } ", *e.Name, *e.Value)
|
|
}
|
|
gotString += "}"
|
|
|
|
wantString := "{ "
|
|
for _, e := range tt.want {
|
|
wantString += fmt.Sprintf("{ %s: %s } ", *e.Name, *e.Value)
|
|
}
|
|
wantString += "}"
|
|
|
|
t.Errorf("mergeEnvs() = got: %s, want %s", gotString, wantString)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func Test_CMDParameterized(t *testing.T) {
|
|
|
|
if root.Use != "func" {
|
|
t.Fatalf("default command use should be \"func\".")
|
|
}
|
|
|
|
usageExample, err := replaceNameInTemplate("func", "example")
|
|
if root.Example != usageExample || err != nil {
|
|
t.Fatalf("default command example should assume \"func\" as executable name. error: %v", err)
|
|
}
|
|
|
|
cmd, err := NewRootCmd()
|
|
if cmd.Use != "kn func" && err != nil {
|
|
t.Fatalf("plugin command use should be \"kn func\".")
|
|
}
|
|
|
|
usageExample, _ = replaceNameInTemplate("kn func", "example")
|
|
cmd, err = NewRootCmd()
|
|
if cmd.Example != usageExample || err != nil {
|
|
t.Fatalf("plugin command example should assume \"kn func\" as executable name. error: %v", err)
|
|
}
|
|
}
|