test(cozy-lib): cover every fail-closed guard of the keda.scaledObject helper

The helper validates ~10 required inputs but the suite only exercised three
rejection paths (non-dict arg, missing scaleTargetRef.name, inverted bounds).
Add a parameterised fixture that builds a fully-valid argument dict and drops
exactly one required field per case, and assert the fail message for name,
scaleTargetRef.kind, scaleTargetRef.apiVersion, query, threshold and
serverAddress. The helper's rejection contract is now executable-documented in
full rather than sampled.

Signed-off-by: Alexey Artamonov <aleksei.artamonov@aenix.io>
This commit is contained in:
Alexey Artamonov committed 2026-09-04 23:18:47 +03:00
1 parent 42a533fc50
commit 2f294c65cd
2 files changed
+46

No files matched your search

@@ -0,0 +1,10 @@
{{- if .Values.omit -}}
{{- /* Build a fully-valid argument dict, then drop exactly one required field
named by .Values.omit, to exercise each fail-closed guard in isolation. */ -}}
{{- $ref := dict "apiVersion" "postgresql.cnpg.io/v1" "kind" "Cluster" "name" "db" -}}
{{- if eq .Values.omit "kind" }}{{- $_ := unset $ref "kind" }}{{- end -}}
{{- if eq .Values.omit "apiVersion" }}{{- $_ := unset $ref "apiVersion" }}{{- end -}}
{{- $arg := dict "name" "db" "scaleTargetRef" $ref "minReplicaCount" 2 "maxReplicaCount" 6 "serverAddress" "http://vmselect.example.svc:8481/select/0/prometheus" "query" "sum(x) + 150" "threshold" "150" -}}
{{- $arg = unset $arg .Values.omit -}}
{{ include "cozy-lib.keda.scaledObject" $arg }}
{{- end -}}
@@ -6,6 +6,7 @@ templates:
- templates/tests/keda-scaledobject-nondict.yaml
- templates/tests/keda-scaledobject-params.yaml
- templates/tests/keda-scaledobject-bounds.yaml
- templates/tests/keda-scaledobject-arg.yaml
release:
name: postgres-db
@@ -117,3 +118,38 @@ tests:
asserts:
- failedTemplate:
errorMessage: "cozy-lib.keda.scaledObject: maxReplicaCount must be >= minReplicaCount"
# Remaining fail-closed guards (one required field dropped per case via the
# keda-scaledobject-arg fixture) so the helper's full rejection contract is
# executable-documented, not just sampled.
- it: fails closed when name is missing
templates: [templates/tests/keda-scaledobject-arg.yaml]
set: {omit: name}
asserts:
- failedTemplate: {errorMessage: "cozy-lib.keda.scaledObject: name is required"}
- it: fails closed when scaleTargetRef.kind is missing
templates: [templates/tests/keda-scaledobject-arg.yaml]
set: {omit: kind}
asserts:
- failedTemplate: {errorMessage: "cozy-lib.keda.scaledObject: scaleTargetRef.kind is required"}
- it: fails closed when scaleTargetRef.apiVersion is missing
templates: [templates/tests/keda-scaledobject-arg.yaml]
set: {omit: apiVersion}
asserts:
- failedTemplate: {errorMessage: "cozy-lib.keda.scaledObject: scaleTargetRef.apiVersion is required"}
- it: fails closed when query is missing
templates: [templates/tests/keda-scaledobject-arg.yaml]
set: {omit: query}
asserts:
- failedTemplate: {errorMessage: "cozy-lib.keda.scaledObject: query is required"}
- it: fails closed when threshold is missing
templates: [templates/tests/keda-scaledobject-arg.yaml]
set: {omit: threshold}
asserts:
- failedTemplate: {errorMessage: "cozy-lib.keda.scaledObject: threshold is required"}
- it: fails closed when serverAddress is missing
templates: [templates/tests/keda-scaledobject-arg.yaml]
set: {omit: serverAddress}
asserts:
- failedTemplate: {errorMessage: "cozy-lib.keda.scaledObject: serverAddress is required"}