mike/frontend/vitest.config.mts
QA Runner a29e67deac test: component and hook unit tests for the web app
Ported from the amal66 fork (index: Open-Legal-Products/mike#205), adapted
to this repo's frontend/ layout and current component behavior. Adds the
jsdom + testing-library harness on top of the existing vitest setup:
vitest.config.mts (jsdom environment, @/ alias mirroring tsconfig paths,
dummy Supabase env for modules that build a client at import time) and
vitest.setup.ts (jest-dom matchers). New devDependencies: jsdom,
@testing-library/react, @testing-library/jest-dom,
@testing-library/user-event, @vitejs/plugin-react.

Ported suites (30 new tests):
- FileTypeIcon.test.tsx (11) — fileTypeKind mapping + icon rendering
- TRTable.test.tsx (1) — header/row render smoke test; the fork's ARIA
  role assertions (table/columnheader, "Tabular review" label) target
  fork-only markup — this repo's grid is div-based, so the test asserts
  rendered content instead
- button.test.tsx (4), pill-button.test.tsx (8), cite-button.test.tsx (3)
- useSmoothedReveal.test.ts (3) — passes against this repo's early-return
  snap behavior unchanged

Dropped (subjects don't exist here):
- HistoryDropdown.test.tsx — no tr-chat-panel/HistoryDropdown component
- applyAssistantStreamEvent.test.ts — no such module
- useProjectsQuery/useTabularReviewsQuery/useWorkflowsQuery tests —
  react-query is fork-only
- lib/toast.test.ts — no frontend/src/lib/toast.ts
- useAssistantChat.parsers.test.ts — the parser helpers exist inside
  useAssistantChat.ts but are not exported, and the fork's extracted
  module doesn't exist here

Verified: frontend npm test 38/38 passing (30 new + 8 pre-existing cn()
utils tests); npx tsc --noEmit clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 10:50:11 -07:00

45 lines
1.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { fileURLToPath } from "node:url";
import react from "@vitejs/plugin-react";
import { defineConfig } from "vitest/config";
const resolvePath = (relative: string) =>
fileURLToPath(new URL(relative, import.meta.url));
export default defineConfig({
plugins: [react()],
resolve: {
// Mirror the `@/*` path alias from tsconfig.json so unit tests resolve
// the same module specifiers the app uses.
alias: [
{
find: /^@\/(.*)$/,
replacement: resolvePath("./src/$1"),
},
],
},
test: {
globals: true,
environment: "jsdom",
setupFiles: ["./vitest.setup.ts"],
// app/lib/supabase.ts creates its client at module load, so any
// component whose import graph reaches it needs these set. Dummy
// values — unit tests never talk to Supabase.
env: {
NEXT_PUBLIC_SUPABASE_URL: "http://localhost:54321",
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_DEFAULT_KEY: "test-anon-key",
},
// jsdom 27's CSS-color parser (@asamuzakjp/css-color) is CJS but
// require()s the ESM-only @csstools/css-calc. That require() happens
// in the worker process while the jsdom environment boots — before
// Vite's transform pipeline is involved — so deps.inline can't fix it.
// Instead, let Node itself handle require(esm): default on >=22.12,
// and enabled by this (there harmless) flag on 22.022.11.
execArgv: ["--experimental-require-module"],
// Unit tests only. Keep any Playwright e2e specs (*.spec.ts) out.
include: ["src/**/*.test.{ts,tsx}"],
exclude: ["node_modules/**", "e2e/**", "**/*.spec.ts"],
// Generous timeouts to absorb cold-start jsdom + transform latency on CI.
testTimeout: 20000,
hookTimeout: 20000,
},
});