name: Test
on:
  pull_request: {}
  push:
    branches: [livekit, full-mesh]
jobs:
  vitest:
    name: Run unit tests
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
      - name: Enable Corepack
        run: corepack enable
      - name: Yarn cache
        uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
        with:
          cache: "yarn"
          node-version-file: ".node-version"
      - name: Install dependencies
        run: "yarn install --immutable"
      - name: Vitest
        run: "yarn run test:coverage"
      - name: Upload to codecov
        uses: codecov/codecov-action@0565863a31f2c772f9f0395002a31e3f06189574 # v5
        env:
          CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
        with:
          flags: unittests
          fail_ci_if_error: true
  playwright:
    name: Run end-to-end tests
    timeout-minutes: 10
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
      - name: Enable Corepack
        run: corepack enable
      - uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
        with:
          cache: "yarn"
          node-version-file: ".node-version"
      - name: Install dependencies
        run: yarn install --immutable
      - name: Install Playwright Browsers
        run: yarn playwright install --with-deps
      - name: Run backend components
        run: |
          docker compose -f playwright-backend-docker-compose.yml up -d
          docker ps
      - name: Copy config file
        run: cp config/config.devenv.json public/config.json
      - name: Run Playwright tests
        run: yarn playwright test
      - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
        if: ${{ !cancelled() }}
        with:
          name: playwright-report
          path: playwright-report/
          retention-days: 3
