Files
2026-07-13 12:10:05 +08:00

123 lines
2.8 KiB
TypeScript

import Database from 'better-sqlite3';
import { SQL, sql } from 'drizzle-orm';
import { check, int, sqliteTable, sqliteView, text } from 'drizzle-orm/sqlite-core';
import * as fs from 'fs';
import { introspectSQLiteToFile } from 'tests/schemaDiffer';
import { expect, test } from 'vitest';
if (!fs.existsSync('tests/introspect/sqlite')) {
fs.mkdirSync('tests/introspect/sqlite');
}
test('generated always column: link to another column', async () => {
const sqlite = new Database(':memory:');
const schema = {
users: sqliteTable('users', {
id: int('id'),
email: text('email'),
generatedEmail: text('generatedEmail').generatedAlwaysAs(
(): SQL => sql`\`email\``,
),
}),
};
const { statements, sqlStatements } = await introspectSQLiteToFile(
sqlite,
schema,
'generated-link-column',
);
expect(statements.length).toBe(0);
expect(sqlStatements.length).toBe(0);
});
test('generated always column virtual: link to another column', async () => {
const sqlite = new Database(':memory:');
const schema = {
users: sqliteTable('users', {
id: int('id'),
email: text('email'),
generatedEmail: text('generatedEmail').generatedAlwaysAs(
(): SQL => sql`\`email\``,
{ mode: 'virtual' },
),
}),
};
const { statements, sqlStatements } = await introspectSQLiteToFile(
sqlite,
schema,
'generated-link-column-virtual',
);
expect(statements.length).toBe(0);
expect(sqlStatements.length).toBe(0);
});
test('instrospect strings with single quotes', async () => {
const sqlite = new Database(':memory:');
const schema = {
columns: sqliteTable('columns', {
text: text('text').default('escape\'s quotes " '),
}),
};
const { statements, sqlStatements } = await introspectSQLiteToFile(
sqlite,
schema,
'introspect-strings-with-single-quotes',
);
expect(statements.length).toBe(0);
expect(sqlStatements.length).toBe(0);
});
test('introspect checks', async () => {
const sqlite = new Database(':memory:');
const schema = {
users: sqliteTable('users', {
id: int('id'),
name: text('name'),
age: int('age'),
}, (table) => ({
someCheck: check('some_check', sql`${table.age} > 21`),
})),
};
const { statements, sqlStatements } = await introspectSQLiteToFile(
sqlite,
schema,
'introspect-checks',
);
expect(statements.length).toBe(0);
expect(sqlStatements.length).toBe(0);
});
test('view #1', async () => {
const sqlite = new Database(':memory:');
const users = sqliteTable('users', { id: int('id') });
const testView = sqliteView('some_view', { id: int('id') }).as(
sql`SELECT * FROM ${users}`,
);
const schema = {
users: users,
testView,
};
const { statements, sqlStatements } = await introspectSQLiteToFile(
sqlite,
schema,
'view-1',
);
expect(statements.length).toBe(0);
expect(sqlStatements.length).toBe(0);
});