Files
dbx/apps/desktop/src/lib/__tests__/metadata/completionTreeIndex.spec.ts
T

119 lines
4.2 KiB
TypeScript
Vendored

import { describe, expect, it } from "vitest";
import { completionSchemasFromTree, completionTablesFromTree } from "@/lib/metadata/completionTreeIndex";
import type { TreeNode } from "@/types/database";
describe("completionTreeIndex", () => {
it("extracts PrestoSQL schemas and loaded grouped tables from the sidebar tree", () => {
const tree: TreeNode[] = [
{
id: "conn",
label: "PrestoSQL",
type: "connection",
connectionId: "conn",
children: [
{
id: "conn:hive",
label: "hive",
type: "database",
connectionId: "conn",
database: "hive",
children: [
{
id: "conn:hive:sales_analytics",
label: "sales_analytics",
type: "schema",
connectionId: "conn",
database: "hive",
schema: "sales_analytics",
children: [
{
id: "conn:hive:sales_analytics:__tables",
label: "tree.tables",
type: "group-tables",
connectionId: "conn",
database: "hive",
schema: "sales_analytics",
children: [
{
id: "conn:hive:sales_analytics:__tables:daily_revenue",
label: "daily_revenue",
type: "table",
connectionId: "conn",
database: "hive",
schema: "sales_analytics",
},
{
id: "conn:hive:sales_analytics:__tables:daily_revenue_view",
label: "daily_revenue_view",
type: "view",
connectionId: "conn",
database: "hive",
schema: "sales_analytics",
},
{
id: "conn:hive:sales_analytics:__tables:daily_revenue_mv",
label: "daily_revenue_mv",
type: "materialized_view",
connectionId: "conn",
database: "hive",
schema: "sales_analytics",
},
],
},
],
},
],
},
],
},
];
expect(completionSchemasFromTree(tree, "conn", "hive")).toEqual(["sales_analytics"]);
const expected = [
{ name: "daily_revenue", schema: "sales_analytics", type: "table" },
{ name: "daily_revenue_view", schema: "sales_analytics", type: "view" },
{ name: "daily_revenue_mv", schema: "sales_analytics", type: "materialized_view" },
];
expect(completionTablesFromTree(tree, "conn", "hive", "sales_analytics")).toEqual(expected);
expect(completionTablesFromTree(tree, "conn", "hive")).toEqual(expected);
});
it("isolates Doris internal and external catalog tables with the same database name", () => {
const tree: TreeNode[] = [
{
id: "internal-orders",
label: "orders",
type: "table",
connectionId: "doris",
database: "sales",
},
{
id: "hive-orders",
label: "orders",
type: "table",
connectionId: "doris",
catalog: "hive_catalog",
database: "sales",
},
];
expect(completionTablesFromTree(tree, "doris", "sales")).toEqual([{ name: "orders", schema: undefined, type: "table" }]);
expect(completionTablesFromTree(tree, "doris", "sales", undefined, "hive_catalog")).toEqual([{ name: "orders", catalog: "hive_catalog", schema: undefined, type: "table" }]);
});
it("preserves TDengine stable metadata from the sidebar tree", () => {
const tree: TreeNode[] = [
{
id: "tdengine-stable",
label: "test_tb",
type: "table",
tableType: "STABLE",
connectionId: "tdengine",
database: "issue_5685",
},
];
expect(completionTablesFromTree(tree, "tdengine", "issue_5685")).toEqual([{ name: "test_tb", schema: undefined, type: "table", tableType: "STABLE" }]);
});
});