name: Test

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

env:
  CI: true

permissions:
  contents: read

jobs:
  pretest:
    name: Pre-Test
    runs-on: ubuntu-latest

    steps:
      - name: Clone Repository
        uses: actions/checkout@v6

      - name: Set Node.js Version
        uses: actions/setup-node@v6
        with:
          node-version: '24'

      - name: Install Dependencies
        run: npm ci

      - name: Run Tests
        run: npm run pretest

  browser:
    name: Browser
    runs-on: ubuntu-latest

    steps:
      - name: Clone Repository
        uses: actions/checkout@v6

      - name: Set Node.js Version
        uses: actions/setup-node@v6
        with:
          node-version: '24'

      - name: Install Dependencies
        run: npm ci

      - name: Run Tests
        run: npm run test-browser

  node:
    name: Node
    runs-on: ubuntu-latest

    steps:
      - name: Clone Repository
        uses: actions/checkout@v6

      - name: Set Node.js Version
        uses: actions/setup-node@v6
        with:
          node-version: '24'

      - name: Install Dependencies
        run: npm ci

      - name: Run Tests
        run: npm run test-node

  build:
    name: Build
    runs-on: ubuntu-latest

    steps:
      - name: Clone Repository
        uses: actions/checkout@v6

      - name: Set Node.js Version
        uses: actions/setup-node@v6
        with:
          node-version: '24'

      - name: Install Dependencies
        run: npm ci

      - name: Build the Package
        run: npm run build-package

  rendering:
    name: Rendering
    runs-on: ubuntu-latest

    steps:
      - name: Clone Repository
        uses: actions/checkout@v6

      - name: Set Node.js Version
        uses: actions/setup-node@v6
        with:
          node-version: '24'

      - name: Install Dependencies
        run: npm ci

      - name: Run Tests
        run: npm run test-rendering

      - name: Store Rendering Test Artifacts
        if: ${{ always() }}
        uses: actions/upload-artifact@v7
        with:
          name: rendering-tests
          path: test/rendering/cases/**/actual.png