zenstack/packages/cli/test/action-utils.test.ts

52 lines
1.8 KiB
TypeScript

import fs from 'node:fs';
import path from 'node:path';
import { describe, expect, it } from 'vitest';
import { generateTempPrismaSchema } from '../src/actions/action-utils';
import { createProject } from './utils';
const model = `
model User {
id String @id @default(cuid())
}
`;
describe('generateTempPrismaSchema', () => {
it('defaults to a deterministic "~schema.prisma" filename', async () => {
const { workDir } = await createProject(model, { provider: 'sqlite' });
const schemaPath = path.join(workDir, 'zenstack/schema.zmodel');
const generated = await generateTempPrismaSchema(schemaPath);
try {
expect(path.basename(generated)).toBe('~schema.prisma');
expect(fs.existsSync(generated)).toBe(true);
} finally {
if (fs.existsSync(generated)) {
fs.unlinkSync(generated);
}
}
});
it('appends a random UUID segment when randomName is true', async () => {
const { workDir } = await createProject(model, { provider: 'sqlite' });
const schemaPath = path.join(workDir, 'zenstack/schema.zmodel');
const first = await generateTempPrismaSchema(schemaPath, { randomName: true });
const second = await generateTempPrismaSchema(schemaPath, { randomName: true });
try {
const uuidPattern = /^~schema\.[0-9a-f-]{36}\.prisma$/;
expect(path.basename(first)).toMatch(uuidPattern);
expect(path.basename(second)).toMatch(uuidPattern);
expect(first).not.toBe(second);
expect(fs.existsSync(first)).toBe(true);
expect(fs.existsSync(second)).toBe(true);
} finally {
for (const f of [first, second]) {
if (fs.existsSync(f)) {
fs.unlinkSync(f);
}
}
}
});
});