Files
waggle-os/packages/hive-mind-core/tests/mind/sessions.test.ts
Oleg Maslov 0c3e2ead3b
Some checks failed
Installer Smoke / installer-smoke (push) Has been cancelled
moving
2026-09-02 10:10:29 +02:00

66 lines
2.1 KiB
TypeScript

import { describe, it, expect, beforeEach, afterEach } from 'vitest';
import { MindDB } from '../../src/mind/db.js';
import { SessionStore } from '../../src/mind/sessions.js';
describe('SessionStore', () => {
let db: MindDB;
let sessions: SessionStore;
beforeEach(() => {
db = new MindDB(':memory:');
sessions = new SessionStore(db);
});
afterEach(() => {
db.close();
});
describe('ensureActive (review #7 — session-create race in autoSaveFromExchange)', () => {
it('creates a new active session when none exists', () => {
expect(sessions.getActive()).toHaveLength(0);
const result = sessions.ensureActive();
expect(result.status).toBe('active');
expect(result.gop_id).toMatch(/^session:/);
expect(sessions.getActive()).toHaveLength(1);
});
it('returns the existing active session when one exists', () => {
const first = sessions.ensureActive();
const second = sessions.ensureActive();
const third = sessions.ensureActive();
// All three calls return the same session — never a duplicate.
expect(second.id).toBe(first.id);
expect(third.id).toBe(first.id);
expect(sessions.getActive()).toHaveLength(1);
});
it('returns the most-recent active session when multiple are open', () => {
const older = sessions.create();
// Force a tiny time gap so started_at differs measurably
const newer = sessions.create();
const result = sessions.ensureActive();
// Most-recent (newer) wins — matches getActive() ordering contract
expect(result.id).toBe(newer.id);
expect(result.id).not.toBe(older.id);
});
it('does not resurrect closed or archived sessions', () => {
const s = sessions.create();
sessions.close(s.gop_id);
// No active session now — ensureActive should create a fresh one
const ensured = sessions.ensureActive();
expect(ensured.id).not.toBe(s.id);
expect(ensured.status).toBe('active');
});
it('preserves project_id when provided', () => {
const result = sessions.ensureActive('my-project');
expect(result.project_id).toBe('my-project');
});
});
});