mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-11-10 04:46:07 -08:00
test: cut low-value tests, rewrite the rest around behavior, parallelize lanes (#285)
This commit is contained in:
1 parent
4b6842d034
commit
b48083ddd8
368 files changed
+18045
-60331
No files matched your search
@@ -1,20 +0,0 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import fs from 'node:fs';
|
||||
import test from 'node:test';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import { toErrorMessage } from './useSessions';
|
||||
|
||||
const USE_SESSIONS_PATH = fileURLToPath(new URL('./useSessions.ts', import.meta.url));
|
||||
|
||||
test('toErrorMessage normalizes Error and non-Error rejections', () => {
|
||||
assert.equal(toErrorMessage(new Error('network down')), 'network down');
|
||||
assert.equal(toErrorMessage('bad gateway'), 'bad gateway');
|
||||
assert.equal(toErrorMessage(503), '503');
|
||||
});
|
||||
|
||||
test('useSessions and useSessionDetail route catch handlers through toErrorMessage', () => {
|
||||
const source = fs.readFileSync(USE_SESSIONS_PATH, 'utf8');
|
||||
const matches = source.match(/setError\(toErrorMessage\(err\)\)/g);
|
||||
|
||||
assert.equal(matches?.length, 2);
|
||||
});
|
||||
@@ -1,77 +1,15 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import test from 'node:test';
|
||||
import { Window } from 'happy-dom';
|
||||
import { act } from 'react';
|
||||
import { createRoot, type Root } from 'react-dom/client';
|
||||
import { apiClient } from '../lib/api-client';
|
||||
import { resetExcludedWordsStoreForTests, setExcludedWords } from './useExcludedWords';
|
||||
import { useVocabulary } from './useVocabulary';
|
||||
import type { StatsVocabularyCharts, StatsVocabularySummary } from '../types/stats';
|
||||
import { installDom, installLocalStorage } from '../test-utils/dom';
|
||||
|
||||
type VocabularyState = ReturnType<typeof useVocabulary>;
|
||||
|
||||
function installDom(): () => void {
|
||||
const previousWindow = Object.getOwnPropertyDescriptor(globalThis, 'window');
|
||||
const previousDocument = Object.getOwnPropertyDescriptor(globalThis, 'document');
|
||||
const previousHTMLElement = Object.getOwnPropertyDescriptor(globalThis, 'HTMLElement');
|
||||
const previousIsReactActEnvironment = Object.getOwnPropertyDescriptor(
|
||||
globalThis,
|
||||
'IS_REACT_ACT_ENVIRONMENT',
|
||||
);
|
||||
const window = new Window();
|
||||
|
||||
Object.defineProperty(globalThis, 'window', { value: window, configurable: true });
|
||||
Object.defineProperty(globalThis, 'document', { value: window.document, configurable: true });
|
||||
Object.defineProperty(globalThis, 'HTMLElement', {
|
||||
value: window.HTMLElement,
|
||||
configurable: true,
|
||||
});
|
||||
Object.defineProperty(globalThis, 'IS_REACT_ACT_ENVIRONMENT', {
|
||||
value: true,
|
||||
configurable: true,
|
||||
writable: true,
|
||||
});
|
||||
|
||||
return () => {
|
||||
const restoreProperty = (name: string, descriptor: PropertyDescriptor | undefined) => {
|
||||
if (descriptor) Object.defineProperty(globalThis, name, descriptor);
|
||||
else Reflect.deleteProperty(globalThis, name);
|
||||
};
|
||||
restoreProperty('window', previousWindow);
|
||||
restoreProperty('document', previousDocument);
|
||||
restoreProperty('HTMLElement', previousHTMLElement);
|
||||
restoreProperty('IS_REACT_ACT_ENVIRONMENT', previousIsReactActEnvironment);
|
||||
};
|
||||
}
|
||||
|
||||
test('DOM harness restores the original global property descriptors', () => {
|
||||
const propertyNames = ['window', 'document', 'HTMLElement', 'IS_REACT_ACT_ENVIRONMENT'] as const;
|
||||
const before = propertyNames.map((name) => Object.getOwnPropertyDescriptor(globalThis, name));
|
||||
|
||||
const restore = installDom();
|
||||
restore();
|
||||
|
||||
const after = propertyNames.map((name) => Object.getOwnPropertyDescriptor(globalThis, name));
|
||||
assert.deepEqual(after, before);
|
||||
});
|
||||
|
||||
function installLocalStorage(): () => void {
|
||||
const previous = Object.getOwnPropertyDescriptor(globalThis, 'localStorage');
|
||||
const values = new Map<string, string>();
|
||||
Object.defineProperty(globalThis, 'localStorage', {
|
||||
configurable: true,
|
||||
value: {
|
||||
getItem: (key: string) => values.get(key) ?? null,
|
||||
setItem: (key: string, value: string) => values.set(key, value),
|
||||
removeItem: (key: string) => values.delete(key),
|
||||
},
|
||||
});
|
||||
return () => {
|
||||
if (previous) Object.defineProperty(globalThis, 'localStorage', previous);
|
||||
else delete (globalThis as { localStorage?: unknown }).localStorage;
|
||||
};
|
||||
}
|
||||
|
||||
interface FakeClock {
|
||||
tick: (ms: number) => void;
|
||||
restore: () => void;
|
||||
|
||||
Reference in new issue
Block a user