# Run unitary test

name: test

on:
  workflow_call:

jobs:

  source-code-checks:
    runs-on: ubuntu-24.04
    timeout-minutes: 5

    permissions:
      contents: read

    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

      # - name: Check formatting with Ruff
      #   uses: chartboost/ruff-action@e18ae971ccee1b2d7bbef113930f00c670b78da4 # v1
      #   with:
      #     args: 'format --check'

      - name: Check linting with Ruff
        uses: chartboost/ruff-action@e18ae971ccee1b2d7bbef113930f00c670b78da4 # v1
        with:
          args: 'check'

      # - name: Static type check
      #   run: |
      #     echo "Skipping static type check for the moment, too much error...";
      #     # pip install pyright
      #     # pyright glances


  test-linux:

    needs: source-code-checks
    # https://github.com/actions/runner-images?tab=readme-ov-file#available-images
    runs-on: ubuntu-24.04
    timeout-minutes: 15
    strategy:
      matrix:
        # Python EOL version are note tested
        # Multiple Python version only tested for Linux
        python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]

    permissions:
      contents: read

    steps:

      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
        with:
          python-version: ${{ matrix.python-version }}
          cache: 'pip'

      - name: Install dependencies
        run: |
          if [ -f dev-requirements.txt ]; then python -m pip install -r dev-requirements.txt; fi
          if [ -f requirements.txt ]; then python -m pip install -r requirements.txt; fi

      - name: Unitary tests
        run: |
          python -m pytest ./tests/test_core.py

  test-windows:

    needs: source-code-checks
    # https://github.com/actions/runner-images?tab=readme-ov-file#available-images
    runs-on: windows-2025
    timeout-minutes: 15
    strategy:
      matrix:
        python-version: ["3.14"]

    permissions:
      contents: read

    steps:

    - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
      with:
        python-version: ${{ matrix.python-version }}
        cache: 'pip'

    - name: Install dependencies
      run: |
        if (Test-Path -PathType Leaf "dev-requirements.txt") { python -m pip install -r dev-requirements.txt }
        if (Test-Path -PathType Leaf "requirements.txt") { python -m pip install -r requirements.txt }
        pip install pytest
        pip install .

    - name: Unitary tests
      run: |
        python -m pytest ./tests/test_core.py

  test-macos:

    needs: source-code-checks
    # https://github.com/actions/runner-images?tab=readme-ov-file#available-images
    runs-on: macos-15
    timeout-minutes: 15
    strategy:
      matrix:
        # Only test the latest stable version
        python-version: ["3.14"]

    permissions:
      contents: read

    steps:

      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
        with:
          python-version: ${{ matrix.python-version }}
          cache: 'pip'

      - name: Install dependencies
        run: |
          if [ -f dev-requirements.txt ]; then python -m pip install -r dev-requirements.txt; fi
          if [ -f requirements.txt ]; then python -m pip install -r requirements.txt; fi

      - name: Unitary tests
        run: |
          python -m pytest ./tests/test_core.py

  # test-freebsd:

  #   needs: source-code-checks
  #   runs-on: ubuntu-latest
  #   strategy:
  #     matrix:
  #       # Only test the latest stable version
  #       python-version: ["3.14"]
  #   steps:

  #     - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

  #     - name: Set up Python ${{ matrix.python-version }}
  #       uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
  #       with:
  #         python-version: ${{ matrix.python-version }}
  #         cache: 'pip'

  #     - name: Install dependencies
  #       uses: vmactions/freebsd-vm@v1
  #       with:
  #         usesh: true
  #         run: |
  #           pkg install -y python3 gcc devel/py-pip
  #           python3 --version
  #           if [ -f dev-requirements.txt ]; then python3 -m pip install -r dev-requirements.txt; fi
  #           if [ -f requirements.txt ]; then python3 -m pip install -r requirements.txt; fi

  #     - name: Unitary tests
  #       uses: vmactions/freebsd-vm@v1
  #       with:
  #         usesh: true
  #         run: |
  #           python3 -m pytest ./tests/test_core.py
