mirror of
https://github.com/willchen96/mike.git
synced 2026-07-24 23:41:04 +02:00
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>
45 lines
1.9 KiB
TypeScript
45 lines
1.9 KiB
TypeScript
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.0–22.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,
|
||
},
|
||
});
|