2026-06-28 17:59:50 -04:00
|
|
|
// jest setup: RTL jest-dom + mock DB reset per test.
|
|
|
|
|
import '@testing-library/jest-dom';
|
2026-07-03 16:05:04 -04:00
|
|
|
import { resetMockDb } from './__mocks__/firebase/_mock-db';
|
2026-07-03 15:58:50 -04:00
|
|
|
|
|
|
|
|
// RTL v14: tell React this is an act environment. Without it every
|
|
|
|
|
// async update warns "current testing environment is not configured to
|
|
|
|
|
// support act(...)". RTL reads getGlobalThis(), so set on globalThis.
|
|
|
|
|
// Must be set before any component renders.
|
|
|
|
|
globalThis.IS_REACT_ACT_ENVIRONMENT = true;
|
|
|
|
|
|
2026-07-04 17:03:34 -04:00
|
|
|
// Test timeout guard. CRA blocks `testTimeout` in package.json jest config
|
|
|
|
|
// (not in allowlist). Set via jest global here instead. Fails fast on hang.
|
|
|
|
|
jest.setTimeout(10000);
|
|
|
|
|
|
2026-07-03 15:58:50 -04:00
|
|
|
// WARNING = FAILURE. Fail test on any console.error/warn (React act warnings,
|
|
|
|
|
// deprecations, prop errors). App code's own error logs allowed only inside
|
|
|
|
|
// try/catch failure paths — those tests should assert the error was handled,
|
|
|
|
|
// not silently log it. Override the spies to throw.
|
|
|
|
|
const originalError = console.error;
|
|
|
|
|
const originalWarn = console.warn;
|
|
|
|
|
console.error = (...args) => {
|
|
|
|
|
originalError(...args);
|
|
|
|
|
throw new Error(`console.error in test: ${args.map(String).join(' ').slice(0, 500)}`);
|
|
|
|
|
};
|
|
|
|
|
console.warn = (...args) => {
|
|
|
|
|
originalWarn(...args);
|
|
|
|
|
throw new Error(`console.warn in test: ${args.map(String).join(' ').slice(0, 500)}`);
|
|
|
|
|
};
|
2026-07-02 18:40:38 -04:00
|
|
|
|
2026-06-28 17:59:50 -04:00
|
|
|
// polyfill crypto.randomUUID for jsdom (used by generateId in App.js).
|
|
|
|
|
if (!global.crypto) global.crypto = {};
|
|
|
|
|
if (!global.crypto.randomUUID) {
|
|
|
|
|
global.crypto.randomUUID = () => 'test-uuid-' + Math.random().toString(36).slice(2, 10);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Stub Firebase env vars so initializeFirebase() succeeds under test.
|
|
|
|
|
// Real SDK calls are mocked via __mocks__/firebase/*.
|
|
|
|
|
process.env.REACT_APP_FIREBASE_API_KEY = 'test-api-key';
|
|
|
|
|
process.env.REACT_APP_FIREBASE_AUTH_DOMAIN = 'test.firebaseapp.com';
|
|
|
|
|
process.env.REACT_APP_FIREBASE_PROJECT_ID = 'test-project';
|
|
|
|
|
process.env.REACT_APP_FIREBASE_STORAGE_BUCKET = 'test.appspot.com';
|
|
|
|
|
process.env.REACT_APP_FIREBASE_MESSAGING_SENDER_ID = '1234567890';
|
|
|
|
|
process.env.REACT_APP_FIREBASE_APP_ID = '1:1234567890:web:abcdef';
|
|
|
|
|
|
|
|
|
|
beforeEach(() => {
|
|
|
|
|
resetMockDb();
|
|
|
|
|
});
|