ktx/packages/context/src/project/setup-config.test.ts

77 lines
3 KiB
TypeScript
Raw Normal View History

2026-05-10 23:12:26 +02:00
import { describe, expect, it } from 'vitest';
2026-05-10 23:51:24 +02:00
import { buildDefaultKtxProjectConfig } from './config.js';
2026-05-10 23:12:26 +02:00
import {
2026-05-10 23:51:24 +02:00
markKtxSetupStepComplete,
mergeKtxSetupGitignoreEntries,
setKtxSetupDatabaseConnectionIds,
2026-05-10 23:12:26 +02:00
} from './setup-config.js';
2026-05-10 23:51:24 +02:00
describe('KTX setup config helpers', () => {
2026-05-10 23:12:26 +02:00
it('marks setup steps complete without duplicating existing state', () => {
2026-05-10 23:51:24 +02:00
const config = buildDefaultKtxProjectConfig('warehouse');
2026-05-10 23:12:26 +02:00
2026-05-10 23:51:24 +02:00
const withProject = markKtxSetupStepComplete(config, 'project');
const withProjectAgain = markKtxSetupStepComplete(withProject, 'project');
const withLlm = markKtxSetupStepComplete(withProjectAgain, 'llm');
const withContext = markKtxSetupStepComplete(withLlm, 'context');
2026-05-10 23:12:26 +02:00
expect(withProject.setup).toEqual({
database_connection_ids: [],
completed_steps: ['project'],
});
expect(withProjectAgain.setup?.completed_steps).toEqual(['project']);
expect(withLlm.setup?.completed_steps).toEqual(['project', 'llm']);
expect(withContext.setup?.completed_steps).toEqual(['project', 'llm', 'context']);
expect(config.setup).toBeUndefined();
});
it('preserves database connection ids while marking a step complete', () => {
const config = {
2026-05-10 23:51:24 +02:00
...buildDefaultKtxProjectConfig('warehouse'),
2026-05-10 23:12:26 +02:00
setup: {
database_connection_ids: ['warehouse'],
completed_steps: ['databases'],
},
};
2026-05-10 23:51:24 +02:00
expect(markKtxSetupStepComplete(config, 'project').setup).toEqual({
2026-05-10 23:12:26 +02:00
database_connection_ids: ['warehouse'],
completed_steps: ['databases', 'project'],
});
});
it('sets setup database connection ids without duplicates', () => {
2026-05-10 23:51:24 +02:00
const config = buildDefaultKtxProjectConfig('warehouse');
2026-05-10 23:12:26 +02:00
2026-05-10 23:51:24 +02:00
const withDatabases = setKtxSetupDatabaseConnectionIds(config, ['warehouse', 'analytics', 'warehouse']);
2026-05-10 23:12:26 +02:00
expect(withDatabases.setup).toEqual({
database_connection_ids: ['warehouse', 'analytics'],
completed_steps: [],
});
expect(config.setup).toBeUndefined();
});
it('marks databases complete only when requested', () => {
2026-05-10 23:51:24 +02:00
const config = markKtxSetupStepComplete(buildDefaultKtxProjectConfig('warehouse'), 'project');
2026-05-10 23:12:26 +02:00
2026-05-10 23:51:24 +02:00
const withDatabases = setKtxSetupDatabaseConnectionIds(config, ['warehouse'], { complete: true });
const withDatabasesAgain = setKtxSetupDatabaseConnectionIds(withDatabases, ['warehouse'], { complete: true });
2026-05-10 23:12:26 +02:00
expect(withDatabases.setup).toEqual({
database_connection_ids: ['warehouse'],
completed_steps: ['project', 'databases'],
});
expect(withDatabasesAgain.setup).toEqual(withDatabases.setup);
});
it('merges setup-local gitignore entries without removing existing lines', () => {
2026-05-10 23:51:24 +02:00
expect(mergeKtxSetupGitignoreEntries('cache/\ndb.sqlite\n')).toBe(
2026-05-11 00:31:15 -07:00
['cache/', 'db.sqlite', 'db.sqlite-*', 'ingest-transcripts/', 'secrets/', 'setup/', 'agents/', ''].join('\n'),
2026-05-10 23:12:26 +02:00
);
2026-05-10 23:51:24 +02:00
expect(mergeKtxSetupGitignoreEntries('cache/\nsecrets/\n')).toBe(
2026-05-11 00:31:15 -07:00
['cache/', 'secrets/', 'db.sqlite', 'db.sqlite-*', 'ingest-transcripts/', 'setup/', 'agents/', ''].join('\n'),
2026-05-10 23:12:26 +02:00
);
});
});