# SPDX-License-Identifier: BSD-3-Clause
---
- hosts: all
  name: Setup for test running
  tasks:
    - name: Install EPEL on enterprise Linux for python2-mock
      command: yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-{{ ansible_distribution_major_version }}.noarch.rpm
      args:
        warn: false
        creates: /etc/yum.repos.d/epel.repo
      when:
        - ansible_distribution in ['RedHat', 'CentOS']
        - ansible_distribution_major_version in ['6', '7']

    - name: Install dependencies
      package:
        name: "{{ item }}"
        state: present
      # Ignore error because some package names might not be available
      ignore_errors: true
      loop:
        - NetworkManager-libnm
        - python2-gobject-base
        - python3-gobject-base
        - python-gobject-base
        - python2-mock

- hosts: all
  name: execute python unit tests
  tasks:
    - name: Copy python modules
      copy:
        src: "{{ item }}"
        dest: /tmp/test-unit-1/
        local_follow: false
      loop:
      - ../library/network_connections.py
      - unit/test_network_connections.py
      - ../module_utils/network_lsr

    - name: Create helpers directory
      file:
        state: directory
        dest: /tmp/test-unit-1/helpers

    - name: Copy helpers
      copy:
        src: "{{ item }}"
        dest: /tmp/test-unit-1/helpers
        mode: 0755
      with_fileglob:
        - unit/helpers/*

    - name: Check if python2 is available
      command: python2 --version
      ignore_errors: true
      register: python2_available
      when: true

    - name: Run python2 unit tests
      command: python2 /tmp/test-unit-1/test_network_connections.py --verbose
      when: python2_available is succeeded
      register: python2_result

    - name: Check if python3 is available
      command: python3 --version
      ignore_errors: true
      register: python3_available
      when: true

    - name: Run python3 unit tests
      command: python3 /tmp/test-unit-1/test_network_connections.py --verbose
      when: python3_available is succeeded
      register: python3_result

    - name: Show python2 unit test results
      debug:
        var: python2_result.stderr_lines
      when: python2_result is succeeded

    - name: Show python3 unit test results
      debug:
        var: python3_result.stderr_lines
      when: python3_result is succeeded

    - name: Ensure that at least one python unit test ran
      fail:
        msg: Tests did not run with python2 or python3
      when: not (python2_available is succeeded or python3_available is succeeded)
