zenstack/packages/cli/test/plugins/custom-plugin.test.ts
2026-04-29 20:41:27 -07:00

50 lines
1.4 KiB
TypeScript

import { execSync } from 'node:child_process';
import fs from 'node:fs';
import path from 'node:path';
import { describe, expect, it } from 'vitest';
import { createProject, runCli } from '../utils';
describe('Custom plugins tests', () => {
it('runs custom plugin generator', async () => {
const { workDir } = await createProject(`
plugin custom {
provider = '../my-plugin.js'
output = '../custom-output'
}
model User {
id String @id @default(cuid())
}
`);
fs.writeFileSync(
path.join(workDir, 'my-plugin.ts'),
`
import type { CliPlugin } from '@zenstackhq/sdk';
import fs from 'node:fs';
import path from 'node:path';
const plugin: CliPlugin = {
name: 'Custom Generator',
statusText: 'Generating foo.txt',
async generate({ model, defaultOutputPath, pluginOptions }) {
let outDir = defaultOutputPath;
if (typeof pluginOptions['output'] === 'string') {
outDir = path.resolve(defaultOutputPath, pluginOptions['output']);
if (!fs.existsSync(outDir)) {
fs.mkdirSync(outDir, { recursive: true });
}
}
fs.writeFileSync(path.join(outDir, 'foo.txt'), 'from my plugin');
},
};
export default plugin;
`,
);
execSync('npx tsc', { cwd: workDir });
runCli('generate', workDir);
expect(fs.existsSync(path.join(workDir, 'custom-output/foo.txt'))).toBe(true);
});
});