mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-05-26 12:55:16 -07:00
70 lines
2.3 KiB
TypeScript
70 lines
2.3 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import * as fs from 'fs';
|
|
import * as os from 'os';
|
|
import * as path from 'path';
|
|
import test from 'node:test';
|
|
import { getSnapshotPath, readSnapshot, writeSnapshot } from './cache';
|
|
import { CHARACTER_DICTIONARY_FORMAT_VERSION } from './constants';
|
|
import type { CharacterDictionarySnapshot } from './types';
|
|
|
|
function makeTempDir(): string {
|
|
return fs.mkdtempSync(path.join(os.tmpdir(), 'subminer-character-dictionary-cache-'));
|
|
}
|
|
|
|
function createSnapshot(): CharacterDictionarySnapshot {
|
|
return {
|
|
formatVersion: CHARACTER_DICTIONARY_FORMAT_VERSION,
|
|
mediaId: 130298,
|
|
mediaTitle: 'The Eminence in Shadow',
|
|
entryCount: 1,
|
|
updatedAt: 1_700_000_000_000,
|
|
termEntries: [['アルファ', 'あるふぁ', '', '', 0, ['Alpha'], 0, 'name']],
|
|
images: [
|
|
{
|
|
path: 'img/m130298-c1.png',
|
|
dataBase64:
|
|
'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+nmX8AAAAASUVORK5CYII=',
|
|
},
|
|
],
|
|
};
|
|
}
|
|
|
|
test('writeSnapshot persists and readSnapshot restores current-format snapshots', () => {
|
|
const outputDir = makeTempDir();
|
|
const snapshotPath = getSnapshotPath(outputDir, 130298);
|
|
const snapshot = createSnapshot();
|
|
|
|
writeSnapshot(snapshotPath, snapshot);
|
|
|
|
assert.deepEqual(readSnapshot(snapshotPath), snapshot);
|
|
});
|
|
|
|
test('readSnapshot ignores snapshots written with an older format version', () => {
|
|
const outputDir = makeTempDir();
|
|
const snapshotPath = getSnapshotPath(outputDir, 130298);
|
|
const staleSnapshot = {
|
|
...createSnapshot(),
|
|
formatVersion: CHARACTER_DICTIONARY_FORMAT_VERSION - 1,
|
|
};
|
|
|
|
fs.mkdirSync(path.dirname(snapshotPath), { recursive: true });
|
|
fs.writeFileSync(snapshotPath, JSON.stringify(staleSnapshot), 'utf8');
|
|
|
|
assert.equal(readSnapshot(snapshotPath), null);
|
|
});
|
|
|
|
test('readSnapshot ignores v15 snapshots with stale romanized character-name entries', () => {
|
|
const outputDir = makeTempDir();
|
|
const snapshotPath = getSnapshotPath(outputDir, 130298);
|
|
const staleSnapshot = {
|
|
...createSnapshot(),
|
|
formatVersion: 15,
|
|
termEntries: [['Vanir', 'ばにる', 'name primary', '', 75, ['Vanir'], 0, '']],
|
|
};
|
|
|
|
fs.mkdirSync(path.dirname(snapshotPath), { recursive: true });
|
|
fs.writeFileSync(snapshotPath, JSON.stringify(staleSnapshot), 'utf8');
|
|
|
|
assert.equal(readSnapshot(snapshotPath), null);
|
|
});
|