69 lines
1.5 KiB
Go
69 lines
1.5 KiB
Go
package command
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/nomad/ci"
|
|
)
|
|
|
|
type testData struct {
|
|
Region string
|
|
ID string
|
|
Name string
|
|
}
|
|
|
|
const expectJSON = `{
|
|
"ID": "1",
|
|
"Name": "example",
|
|
"Region": "global"
|
|
}`
|
|
|
|
var (
|
|
tData = testData{"global", "1", "example"}
|
|
testFormat = map[string]string{"json": "", "template": "{{.Region}}"}
|
|
expectOutput = map[string]string{"json": expectJSON, "template": "global"}
|
|
)
|
|
|
|
func TestDataFormat(t *testing.T) {
|
|
ci.Parallel(t)
|
|
for k, v := range testFormat {
|
|
fm, err := DataFormat(k, v)
|
|
if err != nil {
|
|
t.Fatalf("err: %v", err)
|
|
}
|
|
|
|
result, err := fm.TransformData(tData)
|
|
if err != nil {
|
|
t.Fatalf("err: %v", err)
|
|
}
|
|
|
|
if result != expectOutput[k] {
|
|
t.Fatalf("expected output:\n%s\nactual:\n%s", expectOutput[k], result)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestInvalidJSONTemplate(t *testing.T) {
|
|
ci.Parallel(t)
|
|
// Invalid template {{.foo}}
|
|
fm, err := DataFormat("template", "{{.foo}}")
|
|
if err != nil {
|
|
t.Fatalf("err: %v", err)
|
|
}
|
|
_, err = fm.TransformData(tData)
|
|
if !strings.Contains(err.Error(), "can't evaluate field foo") {
|
|
t.Fatalf("expected invalid template error, got: %s", err.Error())
|
|
}
|
|
|
|
// No template is specified
|
|
fm, err = DataFormat("template", "")
|
|
if err != nil {
|
|
t.Fatalf("err: %v", err)
|
|
}
|
|
_, err = fm.TransformData(tData)
|
|
if !strings.Contains(err.Error(), "template needs to be specified the golang templates.") {
|
|
t.Fatalf("expected not specified template error, got: %s", err.Error())
|
|
}
|
|
}
|