mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-03-21 00:11:27 -07:00
113 lines
2.5 KiB
TypeScript
113 lines
2.5 KiB
TypeScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import fs from 'node:fs';
|
|
import os from 'node:os';
|
|
import path from 'node:path';
|
|
|
|
import type { AnkiConnectConfig } from '../types';
|
|
import { KnownWordCacheManager } from './known-word-cache';
|
|
|
|
function createKnownWordCacheHarness(config: AnkiConnectConfig): {
|
|
manager: KnownWordCacheManager;
|
|
cleanup: () => void;
|
|
} {
|
|
const stateDir = fs.mkdtempSync(path.join(os.tmpdir(), 'subminer-known-word-cache-'));
|
|
const statePath = path.join(stateDir, 'known-words-cache.json');
|
|
const manager = new KnownWordCacheManager({
|
|
client: {
|
|
findNotes: async () => [],
|
|
notesInfo: async () => [],
|
|
},
|
|
getConfig: () => config,
|
|
knownWordCacheStatePath: statePath,
|
|
showStatusNotification: () => undefined,
|
|
});
|
|
|
|
return {
|
|
manager,
|
|
cleanup: () => {
|
|
fs.rmSync(stateDir, { recursive: true, force: true });
|
|
},
|
|
};
|
|
}
|
|
|
|
test('KnownWordCacheManager invalidates persisted cache when fields.word changes', () => {
|
|
const config: AnkiConnectConfig = {
|
|
deck: 'Mining',
|
|
fields: {
|
|
word: 'Word',
|
|
},
|
|
knownWords: {
|
|
highlightEnabled: true,
|
|
},
|
|
};
|
|
const { manager, cleanup } = createKnownWordCacheHarness(config);
|
|
|
|
try {
|
|
manager.appendFromNoteInfo({
|
|
noteId: 1,
|
|
fields: {
|
|
Word: { value: '猫' },
|
|
},
|
|
});
|
|
assert.equal(manager.isKnownWord('猫'), true);
|
|
|
|
config.fields = {
|
|
...config.fields,
|
|
word: 'Expression',
|
|
};
|
|
|
|
(
|
|
manager as unknown as {
|
|
loadKnownWordCacheState: () => void;
|
|
}
|
|
).loadKnownWordCacheState();
|
|
|
|
assert.equal(manager.isKnownWord('猫'), false);
|
|
} finally {
|
|
cleanup();
|
|
}
|
|
});
|
|
|
|
test('KnownWordCacheManager invalidates persisted cache when per-deck fields change', () => {
|
|
const config: AnkiConnectConfig = {
|
|
fields: {
|
|
word: 'Word',
|
|
},
|
|
knownWords: {
|
|
highlightEnabled: true,
|
|
decks: {
|
|
Mining: ['Word'],
|
|
},
|
|
},
|
|
};
|
|
const { manager, cleanup } = createKnownWordCacheHarness(config);
|
|
|
|
try {
|
|
manager.appendFromNoteInfo({
|
|
noteId: 1,
|
|
fields: {
|
|
Word: { value: '猫' },
|
|
},
|
|
});
|
|
assert.equal(manager.isKnownWord('猫'), true);
|
|
|
|
config.knownWords = {
|
|
...config.knownWords,
|
|
decks: {
|
|
Mining: ['Expression'],
|
|
},
|
|
};
|
|
|
|
(
|
|
manager as unknown as {
|
|
loadKnownWordCacheState: () => void;
|
|
}
|
|
).loadKnownWordCacheState();
|
|
|
|
assert.equal(manager.isKnownWord('猫'), false);
|
|
} finally {
|
|
cleanup();
|
|
}
|
|
});
|