name: Test

on:
  push:
    branches:
      - main
  pull_request:
    types: [opened, synchronize]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ['3.7', '3.8', '3.9', '3.10', '3.11.0-alpha.7 - 3.11']
        django-version: ['<3.0', '<3.1', '<3.2', '<3.3', '<4.0', '<4.1']

    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python-version }}
      - uses: actions/cache@v3
        id: cache
        with:
          path: ${{ env.pythonLocation }}
          key: ${{ runner.os }}-python-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }}-root
      - name: Install Dependencies
        if: steps.cache.outputs.cache-hit != 'true'
        run: pip install -e .[all,dev,test]
      - name: Install Django
        run: pip install "Django${{ matrix.django-version }}"
      - name: Install Pydantic
        run: pip install pydantic pydantic[email]
      - name: Install tests
        run: pip install pytest pytest-django
      - name: Formatting
        run: bash scripts/format-imports.sh
      - name: Test
        run: bash scripts/test.sh
      - name: Upload coverage
        uses: codecov/codecov-action@v3
