suite: ssh-svc / http-svc template (Services configuration)
release:
  name: gitea-unittests
  namespace: testing
templates:
  - templates/gitea/ssh-svc.yaml
  - templates/gitea/http-svc.yaml
tests:
  - it: supports adding custom labels to ssh-svc
    template: templates/gitea/ssh-svc.yaml
    set:
      service:
        ssh:
          labels:
            gitea/testkey: testvalue
    asserts:
      - equal:
          path: metadata.labels["gitea/testkey"]
          value: "testvalue"

  - it: keeps existing labels (ssh)
    template: templates/gitea/ssh-svc.yaml
    set:
      service:
        ssh:
          labels: {}
    asserts:
      - exists:
          path: metadata.labels["app"]

  - it: supports adding custom labels to http-svc
    template: templates/gitea/http-svc.yaml
    set:
      service:
        http:
          labels:
            gitea/testkey: testvalue
    asserts:
      - equal:
          path: metadata.labels["gitea/testkey"]
          value: "testvalue"

  - it: keeps existing labels (http)
    template: templates/gitea/http-svc.yaml
    set:
      service:
        http:
          labels: {}
    asserts:
      - exists:
          path: metadata.labels["app"]

  - it: render service.ssh.loadBalancerClass if set and type is LoadBalancer
    template: templates/gitea/ssh-svc.yaml
    set:
      service:
        ssh:
          loadBalancerClass: "example.com/class"
          type: LoadBalancer
          loadBalancerIP: "1.2.3.4"
          loadBalancerSourceRanges:
            - "1.2.3.4/32"
            - "5.6.7.8/32"
    asserts:
      - equal:
          path: spec.loadBalancerClass
          value: "example.com/class"
      - equal:
          path: spec.loadBalancerIP
          value: "1.2.3.4"
      - equal:
          path: spec.loadBalancerSourceRanges
          value: ["1.2.3.4/32", "5.6.7.8/32"]

  - it: does not render when loadbalancer properties are set but type is not loadBalancerClass
    template: templates/gitea/http-svc.yaml
    set:
      service:
        http:
          type: ClusterIP
          loadBalancerClass: "example.com/class"
          loadBalancerIP: "1.2.3.4"
          loadBalancerSourceRanges:
            - "1.2.3.4/32"
            - "5.6.7.8/32"
    asserts:
      - notExists:
          path: spec.loadBalancerClass
      - notExists:
          path: spec.loadBalancerIP
      - notExists:
          path: spec.loadBalancerSourceRanges

  - it: does not render loadBalancerClass by default even when type is LoadBalancer
    template: templates/gitea/http-svc.yaml
    set:
      service:
        http:
          type: LoadBalancer
          loadBalancerIP: "1.2.3.4"
    asserts:
      - notExists:
          path: spec.loadBalancerClass
      - equal:
          path: spec.loadBalancerIP
          value: "1.2.3.4"

  - it: both ssh and http services exist
    templates:
      - templates/gitea/ssh-svc.yaml
      - templates/gitea/http-svc.yaml
    asserts:
      - matchRegex:
          path: metadata.name
          pattern: "^gitea-unittests-(?:ssh|http)$"
      - matchRegex:
          path: spec.ports[0].name
          pattern: "^(?:ssh|http)$"
