Files
dbx/apps/desktop/src/lib/__tests__/database/phoenixBuiltinDriver.spec.ts
T

74 lines
3.5 KiB
TypeScript
Vendored

import { describe, expect, it } from "vitest";
import { PHOENIX_JDBC_DRIVER_VERSION, PHOENIX_MANAGED_JDBC_DRIVER, PHOENIX_MANAGED_MAVEN_COORDINATES } from "@/lib/database/phoenixBuiltinDriver";
import { PHOENIX_MAVEN_REPOSITORY } from "@/lib/database/phoenixConnection";
import { managedJdbcDriverBundles, managedJdbcDriverRow, missingManagedJdbcDriverBundles } from "@/lib/database/managedJdbcDriver";
import type { JdbcMavenBundleInfo } from "@/types/database";
function bundle(coordinate: string, size = 100): JdbcMavenBundleInfo {
const [groupId, artifactId, version] = coordinate.split(":");
return {
id: `bundle:${coordinate}`,
coordinate,
scope: "runtime",
repositories: [PHOENIX_MAVEN_REPOSITORY],
installed_at: "2026-08-05T00:00:00Z",
path: "drivers/jdbc",
artifacts: [
{
group_id: groupId,
artifact_id: artifactId,
version,
classifier: "",
extension: "jar",
file_name: `${artifactId}-${version}.jar`,
path: `drivers/jdbc/${artifactId}-${version}.jar`,
size,
sha256: coordinate,
},
],
};
}
describe("phoenixBuiltinDriver", () => {
it("shows one uninstalled Apache Phoenix JDBC row when no managed bundle exists", () => {
const row = managedJdbcDriverRow(PHOENIX_MANAGED_JDBC_DRIVER, []);
expect(row.db_type).toBe("phoenix");
expect(row.label).toBe("Apache Phoenix JDBC");
expect(row.version).toBe(PHOENIX_JDBC_DRIVER_VERSION);
expect(row.installed).toBe(false);
expect(row.installed_version).toBeNull();
expect(row.jre).toBe("21");
expect(missingManagedJdbcDriverBundles(PHOENIX_MANAGED_JDBC_DRIVER, []).map(({ coordinate }) => coordinate)).toEqual(PHOENIX_MANAGED_MAVEN_COORDINATES);
});
it("stays uninstalled for a partial runtime and reports only missing coordinates", () => {
const direct = bundle(PHOENIX_MANAGED_MAVEN_COORDINATES[0], 120);
const row = managedJdbcDriverRow(PHOENIX_MANAGED_JDBC_DRIVER, [direct]);
expect(row.installed).toBe(false);
expect(row.size).toBe(120);
expect(managedJdbcDriverBundles(PHOENIX_MANAGED_JDBC_DRIVER, [direct])).toEqual([direct]);
expect(missingManagedJdbcDriverBundles(PHOENIX_MANAGED_JDBC_DRIVER, [direct]).map(({ coordinate }) => coordinate)).toEqual(PHOENIX_MANAGED_MAVEN_COORDINATES.slice(1));
});
it("is installed only when Direct, logging, and PQS bundles are all present", () => {
const unrelated = bundle("com.mysql:mysql-connector-j:9.2.0", 999);
const managed = PHOENIX_MANAGED_MAVEN_COORDINATES.map((coordinate, index) => bundle(coordinate, index + 1));
const row = managedJdbcDriverRow(PHOENIX_MANAGED_JDBC_DRIVER, [unrelated, ...managed], { installed: true, compatible: true });
expect(row.installed).toBe(true);
expect(row.installed_version).toBe(PHOENIX_JDBC_DRIVER_VERSION);
expect(row.size).toBe(6);
expect(managedJdbcDriverBundles(PHOENIX_MANAGED_JDBC_DRIVER, [unrelated, ...managed])).toEqual(managed);
expect(missingManagedJdbcDriverBundles(PHOENIX_MANAGED_JDBC_DRIVER, [unrelated, ...managed])).toEqual([]);
});
it("stays uninstalled when all bundles exist but the shared JDBC plugin is unavailable", () => {
const managed = PHOENIX_MANAGED_MAVEN_COORDINATES.map((coordinate) => bundle(coordinate));
expect(managedJdbcDriverRow(PHOENIX_MANAGED_JDBC_DRIVER, managed, { installed: false, compatible: true }).installed).toBe(false);
expect(managedJdbcDriverRow(PHOENIX_MANAGED_JDBC_DRIVER, managed, { installed: true, compatible: false }).installed).toBe(false);
});
});