suite: "Test AutoscalingRunnerSet Authentication & Configuration"
templates:
  - autoscalingrunnserset.yaml
tests:
  - it: should require githubConfigUrl
    set:
      scaleset.name: "test"
      auth.githubToken: "gh_token12345"
      controllerServiceAccount.name: "arc"
      controllerServiceAccount.namespace: "arc-system"
    release:
      name: "test-name"
      namespace: "test-namespace"
    asserts:
      - failedTemplate:
          errorMessage: ".Values.auth.url is required"

  - it: should render githubConfigUrl from auth.url
    set:
      scaleset.name: "test"
      auth.url: "https://github.com/org"
      auth.githubToken: "gh_token12345"
      controllerServiceAccount.name: "arc"
      controllerServiceAccount.namespace: "arc-system"
    release:
      name: "test-name"
      namespace: "test-namespace"
    asserts:
      - equal:
          path: spec.githubConfigUrl
          value: "https://github.com/org"

  - it: should trim trailing slash from githubConfigUrl
    set:
      scaleset.name: "test"
      auth.url: "https://github.com/org/"
      auth.githubToken: "gh_token12345"
      controllerServiceAccount.name: "arc"
      controllerServiceAccount.namespace: "arc-system"
    release:
      name: "test-name"
      namespace: "test-namespace"
    asserts:
      - equal:
          path: spec.githubConfigUrl
          value: "https://github.com/org"

  - it: should render default githubConfigSecret from release name
    set:
      scaleset.name: "test"
      auth.url: "https://github.com/org"
      auth.githubToken: "gh_token12345"
      controllerServiceAccount.name: "arc"
      controllerServiceAccount.namespace: "arc-system"
    release:
      name: "test-name"
      namespace: "test-namespace"
    asserts:
      - equal:
          path: spec.githubConfigSecret
          value: "test-name-github-secret"

  - it: should render custom githubConfigSecret when auth.secretName is provided
    set:
      scaleset.name: "test"
      auth.url: "https://github.com/org"
      auth.githubToken: "gh_token12345"
      auth.secretName: "custom-github-secret"
      controllerServiceAccount.name: "arc"
      controllerServiceAccount.namespace: "arc-system"
    release:
      name: "test-name"
      namespace: "test-namespace"
    asserts:
      - equal:
          path: spec.githubConfigSecret
          value: "custom-github-secret"

  - it: should render default runnerGroup when not configured
    set:
      scaleset.name: "test"
      auth.url: "https://github.com/org"
      auth.githubToken: "gh_token12345"
      controllerServiceAccount.name: "arc"
      controllerServiceAccount.namespace: "arc-system"
    release:
      name: "test-name"
      namespace: "test-namespace"
    asserts:
      - equal:
          path: spec.runnerGroup
          value: "default"

  - it: should render custom runnerGroup when configured
    set:
      scaleset.name: "test"
      auth.url: "https://github.com/org"
      auth.githubToken: "gh_token12345"
      scaleset.runnerGroup: "custom-group"
      controllerServiceAccount.name: "arc"
      controllerServiceAccount.namespace: "arc-system"
    release:
      name: "test-name"
      namespace: "test-namespace"
    asserts:
      - equal:
          path: spec.runnerGroup
          value: "custom-group"

  - it: should render runnerGroup with special characters
    set:
      scaleset.name: "test"
      auth.url: "https://github.com/org"
      auth.githubToken: "gh_token12345"
      scaleset.runnerGroup: "my-custom-runner-group-123"
      controllerServiceAccount.name: "arc"
      controllerServiceAccount.namespace: "arc-system"
    release:
      name: "test-name"
      namespace: "test-namespace"
    asserts:
      - equal:
          path: spec.runnerGroup
          value: "my-custom-runner-group-123"

  - it: should render runnerScaleSetName from scaleset.name
    set:
      scaleset.name: "my-runner-set"
      auth.url: "https://github.com/org"
      auth.githubToken: "gh_token12345"
      controllerServiceAccount.name: "arc"
      controllerServiceAccount.namespace: "arc-system"
    release:
      name: "test-name"
      namespace: "test-namespace"
    asserts:
      - equal:
          path: spec.runnerScaleSetName
          value: "my-runner-set"

  - it: should use release name as metadata name when runnerScaleSetName not provided
    set:
      auth.url: "https://github.com/org"
      auth.githubToken: "gh_token12345"
      controllerServiceAccount.name: "arc"
      controllerServiceAccount.namespace: "arc-system"
    release:
      name: "release-name"
      namespace: "test-namespace"
    asserts:
      - equal:
          path: metadata.name
          value: "release-name"

  - it: should use scaleset.name for spec.runnerScaleSetName when provided
    set:
      scaleset.name: "spec-runner-name"
      auth.url: "https://github.com/org"
      auth.githubToken: "gh_token12345"
      controllerServiceAccount.name: "arc"
      controllerServiceAccount.namespace: "arc-system"
    release:
      name: "release-name"
      namespace: "test-namespace"
    asserts:
      - equal:
          path: spec.runnerScaleSetName
          value: "spec-runner-name"

  - it: should not normalize underscores in runnerScaleSetName (underscores are preserved)
    set:
      scaleset.name: "my_runner_set"
      auth.url: "https://github.com/org"
      auth.githubToken: "gh_token12345"
      controllerServiceAccount.name: "arc"
      controllerServiceAccount.namespace: "arc-system"
    release:
      name: "test-name"
      namespace: "test-namespace"
    asserts:
      - equal:
          path: spec.runnerScaleSetName
          value: "my_runner_set"

  - it: should reject metadata name exceeding 45 characters
    set:
      runnerScaleSetName: "this-is-a-very-long-name-that-exceeds-forty-five-characters-long"
      auth.url: "https://github.com/org"
      auth.githubToken: "gh_token12345"
      controllerServiceAccount.name: "arc"
      controllerServiceAccount.namespace: "arc-system"
    release:
      name: "test-name"
      namespace: "test-namespace"
    asserts:
      - failedTemplate:
          errorMessage: "Autoscaling runner set name must have up to 45 characters"

  - it: should handle githubConfigUrl with enterprise GitHub instance
    set:
      scaleset.name: "test"
      auth.url: "https://github.enterprise.com/api/v3"
      auth.githubToken: "gh_token12345"
      controllerServiceAccount.name: "arc"
      controllerServiceAccount.namespace: "arc-system"
    release:
      name: "test-name"
      namespace: "test-namespace"
    asserts:
      - equal:
          path: spec.githubConfigUrl
          value: "https://github.enterprise.com/api/v3"

  - it: should render all configuration together
    set:
      runnerScaleSetName: "prod-runners"
      scaleset.name: "prod-spec-name"
      auth.url: "https://github.com/myorg"
      auth.githubToken: "gh_token12345"
      auth.secretName: "gh-token-secret"
      scaleset.runnerGroup: "prod-group"
      controllerServiceAccount.name: "arc"
      controllerServiceAccount.namespace: "arc-system"
    release:
      name: "prod-scale-set"
      namespace: "arc"
    asserts:
      - equal:
          path: spec.githubConfigUrl
          value: "https://github.com/myorg"
      - equal:
          path: spec.githubConfigSecret
          value: "gh-token-secret"
      - equal:
          path: spec.runnerGroup
          value: "prod-group"
      - equal:
          path: spec.runnerScaleSetName
          value: "prod-spec-name"
      - equal:
          path: metadata.name
          value: "prod-runners"
      - equal:
          path: metadata.namespace
          value: "arc"
