Files
gridline/desktop/src/lib/dbCapabilities.test.ts
T
adrianbonpin 6854d889c5 refactor: convert to bun-workspaces monorepo (desktop/ + www/)
- Move the Tauri app (React frontend + Rust backend) into desktop/ via
  git mv — configs unchanged (relative paths: tauri.conf.json, vite.config.ts)
- Root package.json becomes a private bun workspace container with
  orchestration scripts; desktop package renamed gridline-desktop
- Scaffold www/ with Astro 7 + Tailwind v4 (hand-wired vite plugin,
  static output, ready for Dokploy)
- Update release.yml for the new layout: projectPath: desktop,
  desktop/src-tauri resource paths, rust-cache workspace path
- Update README + AGENTS.md structure trees and dev commands
- Verified: vitest (1074), cargo test (354), desktop build, tauri dev
  (window launches), tauri build (dmg + app bundles), Astro build
2026-08-16 19:31:53 +08:00

116 lines
4.5 KiB
TypeScript

import { describe, it, expect } from "vitest";
import { DB_CAPABILITIES, getCapabilities, type DbCapabilities } from "./dbCapabilities";
describe("dbCapabilities", () => {
it("gives PostgreSQL every capability", () => {
const c = DB_CAPABILITIES.postgresql;
expect(c).toEqual<DbCapabilities>({
explorer: true, queries: true, objects: true, visualizer: true,
tools: true, editing: true, import: true, ddl: true, objectCrud: true,
maintenance: true, roles: true, tableManagement: true,
});
});
it("gives MySQL explorer/queries/editing/import/ddl/tools but not objects/visualizer", () => {
const c = DB_CAPABILITIES.mysql;
expect(c.explorer).toBe(true);
expect(c.queries).toBe(true);
expect(c.editing).toBe(true);
expect(c.import).toBe(true);
expect(c.ddl).toBe(true);
expect(c.tools).toBe(true);
expect(c.objects).toBe(false);
expect(c.visualizer).toBe(false);
});
it("gives SQLite explorer/queries/visualizer/editing/import/ddl/tools/tableManagement but not objects", () => {
const c = DB_CAPABILITIES.sqlite;
expect(c.explorer).toBe(true);
expect(c.queries).toBe(true);
expect(c.visualizer).toBe(true);
expect(c.editing).toBe(true);
expect(c.import).toBe(true);
expect(c.ddl).toBe(true);
expect(c.tools).toBe(true);
expect(c.tableManagement).toBe(true);
expect(c.objects).toBe(false);
});
it("gives Redis nothing (connection+test only)", () => {
expect(DB_CAPABILITIES.redis).toEqual<DbCapabilities>({
explorer: false, queries: false, objects: false, visualizer: false,
tools: false, editing: false, import: false, ddl: false, objectCrud: false,
maintenance: false, roles: false, tableManagement: false,
});
});
it("getCapabilities returns all-false for an unknown type", () => {
const c = getCapabilities("postgres" as never);
expect(Object.values(c).every((v) => v === false)).toBe(true);
});
it("getCapabilities returns the matrix entry for known types", () => {
expect(getCapabilities("postgresql")).toBe(DB_CAPABILITIES.postgresql);
expect(getCapabilities("redis")).toBe(DB_CAPABILITIES.redis);
});
it("objects capability (search/ddl/dependencies) is PG-only", () => {
expect(getCapabilities("postgresql").objects).toBe(true);
expect(getCapabilities("mysql").objects).toBe(false);
expect(getCapabilities("sqlite").objects).toBe(false);
expect(getCapabilities("redis").objects).toBe(false);
});
});
describe("objectCrud capability", () => {
it("is true only for postgresql", () => {
expect(DB_CAPABILITIES.postgresql.objectCrud).toBe(true);
expect(DB_CAPABILITIES.mysql.objectCrud).toBe(false);
expect(DB_CAPABILITIES.sqlite.objectCrud).toBe(false);
expect(DB_CAPABILITIES.redis.objectCrud).toBe(false);
});
it("unknown types get objectCrud false", () => {
expect(getCapabilities("oracle").objectCrud).toBe(false);
});
});
describe("v0.7.7 capabilities", () => {
it("postgresql has maintenance, roles, tableManagement", () => {
expect(DB_CAPABILITIES.postgresql.maintenance).toBe(true);
expect(DB_CAPABILITIES.postgresql.roles).toBe(true);
expect(DB_CAPABILITIES.postgresql.tableManagement).toBe(true);
});
it("mysql/sqlite/redis disable maintenance and roles; only sqlite also gets tableManagement", () => {
for (const t of ["mysql", "sqlite", "redis"] as const) {
expect(DB_CAPABILITIES[t].maintenance).toBe(false);
expect(DB_CAPABILITIES[t].roles).toBe(false);
}
expect(DB_CAPABILITIES.sqlite.tableManagement).toBe(true);
expect(DB_CAPABILITIES.mysql.tableManagement).toBe(false);
expect(DB_CAPABILITIES.redis.tableManagement).toBe(false);
});
it("getCapabilities is safe for unknown types", () => {
expect(getCapabilities("bogus").maintenance).toBe(false);
});
});
describe("dbCapabilities v0.7.8", () => {
it("enables tools for mysql and sqlite", () => {
expect(DB_CAPABILITIES.mysql.tools).toBe(true);
expect(DB_CAPABILITIES.sqlite.tools).toBe(true);
expect(DB_CAPABILITIES.postgresql.tools).toBe(true);
});
it("enables tableManagement for sqlite", () => {
expect(DB_CAPABILITIES.sqlite.tableManagement).toBe(true);
expect(DB_CAPABILITIES.mysql.tableManagement).toBe(false);
});
it("still reports editing/import/ddl for mysql and sqlite", () => {
expect(DB_CAPABILITIES.mysql.editing).toBe(true);
expect(DB_CAPABILITIES.mysql.import).toBe(true);
expect(DB_CAPABILITIES.mysql.ddl).toBe(true);
expect(DB_CAPABILITIES.sqlite.editing).toBe(true);
expect(DB_CAPABILITIES.sqlite.objects).toBe(false);
});
});