---
parameters:
  - name: group_number
    type: number
    default: 1
  - name: number_of_groups
    type: number
    default: 1
  - name: scenario
    type: string
    default: fedora-latest
  - name: ansible_version
    type: string
    default: ""
  - name: python_version
    type: string
    default: 3.x
  - name: build_number
    type: string

jobs:
- job: Test_Group${{ parameters.group_number }}
  displayName: Run playbook tests ${{ parameters.scenario }} (${{ parameters.group_number }}/${{ parameters.number_of_groups }})
  timeoutInMinutes: 240
  variables:
  - template: variables.yaml
  - template: variables_${{ parameters.scenario }}.yaml
  steps:
  - task: UsePythonVersion@0
    inputs:
      versionSpec: '${{ parameters.python_version }}'

  - script: |
      pip install \
        "molecule-plugins[docker]" \
        "requests<2.29" \
        "ansible${{ parameters.ansible_version }}"
    retryCountOnTaskFailure: 5
    displayName: Install molecule and Ansible

  - script: ansible-galaxy collection install community.docker ansible.posix
    retryCountOnTaskFailure: 5
    displayName: Install Ansible collections

  - script: pip install -r requirements-tests.txt
    retryCountOnTaskFailure: 5
    displayName: Install dependencies

  - script: |
      rm -rf ~/ansible
      mkdir -p ~/.ansible/roles ~/.ansible/library ~/.ansible/module_utils
      cp -a roles/* ~/.ansible/roles
      cp -a plugins/modules/* ~/.ansible/library
      cp -a plugins/module_utils/* ~/.ansible/module_utils
      molecule create -s ${{ parameters.scenario }}
    retryCountOnTaskFailure: 5
    displayName: Setup test container
    env:
      ANSIBLE_LIBRARY: ./molecule

  - script: |
      python utils/check_test_configuration.py ${{ parameters.scenario }}
    displayName: Check scenario test configuration

  - script: |
      pytest \
        -m "playbook" \
        --verbose \
        --color=yes \
        --splits=${{ parameters.number_of_groups }} \
        --group=${{ parameters.group_number }} \
        --junit-xml=TEST-results-group-${{ parameters.group_number }}.xml
    displayName: Run playbook tests
    env:
      IPA_SERVER_HOST: ${{ parameters.scenario }}
      RUN_TESTS_IN_DOCKER: true
      IPA_DISABLED_MODULES: ${{ variables.ipa_disabled_modules }}
      IPA_DISABLED_TESTS: ${{ variables.ipa_disabled_tests }}
      IPA_ENABLED_MODULES: ${{ variables.ipa_enabled_modules }}
      IPA_ENABLED_TESTS: ${{ variables.ipa_enabled_tests }}
      IPA_VERBOSITY: "-vvv"

  - task: PublishTestResults@2
    inputs:
      mergeTestResults: true
      testRunTitle: PlaybookTests-Build${{ parameters.build_number }}
    condition: succeededOrFailed()
