101 lines
2.7 KiB
TypeScript
Vendored
101 lines
2.7 KiB
TypeScript
Vendored
import { strict as assert } from "node:assert";
|
|
import { test } from "vitest";
|
|
import { defaultGeneratorParams, displayGeneratedValue, generateTableData, generateValue } from "../../apps/desktop/src/lib/dataGrid/dataGenerate.ts";
|
|
|
|
test("enables default values for columns with schema defaults", () => {
|
|
const params = defaultGeneratorParams(
|
|
"status",
|
|
{
|
|
dataType: "varchar(16)",
|
|
columnDefault: "active",
|
|
},
|
|
"text",
|
|
);
|
|
|
|
assert.equal(params.includeDefault, true);
|
|
assert.equal(params.defaultPercent, 100);
|
|
});
|
|
|
|
test("uses string column defaults instead of random generated values", () => {
|
|
const result = generateTableData(
|
|
{
|
|
tableName: "users",
|
|
schema: "public",
|
|
database: "app",
|
|
rowCount: 2,
|
|
columns: [
|
|
{
|
|
columnName: "status",
|
|
dataType: "varchar(16)",
|
|
rowCount: 2,
|
|
generatorKey: "text",
|
|
generatorParams: { includeDefault: true, defaultPercent: 100 },
|
|
columnDefault: "active",
|
|
},
|
|
],
|
|
},
|
|
"postgres",
|
|
);
|
|
|
|
assert.deepEqual(result.rows, [["active"], ["active"]]);
|
|
assert.match(result.sql, /VALUES\n\('active'\),\n\('active'\);$/);
|
|
});
|
|
|
|
test("unwraps quoted and casted PostgreSQL default literals", () => {
|
|
const result = generateTableData(
|
|
{
|
|
tableName: "users",
|
|
schema: "public",
|
|
database: "app",
|
|
rowCount: 1,
|
|
columns: [
|
|
{
|
|
columnName: "role",
|
|
dataType: "text",
|
|
rowCount: 1,
|
|
generatorKey: "text",
|
|
generatorParams: { includeDefault: true, defaultPercent: 100 },
|
|
columnDefault: "'guest'::text",
|
|
},
|
|
],
|
|
},
|
|
"postgres",
|
|
);
|
|
|
|
assert.deepEqual(result.rows, [["guest"]]);
|
|
assert.match(result.sql, /VALUES\n\('guest'\);$/);
|
|
});
|
|
|
|
test("keeps expression defaults as raw SQL", () => {
|
|
const result = generateTableData(
|
|
{
|
|
tableName: "events",
|
|
schema: "public",
|
|
database: "app",
|
|
rowCount: 2,
|
|
columns: [
|
|
{
|
|
columnName: "created_at",
|
|
dataType: "timestamp",
|
|
rowCount: 2,
|
|
generatorKey: "datetime",
|
|
generatorParams: { includeDefault: true, defaultPercent: 100 },
|
|
columnDefault: "CURRENT_TIMESTAMP",
|
|
},
|
|
],
|
|
},
|
|
"postgres",
|
|
);
|
|
|
|
assert.equal(displayGeneratedValue(result.rows[0][0]), "CURRENT_TIMESTAMP");
|
|
assert.match(result.sql, /VALUES\n\(CURRENT_TIMESTAMP\),\n\(CURRENT_TIMESTAMP\);$/);
|
|
assert.doesNotMatch(result.sql, /'CURRENT_TIMESTAMP'/);
|
|
});
|
|
|
|
test("includeDefault without a schema default no longer emits NULL", () => {
|
|
const value = generateValue("name", "varchar(32)", "text", 0, { includeDefault: true, defaultPercent: 100 });
|
|
|
|
assert.notEqual(value, null);
|
|
assert.notEqual(value, undefined);
|
|
});
|