in internal/build/cmd/generate/commands/gentests/model.go [117:233]
func NewTestSuite(fpath string, payloads []TestPayload) TestSuite {
ts := TestSuite{
Dir: strings.Title(filepath.Base(filepath.Dir(fpath))),
Filepath: fpath,
}
if ts.Type == "" {
ts.Type = "free"
}
for _, payload := range payloads {
sec_keys := utils.MapKeys(payload.Payload)
switch {
case len(sec_keys) > 0 && strings.Contains(strings.Join(sec_keys, ","), "setup") || strings.Contains(strings.Join(sec_keys, ","), "teardown"):
for k, v := range payload.Payload.(map[interface{}]interface{}) {
switch k {
case "setup":
for _, vv := range v.([]interface{}) {
for k, vvv := range vv.(map[interface{}]interface{}) {
if k == "do" {
ts.Setup = append(ts.Setup, NewAction(vvv))
}
}
}
case "teardown":
for _, vv := range v.([]interface{}) {
for k, vvv := range vv.(map[interface{}]interface{}) {
if k == "do" {
ts.Teardown = append(ts.Teardown, NewAction(vvv))
}
}
}
}
}
default:
for k, v := range payload.Payload.(map[interface{}]interface{}) {
var t Test
var steps []Step
for _, vv := range v.([]interface{}) {
switch utils.MapKeys(vv)[0] {
case "skip":
var (
ok bool
skip_v string
skip_r string
)
skip := vv.(map[interface{}]interface{})["skip"]
if skip_v, ok = skip.(map[interface{}]interface{})["version"].(string); ok {
if skip_rr, ok := skip.(map[interface{}]interface{})["reason"].(string); ok {
skip_r = skip_rr
}
if skip_v == "all" {
t.Skip = true
t.SkipInfo = "Skipping all versions"
break
}
if ts.SkipEsVersion(skip_v) {
// fmt.Printf("Skip: %q, EsVersion: %s, Skip: %v, Reason: %s\n", skip_v, EsVersion, ts.SkipEsVersion(skip_v), skip_r)
t.Skip = true
t.SkipInfo = skip_r
}
}
case "setup":
for _, vvv := range vv.(map[interface{}]interface{}) {
for _, vvvv := range vvv.([]interface{}) {
t.Setup = append(t.Setup, NewAction(vvvv.(map[interface{}]interface{})["do"]))
}
}
case "teardown":
for _, vvv := range vv.(map[interface{}]interface{}) {
for _, vvvv := range vvv.([]interface{}) {
t.Teardown = append(t.Teardown, NewAction(vvvv.(map[interface{}]interface{})["do"]))
}
}
case "set":
for _, vvv := range vv.(map[interface{}]interface{}) {
steps = append(steps, NewStash(vvv))
}
case "transform_and_set":
for _, vvv := range vv.(map[interface{}]interface{}) {
// NOTE: `set_and_transform` has flipped ordering of key and value, compared to `set`
key := utils.MapValues(vvv)[0]
val := utils.MapKeys(vvv)[0]
payload := make(map[interface{}]interface{})
payload[key] = val
// fmt.Println(payload)
steps = append(steps, NewStash(payload))
}
case "do":
for _, vvv := range vv.(map[interface{}]interface{}) {
steps = append(steps, NewAction(vvv))
}
case "is_true", "is_false", "match", "lt", "gt", "lte", "gte":
for kkk, vvv := range vv.(map[interface{}]interface{}) {
steps = append(steps, NewAssertion(kkk.(string), vvv))
}
// TODO: "length" operator
}
}
if !ts.Skip {
t.Name = strings.ReplaceAll(k.(string), `"`, `'`)
t.Filepath = payload.Filepath
t.OrigName = k.(string)
t.Steps = steps
ts.Tests = append(ts.Tests, t)
}
}
}
}
return ts
}