62 lines
2.0 KiB
TypeScript
62 lines
2.0 KiB
TypeScript
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
import { MindDB } from '../../src/mind/db.js';
|
|
import { KnowledgeGraph } from '../../src/mind/knowledge.js';
|
|
|
|
describe('Temporal Knowledge Queries', () => {
|
|
let db: MindDB;
|
|
let kg: KnowledgeGraph;
|
|
|
|
beforeEach(() => {
|
|
db = new MindDB(':memory:');
|
|
kg = new KnowledgeGraph(db);
|
|
});
|
|
|
|
afterEach(() => {
|
|
db.close();
|
|
});
|
|
|
|
it('queries entities valid at a specific time', () => {
|
|
kg.createEntity('fact', 'Alice is on Team Alpha', {}, {
|
|
valid_from: '2026-01-01T00:00:00Z',
|
|
valid_to: '2026-02-01T00:00:00Z',
|
|
});
|
|
kg.createEntity('fact', 'Alice is on Team Beta', {}, {
|
|
valid_from: '2026-02-01T00:00:00Z',
|
|
});
|
|
|
|
const jan = kg.getEntitiesValidAt('2026-01-15T00:00:00Z');
|
|
expect(jan.some(e => e.name.includes('Alpha'))).toBe(true);
|
|
expect(jan.some(e => e.name.includes('Beta'))).toBe(false);
|
|
|
|
const feb = kg.getEntitiesValidAt('2026-02-15T00:00:00Z');
|
|
expect(feb.some(e => e.name.includes('Beta'))).toBe(true);
|
|
expect(feb.some(e => e.name.includes('Alpha'))).toBe(false);
|
|
});
|
|
|
|
it('entities with no valid_from default to creation time', () => {
|
|
const entity = kg.createEntity('person', 'Charlie', {});
|
|
const now = new Date().toISOString();
|
|
const results = kg.getEntitiesValidAt(now);
|
|
expect(results.some(e => e.name === 'Charlie')).toBe(true);
|
|
});
|
|
|
|
it('entities with valid_to in the past are excluded', () => {
|
|
kg.createEntity('fact', 'Expired fact', {}, {
|
|
valid_from: '2020-01-01T00:00:00Z',
|
|
valid_to: '2020-06-01T00:00:00Z',
|
|
});
|
|
|
|
const results = kg.getEntitiesValidAt('2026-01-01T00:00:00Z');
|
|
expect(results.some(e => e.name === 'Expired fact')).toBe(false);
|
|
});
|
|
|
|
it('entities with future valid_from are excluded', () => {
|
|
kg.createEntity('fact', 'Future fact', {}, {
|
|
valid_from: '2030-01-01T00:00:00Z',
|
|
});
|
|
|
|
const results = kg.getEntitiesValidAt('2026-01-01T00:00:00Z');
|
|
expect(results.some(e => e.name === 'Future fact')).toBe(false);
|
|
});
|
|
});
|