Files
windmill/cli/test/datatable_virtual_catalog_unit.test.ts
T
Diego Imbert 28c8b5c60f feat: CLI datatable serve / psql (#9267)
* feat(cli): add datatable list and run commands

* feat(cli): render datatable query results as a table

* feat(cli): serve datatables as a postgres-wire endpoint

* feat(cli): add 'datatable psql' to launch psql against the proxy

* feat(cli): route datatable serve by client-supplied database name

* override database list + password option

* fix: support extended queries in datatable serve

* fix: correct cloud size threshold log and parse CLI descriptions with parens/trailing comma

* refactor: extract raw_output envelope encoding into pg_raw_output module

---------

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
2026-05-20 16:56:50 +00:00

47 lines
1.8 KiB
TypeScript

import { expect, test } from "bun:test";
import {
queryTouchesVirtualDatabaseCatalog,
virtualizeDatabaseCatalogQuery,
} from "../src/commands/datatable/virtual_catalog.ts";
test("queryTouchesVirtualDatabaseCatalog: detects current_database and pg_database", () => {
expect(queryTouchesVirtualDatabaseCatalog("select current_database()")).toBe(true);
expect(queryTouchesVirtualDatabaseCatalog("select * from pg_catalog.pg_database")).toBe(true);
expect(queryTouchesVirtualDatabaseCatalog("select * from public.users")).toBe(false);
});
test("virtualizeDatabaseCatalogQuery: rewrites current_database to the virtual datatable name", () => {
expect(
virtualizeDatabaseCatalogQuery(
"select current_database() as db",
"sales-main",
["sales-main"],
),
).toBe("select 'sales-main' as db");
});
test("virtualizeDatabaseCatalogQuery: rewrites pg_database reads to the virtual datatable catalog", () => {
const rewritten = virtualizeDatabaseCatalogQuery(
"select datname from pg_catalog.pg_database where datname = current_database() order by datname",
"sales-main",
["sales-main", "warehouse"],
);
expect(rewritten).toContain("FROM unnest(ARRAY['sales-main', 'warehouse']::text[]) WITH ORDINALITY");
expect(rewritten).toContain("where datname = 'sales-main'");
expect(rewritten).not.toContain("pg_catalog.pg_database");
});
test("virtualizeDatabaseCatalogQuery: neutralizes pg_database metadata helpers that need a real upstream database", () => {
const rewritten = virtualizeDatabaseCatalogQuery(
"select pg_size_pretty(pg_database_size(datname)) as size, has_database_privilege(datname, 'CONNECT') from pg_database",
"sales-main",
["sales-main"],
);
expect(rewritten).toContain("NULL::text as size");
expect(rewritten).toContain("true");
expect(rewritten).not.toContain("pg_database_size");
});