# This workflow will do a clean installation of node dependencies, cache/restore them, run frontend tests across different versions of node (here 22.x)
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs

name: Frontend Testing

# Workflow runs when:
#   - a frontend js/ts/vue/css file on "dev" changes
#   - a non-draft PR to "dev" with frontend js/ts/vue/css files is opened, is reopened, or changes
#   - a draft PR to "dev" with frontend js/ts/vue/css files is marked as ready for review
on:
    push:
      branches: [ "dev", "main" ]
      paths:
        - 'frontend/src/**.[jt]s'
        - 'frontend/src/**.vue'
        - 'frontend/src/**.css'
        - 'frontend/tests/**.[jt]s'
        - 'frontend/tests/**.vue'
        - 'frontend/tests/**.css'
        - 'frontend/vitest.config.ts'
        - 'frontend/playwright.config.ts'
    pull_request:
      branches: [ "dev", "main" ]
      types: ["synchronize", "ready_for_review", "opened", "reopened"]
      paths:
        - 'frontend/src/**.[jt]s'
        - 'frontend/src/**.vue'
        - 'frontend/src/**.css'
        - 'frontend/tests/**.[jt]s'
        - 'frontend/tests/**.vue'
        - 'frontend/tests/**.css'
        - 'frontend/vitest.config.ts'
        - 'frontend/playwright.config.ts'

jobs:
  test:
    name: Run frontend unit tests
    if: '! github.event.pull_request.draft'
    runs-on: [self-hosted, Linux, X64]

    permissions:
      # Required to checkout the code
      contents: read
      # Required to put a comment into the pull-request
      pull-requests: write

    strategy:
      matrix:
        node-version: [22.x]
        # See supported Node.js release schedule at https://nodejs.org/en/about/releases/

    steps:
    - uses: actions/checkout@v4
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v4
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'
    - run: npm ci
    - run: npm run build
    - run: npm run test:coverage -w frontend
    - name: 'Report Frontend Coverage'
      # Set if: always() to also generate the report if tests are failing
      # Only works if you set `reportOnFailure: true` in your vite config as specified above
      if: always() 
      uses:  davelosert/vitest-coverage-report-action@v2
      with:
        name: 'Frontend'
        json-summary-path: './frontend/coverage/coverage-summary.json'
        json-final-path: './frontend/coverage/coverage-final.json'
        vite-config-path: './frontend/vitest.config.ts'
        file-coverage-mode: all
