fix(reference): rebuild pre-index artifacts
This commit is contained in:
@@ -26,7 +26,7 @@ export const MANIFEST_FILE = 'manifest.json';
|
||||
export const DATABASE_DIRECTORY = 'databases';
|
||||
export const CACHE_DIRECTORY = 'sources';
|
||||
export const LOCK_DIRECTORY = '.reference-build.lock';
|
||||
const DEFAULT_IMPORTER_VERSION = `reference-compiler/${SCHEMA_VERSION}-5`;
|
||||
const DEFAULT_IMPORTER_VERSION = `reference-compiler/${SCHEMA_VERSION}-6`;
|
||||
|
||||
const emptyManifest = (): ReferenceManifest => ({ format: 1, sources: {} });
|
||||
const iso = (date: Date): string => date.toISOString();
|
||||
|
||||
@@ -321,6 +321,28 @@ describe('fixture reference compiler', () => {
|
||||
} finally { await rm(root, { recursive: true, force: true }); }
|
||||
});
|
||||
|
||||
test('rebuilds a prior 3-5 artifact missing the verified-station index', async () => {
|
||||
const { root, sources } = await fixtureDirectory();
|
||||
const directory = join(root, 'reference');
|
||||
try {
|
||||
const first = await new ReferenceCompiler({ directory, profile: 'fixture', importerVersion: 'reference-compiler/3-5', sources: fixtureSources(sources) }).compile();
|
||||
expect(first.status).toBe('success');
|
||||
if (first.status !== 'success' || !first.version) throw new Error('initial fixture build did not publish a version');
|
||||
const databasePath = join(directory, 'databases', `${first.version}.sqlite`);
|
||||
const malformed = new Database(databasePath);
|
||||
malformed.run('DROP INDEX stations_source_verified_idx');
|
||||
malformed.close();
|
||||
const rebuilt = await new ReferenceCompiler({ directory, profile: 'fixture', sources: fixtureSources(sources) }).compile();
|
||||
expect(rebuilt.status).toBe('success');
|
||||
expect(rebuilt.status).not.toBe('noop');
|
||||
const rebuiltManifest = await readReferenceManifest(directory);
|
||||
expect(rebuiltManifest.active?.importerVersion).toBe('reference-compiler/3-6');
|
||||
const rebuiltDb = new Database(join(directory, 'databases', `${rebuiltManifest.active!.version}.sqlite`), { readonly: true });
|
||||
try { expect(rebuiltDb.query<{ n: number }, []>("SELECT COUNT(*) AS n FROM sqlite_master WHERE type='index' AND name='stations_source_verified_idx'").get()?.n).toBe(1); }
|
||||
finally { rebuiltDb.close(); }
|
||||
} finally { await rm(root, { recursive: true, force: true }); }
|
||||
});
|
||||
|
||||
test('rejects incomplete PREVIOUS count metadata before rollback', async () => {
|
||||
const { root, sources } = await fixtureDirectory();
|
||||
const directory = join(root, 'reference');
|
||||
|
||||
Reference in New Issue
Block a user