Merge pull request #2759 from evcc-io/feature/template-tests
Test and instantiate all template usages
This commit is contained in:
commit
ca59cd4b7a
5 changed files with 57 additions and 96 deletions
|
|
@ -30,7 +30,7 @@ var acceptable = []string{
|
|||
"Get \"http://192.0.2.2/getParameters\": context deadline exceeded", // evsewifi
|
||||
}
|
||||
|
||||
func TestChargerTemplates(t *testing.T) {
|
||||
func TestTemplates(t *testing.T) {
|
||||
test.SkipCI(t)
|
||||
|
||||
for _, tmpl := range templates.ByClass(templates.Charger) {
|
||||
|
|
@ -54,20 +54,8 @@ func TestChargerTemplates(t *testing.T) {
|
|||
values = tmpl.ModbusValues(templates.TemplateRenderModeInstance, true, values)
|
||||
}
|
||||
|
||||
t.Run(tmpl.Template, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
b, values, err := tmpl.RenderResult(templates.TemplateRenderModeUnitTest, values)
|
||||
if err != nil {
|
||||
t.Logf("Template: %s", tmpl.Template)
|
||||
t.Logf("%s", string(b))
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
_, err = NewFromConfig("template", values)
|
||||
if err != nil && !test.Acceptable(err, acceptable) {
|
||||
t.Logf("Template: %s", tmpl.Template)
|
||||
t.Logf("%s", string(b))
|
||||
templates.RenderTest(t, tmpl, values, func(values map[string]interface{}) {
|
||||
if _, err := NewFromConfig("template", values); err != nil && !test.Acceptable(err, acceptable) {
|
||||
t.Error(err)
|
||||
}
|
||||
})
|
||||
|
|
|
|||
|
|
@ -27,9 +27,7 @@ var acceptable = []string{
|
|||
"login failed: Put \"https://192.0.2.2/v1/login\": context deadline exceeded", // LG ESS
|
||||
}
|
||||
|
||||
func TestMeterTemplates(t *testing.T) {
|
||||
test.SkipCI(t)
|
||||
|
||||
func TestTemplates(t *testing.T) {
|
||||
for _, tmpl := range templates.ByClass(templates.Meter) {
|
||||
tmpl := tmpl
|
||||
|
||||
|
|
@ -51,39 +49,10 @@ func TestMeterTemplates(t *testing.T) {
|
|||
values = tmpl.ModbusValues(templates.TemplateRenderModeInstance, true, values)
|
||||
}
|
||||
|
||||
usages := tmpl.Usages()
|
||||
if len(usages) == 0 {
|
||||
runTest(t, tmpl, values)
|
||||
} else {
|
||||
// test all usages
|
||||
for _, usage := range usages {
|
||||
|
||||
// set the usage param value
|
||||
if usage != "" {
|
||||
values[templates.ParamUsage] = usage
|
||||
}
|
||||
|
||||
runTest(t, tmpl, values)
|
||||
templates.RenderTest(t, tmpl, values, func(values map[string]interface{}) {
|
||||
if _, err := NewFromConfig("template", values); err != nil && !test.Acceptable(err, acceptable) {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func runTest(t *testing.T, tmpl templates.Template, values map[string]interface{}) {
|
||||
t.Run(tmpl.Template, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
b, values, err := tmpl.RenderResult(templates.TemplateRenderModeUnitTest, values)
|
||||
if err != nil {
|
||||
t.Logf("Template: %s", tmpl.Template)
|
||||
t.Logf("%s", string(b))
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
if _, err := NewFromConfig("template", values); err != nil && !test.Acceptable(err, acceptable) {
|
||||
t.Logf("Template: %s", tmpl.Template)
|
||||
t.Logf("%s", string(b))
|
||||
t.Error(err)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
|||
43
util/templates/render.go
Normal file
43
util/templates/render.go
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
package templates
|
||||
|
||||
import (
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
// RenderTest renders and instantiates plus yaml-parses the template per usage
|
||||
func RenderTest(t *testing.T, tmpl Template, values map[string]interface{}, cb func(values map[string]interface{})) {
|
||||
t.Run(tmpl.Template, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
b, values, err := tmpl.RenderResult(TemplateRenderModeUnitTest, values)
|
||||
if err != nil {
|
||||
t.Log(string(b))
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
// instantiate all usage variants
|
||||
for _, u := range tmpl.Usages() {
|
||||
t.Run(u, func(t *testing.T) {
|
||||
values[ParamUsage] = u
|
||||
|
||||
b, _, err := tmpl.RenderResult(TemplateRenderModeInstance, values)
|
||||
if err != nil {
|
||||
t.Errorf("usage: %s, result: %v", u, err)
|
||||
}
|
||||
|
||||
var instance interface{}
|
||||
if err := yaml.Unmarshal(b, &instance); err != nil {
|
||||
t.Errorf("usage: %s, yaml: %v", u, err)
|
||||
}
|
||||
|
||||
// actually run the instance if not on CI
|
||||
if os.Getenv("CI") == "" {
|
||||
cb(values)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
@ -89,14 +89,7 @@ func (t *Template) SetCombinedTitle() {
|
|||
t.resolveTitles()
|
||||
}
|
||||
|
||||
title := ""
|
||||
for _, t := range t.titles {
|
||||
if title != "" {
|
||||
title += "/"
|
||||
}
|
||||
title += t
|
||||
}
|
||||
t.title = title
|
||||
t.title = strings.Join(t.titles, "/")
|
||||
}
|
||||
|
||||
// set the title for this templates
|
||||
|
|
@ -111,21 +104,7 @@ func (t *Template) Title() string {
|
|||
|
||||
// return a language specific product title
|
||||
func (t *Template) ProductTitle(p Product) string {
|
||||
title := ""
|
||||
|
||||
if p.Brand != "" {
|
||||
title += p.Brand
|
||||
}
|
||||
|
||||
description := p.Description.String(t.Lang)
|
||||
if description != "" {
|
||||
if title != "" {
|
||||
title += " "
|
||||
}
|
||||
title += description
|
||||
}
|
||||
|
||||
return title
|
||||
return strings.TrimSpace(fmt.Sprintf("%s %s", p.Brand, p.Description.String(t.Lang)))
|
||||
}
|
||||
|
||||
// return the language specific product titles
|
||||
|
|
@ -141,13 +120,9 @@ func (t *Template) Titles(lang string) []string {
|
|||
|
||||
// set the language specific product titles
|
||||
func (t *Template) resolveTitles() {
|
||||
var titles []string
|
||||
|
||||
for _, p := range t.Products {
|
||||
titles = append(titles, t.ProductTitle(p))
|
||||
t.titles = append(t.titles, t.ProductTitle(p))
|
||||
}
|
||||
|
||||
t.titles = titles
|
||||
}
|
||||
|
||||
// add the referenced base Params and overwrite existing ones
|
||||
|
|
|
|||
|
|
@ -35,9 +35,7 @@ var acceptable = []string{
|
|||
"401: Unauthorized: Invalid credentials", // Volvo
|
||||
}
|
||||
|
||||
func TestVehicleTemplates(t *testing.T) {
|
||||
test.SkipCI(t)
|
||||
|
||||
func TestTemplates(t *testing.T) {
|
||||
for _, tmpl := range templates.ByClass(templates.Vehicle) {
|
||||
tmpl := tmpl
|
||||
|
||||
|
|
@ -47,20 +45,8 @@ func TestVehicleTemplates(t *testing.T) {
|
|||
// set the template value which is needed for rendering
|
||||
values["template"] = tmpl.Template
|
||||
|
||||
t.Run(tmpl.Template, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
b, values, err := tmpl.RenderResult(templates.TemplateRenderModeUnitTest, values)
|
||||
if err != nil {
|
||||
t.Logf("Template: %s", tmpl.Template)
|
||||
t.Logf("%s", string(b))
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
_, err = NewFromConfig("template", values)
|
||||
if err != nil && !test.Acceptable(err, acceptable) {
|
||||
t.Logf("Template: %s", tmpl.Template)
|
||||
t.Logf("%s", string(b))
|
||||
templates.RenderTest(t, tmpl, values, func(values map[string]interface{}) {
|
||||
if _, err := NewFromConfig("template", values); err != nil && !test.Acceptable(err, acceptable) {
|
||||
t.Error(err)
|
||||
}
|
||||
})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue