Files
t8y2--dbx/packages/app-tests/schemaDiffTableFilter.test.ts
2026-07-13 13:09:14 +08:00

66 lines
1.9 KiB
TypeScript
Vendored

import assert from "node:assert/strict";
import { test } from "vitest";
import { compileSchemaDiffTableFilter, filterSchemaDiffTables } from "../../apps/desktop/src/lib/schema/schemaDiffTableFilter.ts";
import type { TableInfo } from "../../apps/desktop/src/types/database.ts";
import { normalizeSchemaDiffCompareOptions } from "../../apps/desktop/src/types/schemaDiff.ts";
function table(name: string): TableInfo {
return {
name,
table_type: "BASE TABLE",
comment: null,
parent_schema: null,
parent_name: null,
};
}
test("filters schema diff tables before detail loading", () => {
const filter = compileSchemaDiffTableFilter(
normalizeSchemaDiffCompareOptions({
tableIncludePattern: "^user_|^orders$",
tableExcludePattern: "_bak$",
tableFilterPriority: "exclude",
}),
);
const result = filterSchemaDiffTables([table("user_profile"), table("user_profile_bak"), table("orders"), table("audit_log")], [table("user_profile"), table("orders_bak"), table("orders")], filter);
assert.deepEqual(
result.sourceTables.map((item) => item.name),
["user_profile", "orders"],
);
assert.deepEqual(
result.targetTables.map((item) => item.name),
["user_profile", "orders"],
);
});
test("lets include priority keep tables that also match exclude", () => {
const filter = compileSchemaDiffTableFilter(
normalizeSchemaDiffCompareOptions({
tableIncludePattern: "^user_",
tableExcludePattern: "_bak$",
tableFilterPriority: "include",
}),
);
const result = filterSchemaDiffTables([table("user_profile_bak")], [], filter);
assert.deepEqual(
result.sourceTables.map((item) => item.name),
["user_profile_bak"],
);
});
test("rejects invalid schema diff table regex", () => {
assert.throws(
() =>
compileSchemaDiffTableFilter(
normalizeSchemaDiffCompareOptions({
tableIncludePattern: "[",
}),
),
/Invalid include table name regex/,
);
});