# SPDX-License-Identifier: BSD-3-Clause
---
# This expects the variable test_playbook to be set from the outside
- name: Prepare for coverage extraction
  hosts: all
  tasks:
    # Use set_fact to set variables to make them available in all plays
    # 'vars:' Would only set variables for the current play
    - name: Set facts
      set_fact:
        coverage_module: network_connections
        coverage: /root/.local/bin/coverage
        destdir: "remote_coverage/{{ test_playbook }}"

    # This uses variables from the other set_fact task, therefore it needs to
    # be its own task
    - name: Set more facts
      set_fact:
        coverage_file:
          # yamllint disable-line rule:line-length
          ansible-coverage-{{ coverage_module }}-{{ test_playbook | replace('.yml', '') }}

    - name: Debug info
      debug:
        msg:
          # yamllint disable-line rule:line-length
          Getting coverage for '{{ coverage_module }}' with '{{ test_playbook }}'

    - name: Combine data in case old data is left there
      command: "{{ coverage }} combine"
      environment:
        COVERAGE_FILE: "{{ coverage_file }}"
      failed_when: false
      changed_when: false

    - name: Remove old data
      file:
        state: absent
        path: "{{ coverage_file }}"

    - name: Find coverage files to delete
      find:
        path: "{{ ansible_env.HOME }}"
        patterns: ".coverage.*"
        hidden: true
      register: files_to_delete

    - name: Remove old data from files_to_delete
      file:
        path: "{{ item.path }}"
        state: absent
      with_items: "{{ files_to_delete.files }}"

    - name: Copy coveragerc
      copy:
        content: "[run]\ndisable_warnings = no-data-collected\n"
        dest: .coveragerc
        mode: "0644"

    - name: Install latest pip
      pip:
        name: coverage
        extra_args: --user --upgrade

- name: Import the playbook '{{ test_playbook }}'
  import_playbook: "{{ test_playbook }}"
  vars:
    ansible_python_interpreter:
      # yamllint disable-line rule:line-length
      "{{ coverage }} run -p --include /*/modules/network_connections.py,/*/module_utils/network_lsr/*"

- name: Gather coverage data
  hosts: all
  tasks:
    - name: Gather coverage data
      shell: "{{ coverage }} combine .coverage.*"
      environment:
        COVERAGE_FILE: "{{ coverage_file }}"
      changed_when: false

- name: Get coverage data
  hosts: all
  tasks:
    - name: "Fetch {{ coverage_file }}"
      fetch:
        src: "{{ coverage_file }}"
        dest: "{{ destdir }}"
        flat: false
