name: Backend Tests
on:
  push:
    branches:
      - mealie-next
  pull_request:
    branches:
      - mealie-next
    types: [synchronize, opened, reopened, ready_for_review]

jobs:
  tests:
    runs-on: ubuntu-latest

    env:
      PRODUCTION: false

    strategy:
      fail-fast: true
      matrix:
        # Database ENV Variablse as Specified by Mealie
        Database: [sqlite, postgres]

    # Services
    services:
      postgres:
        image: postgres
        env:
          POSTGRES_USER: mealie
          POSTGRES_PASSWORD: mealie
          POSTGRES_DB: mealie
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
        ports:
          - 5432:5432

    # Steps
    steps:
      #----------------------------------------------
      #       check-out repo and set-up python
      #----------------------------------------------
      - name: Check out repository
        uses: actions/checkout@v2
      - name: Set up python
        uses: actions/setup-python@v2
        with:
          python-version: "3.10"
      #----------------------------------------------
      #  -----  install & configure poetry  -----
      #----------------------------------------------
      - name: Install Poetry
        uses: snok/install-poetry@v1
        with:
          virtualenvs-create: true
          virtualenvs-in-project: true
      #----------------------------------------------
      #       load cached venv if cache exists
      #----------------------------------------------
      - name: Load cached venv
        id: cached-poetry-dependencies
        uses: actions/cache@v2
        with:
          path: .venv
          key: venv-${{ runner.os }}-${{ hashFiles('**/poetry.lock') }}
      #----------------------------------------------
      # install dependencies if cache does not exist
      #----------------------------------------------
      - name: Install dependencies
        run: |
          sudo apt-get install libsasl2-dev libldap2-dev libssl-dev
          poetry install
          poetry add "psycopg2-binary==2.8.6"
        if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
      #----------------------------------------------
      #              run test suite
      #----------------------------------------------
      - name: Formatting (Black & isort)
        run: |
          poetry run black . --check
          poetry run isort . --check-only
      - name: Lint (Flake8)
        run: |
          make backend-lint
      - name: Mypy Typecheck
        run: |
          make backend-typecheck
      - name: Pytest
        env:
          DB_ENGINE: ${{ matrix.Database }}
          POSTGRES_SERVER: localhost
        run: |
          make backend-test
