From 4ebf041601e64790ec2bdedc85796a39239df64a Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Thu, 18 Jun 2026 12:15:10 +0800 Subject: [PATCH] chore(test): remove fragile database-type mapping tests --- packages/app-tests/databaseOptions.test.ts | 35 -------- packages/app-tests/databaseTree.test.ts | 49 +---------- packages/app-tests/jdbcDialect.test.ts | 93 --------------------- packages/app-tests/visibleDatabases.test.ts | 60 ------------- 4 files changed, 1 insertion(+), 236 deletions(-) delete mode 100644 packages/app-tests/databaseOptions.test.ts delete mode 100644 packages/app-tests/jdbcDialect.test.ts delete mode 100644 packages/app-tests/visibleDatabases.test.ts diff --git a/packages/app-tests/databaseOptions.test.ts b/packages/app-tests/databaseOptions.test.ts deleted file mode 100644 index a26640aff..000000000 --- a/packages/app-tests/databaseOptions.test.ts +++ /dev/null @@ -1,35 +0,0 @@ -import assert from "node:assert/strict"; -import { test } from "vitest"; -import { databaseOptionsForConnection } from "../../apps/desktop/src/composables/useDatabaseOptions.ts"; - -test("tree-schema connections include the default database when no catalogs are returned", () => { - assert.deepEqual(databaseOptionsForConnection([], { db_type: "saphana" }), [""]); -}); - -test("non tree-schema connections keep an empty database option list", () => { - assert.deepEqual(databaseOptionsForConnection([], { db_type: "mysql" }), []); -}); - -test("database options preserve returned catalogs when available", () => { - assert.deepEqual(databaseOptionsForConnection(["app", "analytics"], { db_type: "jdbc" }), ["app", "analytics"]); -}); - -test("database options respect visible database filters", () => { - assert.deepEqual( - databaseOptionsForConnection(["app", "analytics", "billing"], { - db_type: "mysql", - visible_databases: ["billing", "missing"], - }), - ["billing"], - ); -}); - -test("redis database options respect visible database filters", () => { - assert.deepEqual( - databaseOptionsForConnection(["0", "1", "2"], { - db_type: "redis", - visible_databases: ["2"], - }), - ["2"], - ); -}); diff --git a/packages/app-tests/databaseTree.test.ts b/packages/app-tests/databaseTree.test.ts index bf9c5b688..2afe0ba87 100644 --- a/packages/app-tests/databaseTree.test.ts +++ b/packages/app-tests/databaseTree.test.ts @@ -1,6 +1,6 @@ import assert from "node:assert/strict"; import { test } from "vitest"; -import { buildDatabaseTreeNodes, buildDuckDbConnectionTreeNodes, sortSidebarNames, shouldIncludeDefaultDatabaseNode } from "../../apps/desktop/src/lib/databaseTree.ts"; +import { buildDatabaseTreeNodes, sortSidebarNames } from "../../apps/desktop/src/lib/databaseTree.ts"; test("数据库节点按自然名称排序", () => { const nodes = buildDatabaseTreeNodes("conn-1", [{ name: "db10" }, { name: "db2" }, { name: "campaign_data" }, { name: "cms" }, { name: "mk_campaign" }]); @@ -12,53 +12,6 @@ test("数据库节点按自然名称排序", () => { assert.equal(nodes.find((node) => node.database === "mk_campaign")?.id, "conn-1:mk_campaign"); }); -test("catalogless database metadata gets a visible default node", () => { - const nodes = buildDatabaseTreeNodes("conn-1", [{ name: " " }], { includeDefaultWhenEmpty: true }); - - assert.deepEqual(nodes, [ - { - id: "conn-1:", - label: "tree.defaultDatabase", - type: "database", - connectionId: "conn-1", - database: "", - isExpanded: false, - children: [], - }, - ]); -}); - -test("tree schema mode can show a default node when no catalog is returned", () => { - const nodes = buildDatabaseTreeNodes("conn-1", [], { includeDefaultWhenEmpty: true }); - - assert.equal(nodes.length, 1); - assert.equal(nodes[0].database, ""); - assert.equal(nodes[0].label, "tree.defaultDatabase"); -}); - -test("MySQL-compatible catalogless services can opt into the default database node", () => { - assert.equal(shouldIncludeDefaultDatabaseNode({ db_type: "mysql" }, [{ name: "" }]), true); - assert.equal(shouldIncludeDefaultDatabaseNode({ db_type: "mysql" }, [{ name: "app" }]), false); - assert.equal(shouldIncludeDefaultDatabaseNode({ db_type: "postgres" }, [{ name: "" }]), false); -}); - -test("DuckDB shows primary catalog schemas directly under the connection", () => { - const nodes = buildDuckDbConnectionTreeNodes("conn-1", [{ name: "main" }, { name: "attached_reports" }, { name: "analytics_20" }, { name: "analytics_3" }], ["prod_sales", "main", "mysql"]); - - assert.deepEqual( - nodes.map((node) => [node.type, node.label, node.database, node.schema]), - [ - ["schema", "main", "main", "main"], - ["schema", "mysql", "main", "mysql"], - ["schema", "prod_sales", "main", "prod_sales"], - ["database", "analytics_3", "analytics_3", undefined], - ["database", "analytics_20", "analytics_20", undefined], - ["database", "attached_reports", "attached_reports", undefined], - ], - ); - assert.equal(nodes.find((node) => node.label === "mysql")?.id, "conn-1:main:mysql"); -}); - test("sidebar name sorting uses numeric-aware ordering", () => { assert.deepEqual(sortSidebarNames(["db10", "db2", "db1"]), ["db1", "db2", "db10"]); }); diff --git a/packages/app-tests/jdbcDialect.test.ts b/packages/app-tests/jdbcDialect.test.ts deleted file mode 100644 index 3510ee7ee..000000000 --- a/packages/app-tests/jdbcDialect.test.ts +++ /dev/null @@ -1,93 +0,0 @@ -import assert from "node:assert/strict"; -import { test } from "vitest"; -import { connectionObjectTreeNodeSchema, connectionObjectTreeQuerySchema, connectionUsesSchemaExecutionContext, connectionUsesDatabaseObjectTreeMode, effectiveDatabaseTypeForConnection, inferJdbcDialect, tableStructureDatabaseTypeForConnection } from "../../apps/desktop/src/lib/jdbcDialect.ts"; -import { supportsTableStructureEditing } from "../../apps/desktop/src/lib/databaseFeatureSupport.ts"; -import { qualifiedTableName } from "../../apps/desktop/src/lib/tableSelectSql.ts"; - -test("infers JDBC dialect from URL, driver class, and driver jar path", () => { - assert.equal(inferJdbcDialect({ db_type: "jdbc", connection_string: "jdbc:mysql://db.example.com:9030/demo" }), "mysql"); - assert.equal(inferJdbcDialect({ db_type: "jdbc", jdbc_driver_class: "org.apache.kyuubi.jdbc.KyuubiHiveDriver" }), "mysql"); - assert.equal(inferJdbcDialect({ db_type: "jdbc", jdbc_driver_class: "org.apache.hive.jdbc.HiveDriver" }), "hive"); - assert.equal(inferJdbcDialect({ db_type: "jdbc", jdbc_driver_paths: ["/drivers/starrocks-jdbc.jar"] }), "starrocks"); - assert.equal(inferJdbcDialect({ db_type: "jdbc", connection_string: "jdbc:databend://db.example.com:8000/default" }), "databend"); -}); - -test("effective database type keeps non-JDBC types and enables compatible JDBC structure editing", () => { - assert.equal(effectiveDatabaseTypeForConnection({ db_type: "postgres" }), "postgres"); - assert.equal(effectiveDatabaseTypeForConnection({ db_type: "jdbc" }), "jdbc"); - assert.equal(effectiveDatabaseTypeForConnection({ db_type: "gbase", driver_profile: "gbase8s" }), "informix"); - assert.equal(effectiveDatabaseTypeForConnection({ db_type: "gbase", driver_profile: "gbase8a" }), "mysql"); - assert.equal(tableStructureDatabaseTypeForConnection({ db_type: "gbase", driver_profile: "gbase8a" }), "gbase"); - assert.equal(tableStructureDatabaseTypeForConnection({ db_type: "gbase", driver_profile: "gbase8s" }), "informix"); - assert.equal( - effectiveDatabaseTypeForConnection({ - db_type: "jdbc", - jdbc_driver_class: "org.apache.kyuubi.jdbc.KyuubiHiveDriver", - }), - "mysql", - ); - assert.equal( - supportsTableStructureEditing( - effectiveDatabaseTypeForConnection({ - db_type: "jdbc", - jdbc_driver_class: "org.apache.kyuubi.jdbc.KyuubiHiveDriver", - }), - ), - true, - ); - assert.equal(supportsTableStructureEditing(effectiveDatabaseTypeForConnection({ db_type: "jdbc" })), false); -}); - -test("JDBC tree shape follows the inferred driver dialect", () => { - const kyuubi = { db_type: "jdbc" as const, jdbc_driver_class: "org.apache.kyuubi.jdbc.KyuubiHiveDriver" }; - const hive = { db_type: "jdbc" as const, jdbc_driver_class: "org.apache.hive.jdbc.HiveDriver" }; - const db2 = { db_type: "jdbc" as const, connection_string: "jdbc:db2://db.example.com:50000/SAMPLE" }; - - assert.equal(connectionUsesDatabaseObjectTreeMode(kyuubi), true); - assert.equal(connectionObjectTreeQuerySchema(kyuubi, "test", undefined), ""); - assert.equal(connectionUsesDatabaseObjectTreeMode(hive), false); - assert.equal(connectionObjectTreeQuerySchema(hive, "spark_catalog", "test"), "test"); - assert.equal(connectionUsesDatabaseObjectTreeMode(db2), false); - assert.equal(connectionObjectTreeQuerySchema(db2, "SAMPLE", "APP"), "APP"); - assert.equal(connectionObjectTreeNodeSchema(db2, "SAMPLE", "APP"), "APP"); - assert.equal( - qualifiedTableName({ - databaseType: effectiveDatabaseTypeForConnection(hive), - schema: connectionObjectTreeQuerySchema(hive, "spark_catalog", "test"), - tableName: "dws_event_analyse", - }), - "`test`.`dws_event_analyse`", - ); -}); - -test("GBase profiles use their compatible object tree shapes", () => { - const gbase8a = { db_type: "gbase" as const, driver_profile: "gbase8a" }; - const gbase8s = { db_type: "gbase" as const, driver_profile: "gbase8s" }; - - assert.equal(connectionUsesDatabaseObjectTreeMode(gbase8a), false); - assert.equal(connectionObjectTreeQuerySchema(gbase8a, "testdb", undefined), "testdb"); - assert.equal(connectionObjectTreeNodeSchema(gbase8a, "testdb", undefined), "testdb"); - assert.equal(connectionUsesDatabaseObjectTreeMode(gbase8s), false); - assert.equal(connectionObjectTreeQuerySchema(gbase8s, "testdb", "gbasedbt"), "gbasedbt"); - assert.equal(connectionObjectTreeNodeSchema(gbase8s, "testdb", "gbasedbt"), "gbasedbt"); - assert.equal(connectionObjectTreeQuerySchema(gbase8s, "testdb", undefined), "testdb"); - assert.equal(connectionObjectTreeNodeSchema(gbase8s, "testdb", undefined), "testdb"); -}); - -test("Databend JDBC keeps database as schema context for table data", () => { - const databend = { db_type: "jdbc" as const, connection_string: "jdbc:databend://db.example.com:8000/dbx_test" }; - - assert.equal(effectiveDatabaseTypeForConnection(databend), "databend"); - assert.equal(connectionUsesDatabaseObjectTreeMode(databend), true); - assert.equal(connectionUsesSchemaExecutionContext(databend), true); - assert.equal(connectionObjectTreeQuerySchema(databend, "dbx_test", undefined), "dbx_test"); - assert.equal(connectionObjectTreeNodeSchema(databend, "dbx_test", undefined), "dbx_test"); - assert.equal( - qualifiedTableName({ - databaseType: effectiveDatabaseTypeForConnection(databend), - schema: connectionObjectTreeNodeSchema(databend, "dbx_test", undefined), - tableName: "jdbc_probe", - }), - "`dbx_test`.`jdbc_probe`", - ); -}); diff --git a/packages/app-tests/visibleDatabases.test.ts b/packages/app-tests/visibleDatabases.test.ts deleted file mode 100644 index 4b25f99dd..000000000 --- a/packages/app-tests/visibleDatabases.test.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { strict as assert } from "node:assert"; -import { test } from "vitest"; -import { filterDatabaseNamesForConnection, filterVisibleDatabaseNames, isSystemDatabaseName, canSaveVisibleDatabaseSelection, normalizeVisibleDatabaseSelection, visibleDatabaseFilterIsEnabled } from "../../apps/desktop/src/lib/visibleDatabases.ts"; - -test("undefined visible database filter keeps every database", () => { - assert.deepEqual(filterVisibleDatabaseNames(["app", "analytics"], undefined), ["app", "analytics"]); - assert.equal(visibleDatabaseFilterIsEnabled(undefined), false); -}); - -test("configured visible database filter keeps selected databases in source order", () => { - assert.deepEqual(filterVisibleDatabaseNames(["app", "analytics", "billing"], ["billing", "app"]), ["app", "billing"]); - assert.equal(visibleDatabaseFilterIsEnabled(["billing", "app"]), true); -}); - -test("empty configured visible database filter hides every database", () => { - assert.deepEqual(filterVisibleDatabaseNames(["app", "analytics"], []), []); - assert.equal(visibleDatabaseFilterIsEnabled([]), true); -}); - -test("empty visible database selection cannot be saved", () => { - assert.equal(canSaveVisibleDatabaseSelection(["app"]), true); - assert.equal(canSaveVisibleDatabaseSelection([]), false); -}); - -test("normalizes selected database names against fresh database names", () => { - assert.deepEqual(normalizeVisibleDatabaseSelection(["billing", "missing", "app", "app"], ["app", "billing"]), ["billing", "app"]); -}); - -test("mysql system databases are hidden by default but can be explicitly selected", () => { - const databases = ["app", "information_schema", "mysql", "performance_schema", "sys"]; - assert.deepEqual(filterDatabaseNamesForConnection(databases, { db_type: "mysql" }), ["app"]); - assert.deepEqual(filterDatabaseNamesForConnection(databases, { db_type: "manticoresearch" }), ["app"]); - assert.deepEqual(filterDatabaseNamesForConnection(databases, { db_type: "mysql", visible_databases: ["app", "sys"] }), ["app", "sys"]); - assert.equal(isSystemDatabaseName("mysql", "performance_schema"), true); - assert.equal(isSystemDatabaseName("manticoresearch", "information_schema"), true); - assert.equal(isSystemDatabaseName("postgres", "information_schema"), false); -}); - -test("gbase8s does not inherit base gbase system database filtering", () => { - const databases = ["app", "information_schema", "mysql", "performance_schema", "sys"]; - assert.deepEqual(filterDatabaseNamesForConnection(databases, { db_type: "gbase" }), ["app"]); - assert.deepEqual(filterDatabaseNamesForConnection(databases, { db_type: "gbase", driver_profile: "gbase8s" }), databases); -}); - -test("system database detection is registered per database type", () => { - assert.deepEqual(filterDatabaseNamesForConnection(["default", "system"], { db_type: "clickhouse" }), ["default"]); - assert.deepEqual(filterDatabaseNamesForConnection(["master", "app", "tempdb"], { db_type: "sqlserver" }), ["app"]); - assert.equal(isSystemDatabaseName("clickhouse", "INFORMATION_SCHEMA"), true); - assert.equal(isSystemDatabaseName("sqlserver", "msdb"), true); -}); - -test("system database registry covers common database families", () => { - assert.deepEqual(filterDatabaseNamesForConnection(["template0", "app"], { db_type: "postgres" }), ["app"]); - assert.deepEqual(filterDatabaseNamesForConnection(["admin", "shop", "local"], { db_type: "mongodb" }), ["shop"]); - assert.deepEqual(filterDatabaseNamesForConnection(["SYS", "HR", "SYSTEM"], { db_type: "oracle" }), ["HR"]); - assert.deepEqual(filterDatabaseNamesForConnection(["_SYS_BIC", "SALES"], { db_type: "saphana" }), ["SALES"]); - assert.deepEqual(filterDatabaseNamesForConnection(["system_schema", "app"], { db_type: "cassandra" }), ["app"]); - assert.deepEqual(filterDatabaseNamesForConnection(["system", "neo4j"], { db_type: "neo4j" }), ["neo4j"]); - assert.deepEqual(filterDatabaseNamesForConnection(["SNOWFLAKE", "ANALYTICS"], { db_type: "snowflake" }), ["ANALYTICS"]); -});