Files
brain/tools/secretary-lock.test.mjs
T

27 lines
1.1 KiB
JavaScript

import { describe, it, expect, beforeEach, afterEach } from 'vitest';
import { mkdtempSync, rmSync, mkdirSync } from 'node:fs';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
import { acquireThemeLock, isThemeLocked } from './secretary-lock.mjs';
let dir;
beforeEach(() => { dir = mkdtempSync(join(tmpdir(), 'seclock-')); mkdirSync(join(dir, '_worker'), { recursive: true }); });
afterEach(() => { rmSync(dir, { recursive: true, force: true }); });
describe('secretary-lock', () => {
it('first acquire succeeds and returns a release fn; second acquire fails while held', async () => {
const release = await acquireThemeLock(dir);
expect(typeof release).toBe('function');
expect(await isThemeLocked(dir)).toBe(true);
await expect(acquireThemeLock(dir)).rejects.toBeTruthy();
await release();
expect(await isThemeLocked(dir)).toBe(false);
});
it('acquire returns null instead of throwing when graceful:true and already held', async () => {
const release = await acquireThemeLock(dir);
const second = await acquireThemeLock(dir, { graceful: true });
expect(second).toBe(null);
await release();
});
});