61 lines
1.5 KiB
TypeScript
61 lines
1.5 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();
|
|
});
|
|
});
|