name: Unit tests

on:
  push:
    branches:
      - main
  pull_request:
  schedule:
    - cron: '59 23 * * SUN'  # Runs at midnight on Sunday

jobs:

  code-format:
    runs-on: ubuntu-latest
    defaults:
      run:
        shell: bash -l {0}
    steps:

      - name: Checkout Repository
        uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.10'
          cache: 'pip' # caching pip dependencies

      - name: Pip install
        run: pip install black[jupyter]==24.2.0 blacken-docs

      - name: Pip list
        run: pip list

      - name: Code Formatting
        run: black . --check

  browsergym-workarena-fast:
    runs-on: ubuntu-22.04
  
    defaults:
      run:
        shell: bash -l {0}
  
    steps:
  
      - name: Checkout Repository
        uses: actions/checkout@v4
  
      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.12'
          cache: 'pip' # caching pip dependencies
  
      - name: Pip install
        working-directory: ./dev
        run: pip install -r requirements.txt
  
      - name: Pip list
        run: pip list
        
      - name: Install Playwright
        run: playwright install chromium --with-deps
  
      - name: Run non-slow browsergym-workarena Unit Tests
        env:
          SNOW_INSTANCE_URL: ${{ secrets.SNOW_INSTANCE_URL }}
          SNOW_INSTANCE_UNAME: ${{ secrets.SNOW_INSTANCE_UNAME }}
          SNOW_INSTANCE_PWD: ${{ secrets.SNOW_INSTANCE_PWD }}
        run: pytest -n 5 --durations=10 -m 'not slow and not pricy' --slowmo 1000 -v tests

  browsergym-workarena-slow:
    runs-on: ubuntu-latest

    defaults:
      run:
        shell: bash -l {0}

    steps:

      - name: Checkout Repository
        uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.10'
          cache: 'pip' # caching pip dependencies

      - name: Pip install
        working-directory: ./dev
        run: pip install -r requirements.txt

      - name: Pip list
        run: pip list

      - name: Install Playwright
        run: playwright install --with-deps

      - name: Run slow browsergym-workarena Unit Tests
        env:
          SNOW_INSTANCE_URL: ${{ secrets.SNOW_INSTANCE_URL }}
          SNOW_INSTANCE_UNAME: ${{ secrets.SNOW_INSTANCE_UNAME }}
          SNOW_INSTANCE_PWD: ${{ secrets.SNOW_INSTANCE_PWD }}
        run: pytest -n 5 --durations=10 -m 'slow and not pricy' --slowmo 1000 -v tests
  
  end-to-end-tests:
    runs-on: ubuntu-latest
    if: github.event_name == 'schedule'
    defaults:
      run:
        shell: bash -l {0}
    steps:
      - name: Checkout Repository
        uses: actions/checkout@v4
      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.10'
          cache: 'pip'
      - name: Pip install
        working-directory: ./dev
        run: pip install -r requirements.txt
      - name: Pip list
        run: pip list
      - name: Install Playwright
        run: playwright install --with-deps
      - name: Run E2E Tests
        env:
          SNOW_INSTANCE_URL: ${{ secrets.SNOW_INSTANCE_URL }}
          SNOW_INSTANCE_UNAME: ${{ secrets.SNOW_INSTANCE_UNAME }}
          SNOW_INSTANCE_PWD: ${{ secrets.SNOW_INSTANCE_PWD }}
        run: pytest -n 5 --durations=10 -m 'pricy' --slowmo 1800 -v tests
