suite: externalInterface metadata test
templates:
  - common.yaml
release:
  name: release-name
tests:
  - it: should generate correct annotations without selector
    set:
      # Simulate middleware injection
      ixExternalInterfacesConfiguration:
        - '{"cniVersion": "0.3.1", "name": "ix-release-name-0", "type": "macvlan", "master": "ens3s0", "ipam": {"type": "dhcp"}}'
        - '{"cniVersion": "0.3.1", "name": "ix-release-name-0", "type": "macvlan", "master": "ens4s0", "ipam": {"type": "dhcp"}}'
      ixExternalInterfacesConfigurationNames:
        - ix-release-name-0
        - ix-release-name-1
      scaleExternalInterface:
        - hostInterface: enp0s3
          ipam:
            type: dhcp
        - hostInterface: enp0s4
          ipam:
            type: dhcp
      image: &image
        repository: nginx
        tag: 1.21.4
        pullPolicy: IfNotPresent
      workload:
        workload-name1:
          enabled: true
          primary: true
          type: Deployment
          podSpec:
            containers:
              container-name1:
                enabled: true
                primary: true
                imageSelector: image
                probes: &probes
                  liveness:
                    enabled: false
                  readiness:
                    enabled: false
                  startup:
                    enabled: false
        workload-name2:
          enabled: true
          primary: false
          type: Deployment
          podSpec:
            containers:
              container-name1:
                enabled: true
                primary: true
                imageSelector: image
                probes: *probes
    asserts:
      - documentIndex: &deploymentDoc 2
        isKind:
          of: Deployment
      - documentIndex: *deploymentDoc
        isAPIVersion:
          of: apps/v1
      - documentIndex: *deploymentDoc
        equal:
          path: metadata.name
          value: release-name-common-test
      - documentIndex: *deploymentDoc
        isSubset:
          path: spec.template.metadata.annotations
          content:
            k8s.v1.cni.cncf.io/networks: ix-release-name-0, ix-release-name-1
      - documentIndex: &otherDeploymentDoc 3
        isKind:
          of: Deployment
      - documentIndex: *otherDeploymentDoc
        isAPIVersion:
          of: apps/v1
      - documentIndex: *otherDeploymentDoc
        equal:
          path: metadata.name
          value: release-name-common-test-workload-name2
      - documentIndex: *otherDeploymentDoc
        isNotSubset:
          path: spec.template.metadata.annotations
          content:
            k8s.v1.cni.cncf.io/networks: ix-release-name-0, ix-release-name-1

  - it: should generate correct annotations with targetSelectAll
    set:
      # Simulate middleware injection
      ixExternalInterfacesConfiguration:
        - '{"cniVersion": "0.3.1", "name": "ix-release-name-0", "type": "macvlan", "master": "ens3s0", "ipam": {"type": "dhcp"}}'
        - '{"cniVersion": "0.3.1", "name": "ix-release-name-0", "type": "macvlan", "master": "ens4s0", "ipam": {"type": "dhcp"}}'
      ixExternalInterfacesConfigurationNames:
        - ix-release-name-0
        - ix-release-name-1
      scaleExternalInterface:
        - hostInterface: enp0s3
          ipam:
            type: dhcp
          targetSelectAll: true
        - hostInterface: enp0s4
          ipam:
            type: dhcp
          targetSelectAll: true
      image: *image
      workload:
        workload-name1:
          enabled: true
          primary: true
          type: Deployment
          podSpec:
            containers:
              container-name1:
                enabled: true
                primary: true
                imageSelector: image
                probes: *probes
        workload-name2:
          enabled: true
          primary: false
          type: Job
          podSpec:
            restartPolicy: Never
            containers:
              container-name1:
                enabled: true
                primary: true
                imageSelector: image
                probes: *probes
    asserts:
      - documentIndex: *deploymentDoc
        isKind:
          of: Deployment
      - documentIndex: *deploymentDoc
        isAPIVersion:
          of: apps/v1
      - documentIndex: *deploymentDoc
        equal:
          path: metadata.name
          value: release-name-common-test
      - documentIndex: *deploymentDoc
        isSubset:
          path: spec.template.metadata.annotations
          content:
            k8s.v1.cni.cncf.io/networks: ix-release-name-0, ix-release-name-1
      - documentIndex: &jobDoc 3
        isKind:
          of: Job
      - documentIndex: *jobDoc
        isAPIVersion:
          of: batch/v1
      - documentIndex: *jobDoc
        equal:
          path: metadata.name
          value: release-name-common-test-workload-name2
      - documentIndex: *jobDoc
        isSubset:
          path: spec.template.metadata.annotations
          content:
            k8s.v1.cni.cncf.io/networks: ix-release-name-0, ix-release-name-1

  - it: should generate correct annotations with targetSelector
    set:
      # Simulate middleware injection
      ixExternalInterfacesConfiguration:
        - '{"cniVersion": "0.3.1", "name": "ix-release-name-0", "type": "macvlan", "master": "ens3s0", "ipam": {"type": "dhcp"}}'
        - '{"cniVersion": "0.3.1", "name": "ix-release-name-0", "type": "macvlan", "master": "ens4s0", "ipam": {"type": "dhcp"}}'
      ixExternalInterfacesConfigurationNames:
        - ix-release-name-0
        - ix-release-name-1
      scaleExternalInterface:
        - hostInterface: enp0s3
          ipam:
            type: dhcp
          targetSelector:
            - workload-name1
            - workload-name2
        - hostInterface: enp0s4
          ipam:
            type: dhcp
          targetSelector:
            - workload-name1
      image: *image
      workload:
        workload-name1:
          enabled: true
          primary: true
          type: Deployment
          podSpec:
            containers:
              container-name1:
                enabled: true
                primary: true
                imageSelector: image
                probes: *probes
        workload-name2:
          enabled: true
          primary: false
          type: CronJob
          schedule: "*/1 * * * *"
          podSpec:
            restartPolicy: Never
            containers:
              container-name1:
                enabled: true
                primary: true
                imageSelector: image
                probes: *probes
    asserts:
      - documentIndex: *deploymentDoc
        isKind:
          of: Deployment
      - documentIndex: *deploymentDoc
        isAPIVersion:
          of: apps/v1
      - documentIndex: *deploymentDoc
        equal:
          path: metadata.name
          value: release-name-common-test
      - documentIndex: *deploymentDoc
        isSubset:
          path: spec.template.metadata.annotations
          content:
            k8s.v1.cni.cncf.io/networks: ix-release-name-0, ix-release-name-1
      - documentIndex: &cronJobDoc 3
        isKind:
          of: CronJob
      - documentIndex: *cronJobDoc
        isAPIVersion:
          of: batch/v1
      - documentIndex: *cronJobDoc
        equal:
          path: metadata.name
          value: release-name-common-test-workload-name2
      - documentIndex: *cronJobDoc
        isSubset:
          path: spec.jobTemplate.spec.template.metadata.annotations
          content:
            k8s.v1.cni.cncf.io/networks: ix-release-name-0
