Files
BoxBrain/tests/memory.test.ts

85 lines
2.2 KiB
TypeScript

import { afterEach, describe, expect, it } from 'vitest';
import { IdentityDB } from 'identitydb';
import { persistFactDrafts } from '../src/memory';
const openDbs: IdentityDB[] = [];
async function createDb() {
const db = await IdentityDB.connect({ client: 'sqlite', filename: ':memory:' });
await db.initialize();
openDbs.push(db);
return db;
}
afterEach(async () => {
while (openDbs.length > 0) {
await openDbs.pop()!.close();
}
});
describe('persistFactDrafts', () => {
it('stores drafted facts in the requested persona space', async () => {
const db = await createDb();
const [fact] = await persistFactDrafts(db, {
spaceName: 'persona:minji',
domain: 'persona.biography',
source: 'boxbrain:test',
facts: [
{
statement: 'Minji grew up near the sea.',
topics: [{ name: 'Minji' }, { name: 'sea' }],
},
],
});
const space = await db.getSpaceByName('persona:minji');
expect(space).not.toBeNull();
expect(fact?.spaceId).toBe(space?.id);
expect(fact?.metadata).toMatchObject({
boxbrain: {
domain: 'persona.biography',
source: 'boxbrain:test',
},
});
});
it('accepts an empty draft list without writes', async () => {
const db = await createDb();
const facts = await persistFactDrafts(db, {
spaceName: 'persona:empty',
domain: 'persona.biography',
source: 'boxbrain:test',
facts: [],
});
expect(facts).toEqual([]);
expect(await db.getSpaceByName('persona:empty')).toBeNull();
});
it('keeps fact source metadata consistent when a draft overrides source', async () => {
const db = await createDb();
const [fact] = await persistFactDrafts(db, {
spaceName: 'persona:source-test',
domain: 'persona.biography',
source: 'boxbrain:batch',
facts: [
{
statement: 'Minji wrote a diary entry.',
source: 'boxbrain:draft',
topics: [{ name: 'Minji' }, { name: 'diary entry' }],
},
],
});
expect(fact?.source).toBe('boxbrain:draft');
expect(fact?.metadata).toMatchObject({
boxbrain: {
source: 'boxbrain:draft',
},
});
});
});