Templates: error on missing required values (#25932)

This commit is contained in:
andig 2025-12-22 13:55:52 +01:00 • committed by GitHub
parent d21c3f14a6
commit 3adf8b4520
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 42 additions and 0 deletions

View file

@ -50,5 +50,6 @@ vehicles:
type: template type: template
template: tesla # not optimal, since real communication with tesla server is happening template: tesla # not optimal, since real communication with tesla server is happening
title: Broken Tesla title: Broken Tesla
clientId: test_client_id
accessToken: A accessToken: A
refreshToken: B refreshToken: B

View file

@ -7,6 +7,7 @@ import (
"slices" "slices"
"strconv" "strconv"
"strings" "strings"
"testing"
"text/template" "text/template"
"github.com/Masterminds/sprig/v3" "github.com/Masterminds/sprig/v3"
@ -354,6 +355,13 @@ func (t *Template) RenderResult(renderMode int, other map[string]any) ([]byte, m
if val != nil { if val != nil {
s = p.yamlQuote(fmt.Sprintf("%v", val)) s = p.yamlQuote(fmt.Sprintf("%v", val))
} }
// validate required fields from yaml
if s == "" && p.IsRequired() && (renderMode == RenderModeUnitTest ||
renderMode == RenderModeInstance && !testing.Testing()) {
return nil, nil, fmt.Errorf("missing required `%s`", p.Name)
}
res[out] = s res[out] = s
} }
} }

View file

@ -32,3 +32,36 @@ func TestPresets(t *testing.T) {
{Name: "last"}, {Name: "last"},
}, tmpl.Params) }, tmpl.Params)
} }
func TestRequired(t *testing.T) {
tmpl := &Template{
TemplateDefinition: TemplateDefinition{
Params: []Param{
{
Name: "param",
Required: true,
},
},
},
}
_, _, err := tmpl.RenderResult(RenderModeUnitTest, map[string]any{
"Param": "foo",
})
require.NoError(t, err)
_, _, err = tmpl.RenderResult(RenderModeUnitTest, map[string]any{
"Param": "",
})
require.Error(t, err)
_, _, err = tmpl.RenderResult(RenderModeUnitTest, map[string]any{
"Param": nil,
})
require.Error(t, err)
_, _, err = tmpl.RenderResult(RenderModeDocs, map[string]any{
"Param": nil,
})
require.NoError(t, err)
}