76 lines
2.2 KiB
TypeScript
76 lines
2.2 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { createPrompter } from './prompts.js';
|
|
import { ConfigBuilder } from './config.js';
|
|
import { setupMemory } from './memory.js';
|
|
import { setupSecurity } from './security.js';
|
|
import { setupGateway } from './gateway.js';
|
|
|
|
function mockReadline(inputs: string[]) {
|
|
let questionIdx = 0;
|
|
|
|
return {
|
|
async question(query: string) {
|
|
const answer = inputs[questionIdx++];
|
|
return answer ?? '';
|
|
},
|
|
|
|
close() {
|
|
// no-op
|
|
},
|
|
|
|
[Symbol.asyncIterator]() {
|
|
return this;
|
|
},
|
|
|
|
async next() {
|
|
return { done: true };
|
|
},
|
|
} as any;
|
|
}
|
|
|
|
describe('setupMemory', () => {
|
|
it('enables vector search with openai embeddings', async () => {
|
|
const rl = mockReadline(['y', '1', 'y']);
|
|
const p = createPrompter(rl);
|
|
const builder = new ConfigBuilder();
|
|
builder.setProvider('default', { provider: 'openai', model: 'gpt-4.1', api_key: 'sk-test' });
|
|
await setupMemory(p, builder);
|
|
const config = builder.build();
|
|
expect(config.memory.embedding.enabled).toBe(true);
|
|
expect(config.memory.embedding.provider).toBe('openai');
|
|
});
|
|
|
|
it('skips vector search when declined', async () => {
|
|
const rl = mockReadline(['n']);
|
|
const p = createPrompter(rl);
|
|
const builder = new ConfigBuilder();
|
|
await setupMemory(p, builder);
|
|
const config = builder.build();
|
|
expect(config.memory?.embedding?.enabled).toBeFalsy();
|
|
});
|
|
});
|
|
|
|
describe('setupSecurity', () => {
|
|
it('enables sandbox and pairing', async () => {
|
|
const rl = mockReadline(['y', 'y', '']);
|
|
const p = createPrompter(rl);
|
|
const builder = new ConfigBuilder();
|
|
await setupSecurity(p, builder);
|
|
const config = builder.build();
|
|
expect(config.sandbox.enabled).toBe(true);
|
|
expect(config.pairing.enabled).toBe(true);
|
|
});
|
|
});
|
|
|
|
describe('setupGateway', () => {
|
|
it('configures port and auth token', async () => {
|
|
const rl = mockReadline(['9999', 'y', 'my-token', 'n', 'n']);
|
|
const p = createPrompter(rl);
|
|
const builder = new ConfigBuilder();
|
|
await setupGateway(p, builder);
|
|
const config = builder.build();
|
|
expect(config.server.port).toBe(9999);
|
|
expect(config.server.token).toBe('my-token');
|
|
});
|
|
});
|