name: Test

on: [push, pull_request]

jobs:
  test-package:
    name: Test Package (Python ${{ matrix.python-version }}, Django ${{ matrix.django-version }})
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        python-version:
        - '3.10'
        - '3.11'
        - '3.12'
        django-version:
        - '4.2'
        - '5.0'
        - '5.1'
        - 'main'
        include:
          # https://docs.djangoproject.com/en/dev/faq/install/#what-python-version-can-i-use-with-django
          - python-version: '3.8'
            django-version: '4.2'
          - python-version: '3.9'
            django-version: '4.2'

    steps:
    - uses: actions/checkout@v4

    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v5
      with:
        python-version: ${{ matrix.python-version }}


    - name: Get pip cache dir
      id: pip-cache
      run: |
        echo "::set-output name=dir::$(pip cache dir)"

    - name: Cache
      uses: actions/cache@v3
      with:
        path: ${{ steps.pip-cache.outputs.dir }}
        key:
          ${{ matrix.python-version }}-v1-${{ hashFiles('**/pyproject.toml') }}-${{ hashFiles('**/tox.ini') }}
        restore-keys: |
          ${{ matrix.python-version }}-v1-

    - name: Install Python dependencies
      run: |
        python -m pip install --upgrade pip
        python -m pip install --upgrade tox tox-gh-actions

    - name: Tox tests
      run: |
        tox -v
      env:
        DJANGO: ${{ matrix.django-version }}

    - name: Upload coverage
      uses: codecov/codecov-action@v3
      with:
        name: Python ${{ matrix.python-version }}

  test-demo-rp:
    name: Test Demo Relying Party
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        node-version:
          - "18.x"
          - "20.x"
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Set up NodeJS
        uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node-version }}

      - name: Install dependencies
        run: npm install
        working-directory: tests/app/rp

      - name: Run Lint
        run: npm run lint
        working-directory: tests/app/rp

      - name: Run build
        run: npm run build
        working-directory: tests/app/rp

  success:
    needs:
      - test-package
      - test-demo-rp
    runs-on: ubuntu-latest
    name: Test successful
    steps:
      - name: Success
        run: echo Test successful
