# yaml-language-server: $schema=https://raw.githubusercontent.com/helm-unittest/helm-unittest/main/schema/helm-testsuite.json
suite: test extraManifests
templates:
  - extra-objects.yaml
tests:
  - it: should handle empty manifests gracefully
    set:
      extraManifests: []
    asserts:
      - hasDocuments:
          count: 0

  - it: should process a single string manifest
    set:
      extraManifests:
        - |
          apiVersion: v1
          kind: ConfigMap
          metadata:
            name: test-cm
    asserts:
      - isKind:
          of: ConfigMap
      - equal:
          path: metadata.name
          value: test-cm

  - it: should process string manifest with tpl values
    set:
      name: myapp
      extraManifests:
        - |
          apiVersion: v1
          kind: ConfigMap
          metadata:
            name: {{ .Values.name }}-cm
    asserts:
      - equal:
          path: metadata.name
          value: myapp-cm

  - it: should process string manifest with tpl function
    set:
      name: MyApp
      extraManifests:
        - |
          apiVersion: v1
          kind: ConfigMap
          metadata:
            name: {{ lower .Values.name }}-cm
    asserts:
      - equal:
          path: metadata.name
          value: myapp-cm

  - it: should process a single map manifest
    set:
      extraManifests:
        - apiVersion: v1
          kind: Secret
          metadata:
            name: test-secret
    asserts:
      - equal:
          path: kind
          value: Secret
      - equal:
          path: metadata.name
          value: test-secret

  - it: should process map manifest with tpl values
    set:
      env: prod
      extraManifests:
        - apiVersion: v1
          kind: ConfigMap
          metadata:
            name: config-{{ .Values.env }}
    asserts:
      - equal:
          path: metadata.name
          value: config-prod

  - it: should process multiple slice-based manifests with tpl
    set:
      version: v1
      extraManifests:
        - |
          apiVersion: v1
          kind: ConfigMap
          metadata:
            name: cm-{{ .Values.version }}
        - apiVersion: v1
          kind: Secret
          metadata:
            name: secret-{{ .Values.version }}
    asserts:
      - hasDocuments:
          count: 2
      - equal:
          path: metadata.name
          value: cm-v1
        documentSelector:
          path: kind
          value: ConfigMap
      - equal:
          path: metadata.name
          value: secret-v1
        documentSelector:
          path: kind
          value: Secret

  - it: should handle multiple map-based manifests with tpl
    set:
      app: myapp
      extraManifests:
        cm1:
          apiVersion: v1
          kind: ConfigMap
          metadata:
            name: "{{ .Values.app }}-cm1"
        secret1:
          apiVersion: v1
          kind: Secret
          metadata:
            name: "{{ .Values.app }}-secret1"
    asserts:
      - hasDocuments:
          count: 2
      - equal:
          path: metadata.name
          value: myapp-cm1
        documentSelector:
          path: kind
          value: ConfigMap
      - equal:
          path: metadata.name
          value: myapp-secret1
        documentSelector:
          path: kind
          value: Secret
