zenstack/packages/runtime/test/client-api/default-values.test.ts
2025-05-14 23:01:10 -07:00

78 lines
2.6 KiB
TypeScript

import { isCuid } from '@paralleldrive/cuid2';
import SQLite from 'better-sqlite3';
import { isValid as isValidUlid } from 'ulid';
import { validate as isValidUuid } from 'uuid';
import { describe, expect, it } from 'vitest';
import { ZenStackClient } from '../../src';
import { Expression, type SchemaDef } from '../../src/schema';
const schema = {
provider: {
type: 'sqlite',
dialectConfigProvider: () =>
({
database: new SQLite(':memory:'),
} as any),
},
models: {
Model: {
fields: {
uuid: {
type: 'String',
id: true,
default: Expression.call('uuid'),
},
uuid7: {
type: 'String',
default: Expression.call('uuid', [Expression.literal(7)]),
},
cuid: {
type: 'String',
default: Expression.call('cuid'),
},
cuid2: {
type: 'String',
default: Expression.call('cuid', [Expression.literal(2)]),
},
nanoid: {
type: 'String',
default: Expression.call('nanoid'),
},
nanoid8: {
type: 'String',
default: Expression.call('nanoid', [Expression.literal(8)]),
},
ulid: {
type: 'String',
default: Expression.call('ulid'),
},
dt: {
type: 'DateTime',
default: Expression.call('now'),
},
},
idFields: ['uuid'],
uniqueFields: {
uuid: { type: 'String' },
},
},
},
plugins: {},
} as const satisfies SchemaDef;
describe('default values tests', () => {
it('supports generators', async () => {
const client = new ZenStackClient(schema);
await client.$pushSchema();
const entity = await client.model.create({ data: {} });
expect(entity.uuid).toSatisfy(isValidUuid);
expect(entity.uuid7).toSatisfy(isValidUuid);
expect(entity.cuid).toSatisfy(isCuid);
expect(entity.cuid2).toSatisfy(isCuid);
expect(entity.nanoid).toSatisfy((id) => id.length >= 21);
expect(entity.nanoid8).toSatisfy((id) => id.length === 8);
expect(entity.ulid).toSatisfy(isValidUlid);
expect(entity.dt).toBeInstanceOf(Date);
});
});