automation-tests/common/pkg/report/template_test.go

111 lines
2.4 KiB
Go

package report
import (
"bytes"
"strings"
"testing"
"github.com/stretchr/testify/assert"
)
func TestNewTemplate(t *testing.T) {
actual := NewTemplate("TestNewTemplate")
assert.Equal(t, false, actual.isTable)
}
type testStruct struct {
FieldA bool // camel case test
Fieldb bool // no camel case
fieldC bool // nolint // private field
fieldd bool // nolint // private field
}
func TestHeadersSimple(t *testing.T) {
expected := []map[string]string{{
"FieldA": "FIELD A",
"Fieldb": "FIELDB",
"fieldC": "FIELD C",
"fieldd": "FIELDD",
}}
assert.Equal(t, expected, Headers(testStruct{}, nil))
}
func TestHeadersOverride(t *testing.T) {
expected := []map[string]string{{
"FieldA": "FIELD A",
"Fieldb": "FIELD B",
"fieldC": "FIELD C",
"fieldd": "FIELD D",
}}
assert.Equal(t, expected, Headers(testStruct{}, map[string]string{
"Fieldb": "field b",
"fieldd": "field d",
}))
}
func TestNormalizeFormat(t *testing.T) {
testCase := []struct {
input string
expected string
}{
{"{{.ID}}\t{{.ID}}\n", "{{.ID}}\t{{.ID}}\n"},
{`{{.ID}}\t{{.ID}}\n`, "{{.ID}}\t{{.ID}}\n"},
{`{{.ID}} {{.ID}}\n`, "{{.ID}} {{.ID}}\n"},
{`table {{.ID}}\t{{.ID}}`, "{{.ID}}\t{{.ID}}\n"},
{`table {{.ID}} {{.ID}}`, "{{.ID}}\t{{.ID}}\n"},
}
for _, tc := range testCase {
tc := tc
t.Run(tc.input, func(t *testing.T) {
t.Parallel()
assert.Equal(t, tc.expected, NormalizeFormat(tc.input))
})
}
}
func TestTemplate_Parse(t *testing.T) {
testCase := []string{
"table {{.ID}}",
"table {{ .ID}}",
"{{range .}}{{.ID}}\n{{end}}",
}
var buf bytes.Buffer
for _, tc := range testCase {
tc := tc
t.Run(tc, func(t *testing.T) {
tmpl, e := NewTemplate("TestTemplate").Parse(tc)
assert.NoError(t, e)
err := tmpl.Execute(&buf, [...]map[string]string{{
"ID": "Ident",
}})
assert.NoError(t, err)
assert.Equal(t, "Ident\n", buf.String())
})
buf.Reset()
}
}
func TestTemplate_IsTable(t *testing.T) {
tmpl, e := NewTemplate("TestTemplate").Parse("table {{.ID}}")
assert.NoError(t, e)
assert.True(t, tmpl.isTable)
}
func TestTemplate_Funcs(t *testing.T) {
tmpl := NewTemplate("TestTemplate")
tmpl = tmpl.Funcs(map[string]interface{}{"ToLower": strings.ToLower})
tmpl, e := tmpl.Parse("{{.ID |ToLower}}")
assert.NoError(t, e)
var buf bytes.Buffer
err := tmpl.Execute(&buf, map[string]string{
"ID": "ident",
})
assert.NoError(t, err)
assert.Equal(t, "ident", buf.String())
}