obsidian-voice-note/tests/core-boundary.test.ts
Andrey Epifancev 7cd3811ead chore: scaffold build and vitest, add core ports and boundary guard
Refs #1

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 15:52:20 +04:00

35 lines
1.3 KiB
TypeScript

import { existsSync, readdirSync, readFileSync } from 'node:fs';
import { join } from 'node:path';
import { fileURLToPath } from 'node:url';
import { describe, expect, it } from 'vitest';
const CORE = fileURLToPath(new URL('../src/core/', import.meta.url));
const FORBIDDEN =
/(?:from\s+|import\s*\(\s*|require\s*\(\s*)['"](?:obsidian|fs|path|child_process|node:[^'"]*)(?:\/[^'"]*)?['"]/;
function coreFiles(): string[] {
if (!existsSync(CORE)) return [];
return readdirSync(CORE, { recursive: true, encoding: 'utf8' })
.filter((f) => f.endsWith('.ts'))
.map((f) => join(CORE, f));
}
describe('src/core boundary', () => {
it('detects forbidden imports', () => {
expect(FORBIDDEN.test(`import { Plugin } from 'obsidian';`)).toBe(true);
expect(FORBIDDEN.test(`import { readFile } from "fs/promises";`)).toBe(true);
expect(FORBIDDEN.test(`import x from 'node:path';`)).toBe(true);
expect(FORBIDDEN.test(`const cp = require('child_process');`)).toBe(true);
expect(FORBIDDEN.test(`import { transition } from './record';`)).toBe(false);
});
it('has files to check', () => {
expect(coreFiles().length).toBeGreaterThan(0);
});
it('imports neither obsidian nor Node modules', () => {
const offenders = coreFiles().filter((f) => FORBIDDEN.test(readFileSync(f, 'utf8')));
expect(offenders).toEqual([]);
});
});