name: Tests

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  test-matrix:
    name: test-matrix
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [18.x, 20.x]

    steps:
    - name: Checkout code
      uses: actions/checkout@v4

    - name: Setup Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v6
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'

    - name: Install dependencies
      run: npm ci --legacy-peer-deps

    - name: Run quick tests
      run: npm test

    - name: Check test coverage
      run: npm run test:coverage

  # Summary job that branch protection can depend on
  test:
    name: test
    runs-on: ubuntu-latest
    needs: test-matrix
    if: always()
    steps:
      - name: Check test results
        run: |
          if [ "${{ needs.test-matrix.result }}" != "success" ]; then
            echo "Tests failed"
            exit 1
          fi
          echo "All tests passed"