36 files changed
+232
-19
No files matched your search
@@ -61,3 +61,53 @@ describe("visibleDatabases schema filtering", () => {
|
||||
expect(isSystemSchemaName("kingbase", "public")).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe("visible database wildcard patterns (issue #7164)", () => {
|
||||
it("matches names with % and _ wildcards", async () => {
|
||||
const { databaseNameMatchesVisiblePatterns } = await import("@/lib/database/visibleDatabases");
|
||||
expect(databaseNameMatchesVisiblePatterns("n1_order", ["%n1%"])).toBe(true);
|
||||
expect(databaseNameMatchesVisiblePatterns("main", ["%n1%"])).toBe(false);
|
||||
expect(databaseNameMatchesVisiblePatterns("db1", ["db_"])).toBe(true);
|
||||
expect(databaseNameMatchesVisiblePatterns("db12", ["db_"])).toBe(false);
|
||||
expect(databaseNameMatchesVisiblePatterns("a.b", ["a.b"])).toBe(true);
|
||||
expect(databaseNameMatchesVisiblePatterns("axb", ["a.b"])).toBe(false);
|
||||
expect(databaseNameMatchesVisiblePatterns("N1_ORDER", ["%n1%"])).toBe(false);
|
||||
expect(databaseNameMatchesVisiblePatterns("any", [])).toBe(false);
|
||||
expect(databaseNameMatchesVisiblePatterns("any", undefined)).toBe(false);
|
||||
});
|
||||
|
||||
it("unions exact selection with pattern matches in filterVisibleDatabaseNames", async () => {
|
||||
const { filterVisibleDatabaseNames } = await import("@/lib/database/visibleDatabases");
|
||||
const names = ["n1_order", "n2_user", "main", "report"];
|
||||
expect(filterVisibleDatabaseNames(names, ["main"], ["%n1%"])).toEqual(["n1_order", "main"]);
|
||||
expect(filterVisibleDatabaseNames(names, undefined, ["n%"])).toEqual(["n1_order", "n2_user"]);
|
||||
expect(filterVisibleDatabaseNames(names, ["main"], undefined)).toEqual(["main"]);
|
||||
expect(filterVisibleDatabaseNames(names, undefined, [])).toEqual(names);
|
||||
});
|
||||
|
||||
it("applies patterns for connections in filterDatabaseNamesForConnection", async () => {
|
||||
const { filterDatabaseNamesForConnection } = await import("@/lib/database/visibleDatabases");
|
||||
const connection = { db_type: "mysql" as const, visible_database_patterns: ["%n1%"] };
|
||||
expect(filterDatabaseNamesForConnection(["n1_order", "main", "mysql", "sys"], connection)).toEqual(["n1_order"]);
|
||||
});
|
||||
|
||||
it("parses user pattern input with separators, trimming and dedupe", async () => {
|
||||
const { parseVisibleDatabasePatternsInput } = await import("@/lib/database/visibleDatabases");
|
||||
expect(parseVisibleDatabasePatternsInput(" %n1%, n2_; \n%n1% ,,")).toEqual(["%n1%", "n2_"]);
|
||||
expect(parseVisibleDatabasePatternsInput(" ")).toEqual([]);
|
||||
});
|
||||
|
||||
it("treats pattern-only configuration as a configured sidebar filter", async () => {
|
||||
const { connectionHasConfiguredSidebarVisibleFilter } = await import("@/lib/sidebar/sidebarVisibleFilterSummary");
|
||||
expect(connectionHasConfiguredSidebarVisibleFilter({ db_type: "mysql", visible_databases: undefined, visible_database_patterns: ["%n1%"] })).toBe(true);
|
||||
expect(connectionHasConfiguredSidebarVisibleFilter({ db_type: "mysql", visible_databases: undefined, visible_database_patterns: [] })).toBe(false);
|
||||
});
|
||||
|
||||
it("counts pattern-matched databases in the sidebar filter summary", async () => {
|
||||
const { sidebarVisibleFilterSummary } = await import("@/lib/sidebar/sidebarVisibleFilterSummary");
|
||||
const summary = sidebarVisibleFilterSummary({ db_type: "mysql", visible_databases: ["main"], visible_database_patterns: ["%n1%"] }, ["main", "n1_order", "n2_user", "mysql"]);
|
||||
expect(summary.isActive).toBe(true);
|
||||
expect(summary.selected).toBe(2);
|
||||
expect(summary.total).toBe(3);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user