test(values): add test for subchart nil producing %!s(<nil>)

Regression test for the Bitnami common.secrets.key issue.

Signed-off-by: Johannes Lohmer <jojo.dev@lohmer.com>
pull/31979/head
Johannes Lohmer 2 weeks ago committed by Johannes Lohmer
parent 98df1b3621
commit 2ee439ac68

@ -1505,3 +1505,65 @@ func TestTraceableError_NoTemplateForm(t *testing.T) {
}
}
}
// TestRenderSubchartDefaultNilNoStringify tests the full pipeline: subchart default
// nil values should not produce "%!s(<nil>)" in rendered template output.
// Regression test for the Bitnami common.secrets.key issue.
func TestRenderSubchartDefaultNilNoStringify(t *testing.T) {
modTime := time.Now()
// Subchart has a default with nil values
subchart := &chart.Chart{
Metadata: &chart.Metadata{Name: "child"},
Templates: []*common.File{
{
Name: "templates/test.yaml",
ModTime: modTime,
Data: []byte(`{{- if hasKey .Values.keyMapping "password" -}}{{- printf "subPath: %s" (index .Values.keyMapping "password") -}}{{- else -}}subPath: fallback{{- end -}}`),
},
},
Values: map[string]any{
"keyMapping": map[string]any{
"password": nil, // nil in chart defaults
},
},
}
parent := &chart.Chart{
Metadata: &chart.Metadata{Name: "parent"},
Values: map[string]any{},
}
parent.AddDependency(subchart)
// Parent user values don't set keyMapping
injValues := map[string]any{}
tmp, err := util.CoalesceValues(parent, injValues)
if err != nil {
t.Fatalf("Failed to coalesce values: %s", err)
}
inject := common.Values{
"Values": tmp,
"Chart": parent.Metadata,
"Release": common.Values{
"Name": "test-release",
},
}
out, err := Render(parent, inject)
if err != nil {
t.Fatalf("Failed to render templates: %s", err)
}
rendered := out["parent/charts/child/templates/test.yaml"]
if strings.Contains(rendered, "%!s(<nil>)") {
t.Errorf("Rendered output contains %%!s(<nil>), got: %q", rendered)
}
expected := "subPath: fallback"
if rendered != expected {
t.Errorf("Expected %q, got %q", expected, rendered)
}
}

Loading…
Cancel
Save