44 lines
1.4 KiB
TypeScript
44 lines
1.4 KiB
TypeScript
import fs from 'node:fs';
|
|
import os from 'node:os';
|
|
import path from 'node:path';
|
|
|
|
import { afterEach, describe, expect, it } from 'vitest';
|
|
|
|
import { resolveWorkspaceRoot } from '../src/orchestrator/workspaceRoot.js';
|
|
|
|
const tempDirs: string[] = [];
|
|
|
|
const makeTempDir = (): string => {
|
|
const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'sammo-workspace-root-'));
|
|
tempDirs.push(dir);
|
|
return dir;
|
|
};
|
|
|
|
afterEach(() => {
|
|
for (const dir of tempDirs.splice(0)) {
|
|
fs.rmSync(dir, { recursive: true, force: true });
|
|
}
|
|
});
|
|
|
|
describe('resolveWorkspaceRoot', () => {
|
|
it('prefers the pnpm workspace above a nested package', () => {
|
|
const root = makeTempDir();
|
|
const packageDir = path.join(root, 'app', 'gateway-api');
|
|
const sourceDir = path.join(packageDir, 'dist');
|
|
fs.mkdirSync(sourceDir, { recursive: true });
|
|
fs.writeFileSync(path.join(root, 'pnpm-workspace.yaml'), 'packages: []\n');
|
|
fs.writeFileSync(path.join(packageDir, 'package.json'), '{}\n');
|
|
|
|
expect(resolveWorkspaceRoot(sourceDir)).toBe(root);
|
|
});
|
|
|
|
it('falls back to the nearest package when there is no workspace marker', () => {
|
|
const root = makeTempDir();
|
|
const sourceDir = path.join(root, 'src', 'nested');
|
|
fs.mkdirSync(sourceDir, { recursive: true });
|
|
fs.writeFileSync(path.join(root, 'package.json'), '{}\n');
|
|
|
|
expect(resolveWorkspaceRoot(sourceDir)).toBe(root);
|
|
});
|
|
});
|