Files
mesh-controller/cmd/mesh-controller/plans_data_test.go
T

56 lines
1.6 KiB
Go

package main
import (
"strings"
"testing"
"git.novox.be/novox/mesh-sdk/go/catalogue"
)
// flagsOf reads a command line's flags (and its first positional after --what-if) into a map.
func flagsOf(argv []string) map[string]string {
out := map[string]string{}
for i := 0; i < len(argv); i++ {
if !strings.HasPrefix(argv[i], "--") {
continue
}
name := strings.TrimPrefix(argv[i], "--")
if i+1 < len(argv) && !strings.HasPrefix(argv[i+1], "--") {
out[name] = argv[i+1]
i++
} else {
out[name] = "true"
}
}
return out
}
// Without the data form the text answer is unchanged (AC2): no data flag, and the data-only arguments are not passed.
func TestPlansWhatIfWithoutDataIsUnchanged(t *testing.T) {
argv, err := argvFor("plans", map[string]any{"repository": "novox/x", "paths": "a,b"})
if err != nil {
t.Fatal(err)
}
if got := strings.Join(argv, " "); got != "plans --what-if novox/x --paths a,b" {
t.Errorf("the text what-if reads %q", got)
}
if _, err := argvFor("plans", map[string]any{"repository": "novox/x", "paths": "a", "head": "h"}); err == nil {
t.Error("a head without data was passed over, not refused")
}
argv, _ = argvFor("plans", map[string]any{"repository": "novox/x", "paths": "a", "data": "false"})
if got := strings.Join(argv, " "); got != "plans --what-if novox/x --paths a" {
t.Errorf("data false reads %q", got)
}
}
func catalogueVerb(name string) (catalogue.Verb, bool) { return controllerVerb(name) }
func slicesHas(s []string, v string) bool {
for _, x := range s {
if x == v {
return true
}
}
return false
}