From 2f294c65cd50e83bc97844f66896d25408017d48 Mon Sep 17 00:00:00 2001 From: Alexey Artamonov Date: Thu, 27 Aug 2026 15:29:05 +0300 Subject: [PATCH] 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 --- .../tests/keda-scaledobject-arg.yaml | 10 ++++++ .../tests/keda_scaledobject_test.yaml | 36 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 packages/tests/cozy-lib-tests/templates/tests/keda-scaledobject-arg.yaml diff --git a/packages/tests/cozy-lib-tests/templates/tests/keda-scaledobject-arg.yaml b/packages/tests/cozy-lib-tests/templates/tests/keda-scaledobject-arg.yaml new file mode 100644 index 000000000..a38d3df4d --- /dev/null +++ b/packages/tests/cozy-lib-tests/templates/tests/keda-scaledobject-arg.yaml @@ -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 -}} diff --git a/packages/tests/cozy-lib-tests/tests/keda_scaledobject_test.yaml b/packages/tests/cozy-lib-tests/tests/keda_scaledobject_test.yaml index 4a1e31d08..efaf21713 100644 --- a/packages/tests/cozy-lib-tests/tests/keda_scaledobject_test.yaml +++ b/packages/tests/cozy-lib-tests/tests/keda_scaledobject_test.yaml @@ -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"}