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 DATABASE_DIRECTORY = 'databases';
|
||||||
export const CACHE_DIRECTORY = 'sources';
|
export const CACHE_DIRECTORY = 'sources';
|
||||||
export const LOCK_DIRECTORY = '.reference-build.lock';
|
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 emptyManifest = (): ReferenceManifest => ({ format: 1, sources: {} });
|
||||||
const iso = (date: Date): string => date.toISOString();
|
const iso = (date: Date): string => date.toISOString();
|
||||||
|
|||||||
@@ -321,6 +321,28 @@ describe('fixture reference compiler', () => {
|
|||||||
} finally { await rm(root, { recursive: true, force: true }); }
|
} 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 () => {
|
test('rejects incomplete PREVIOUS count metadata before rollback', async () => {
|
||||||
const { root, sources } = await fixtureDirectory();
|
const { root, sources } = await fixtureDirectory();
|
||||||
const directory = join(root, 'reference');
|
const directory = join(root, 'reference');
|
||||||
|
|||||||
Reference in New Issue
Block a user