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"}