chore(test): remove fragile database-type mapping tests
This commit is contained in:
parent
a2d4d52113
commit
4ebf041601
|
|
@ -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"],
|
||||
);
|
||||
});
|
||||
|
|
@ -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"]);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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`",
|
||||
);
|
||||
});
|
||||
|
|
@ -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"]);
|
||||
});
|
||||
Loading…
Reference in New Issue