- 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
42 lines
2.1 KiB
TypeScript
42 lines
2.1 KiB
TypeScript
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
import { render, screen, fireEvent, waitFor } from "@testing-library/react";
|
|
import * as cmd from "../../lib/commands";
|
|
import { SchemaMenu } from "./SchemaMenu";
|
|
|
|
vi.mock("../../lib/commands");
|
|
|
|
describe("SchemaMenu", () => {
|
|
beforeEach(() => {
|
|
vi.mocked(cmd.createSchema).mockReset();
|
|
vi.mocked(cmd.renameSchema).mockReset();
|
|
vi.mocked(cmd.dropSchema).mockReset();
|
|
vi.mocked(cmd.getObjectDependencies).mockReset();
|
|
});
|
|
|
|
it("create happy path calls createSchema then refreshTree", async () => {
|
|
vi.mocked(cmd.createSchema).mockResolvedValue(undefined);
|
|
const refresh = vi.fn();
|
|
render(<SchemaMenu connectionId="c1" onRefresh={refresh} />);
|
|
fireEvent.click(screen.getByLabelText(/new schema/i));
|
|
fireEvent.change(screen.getByPlaceholderText(/schema name/i), { target: { value: "myschema" } });
|
|
fireEvent.click(screen.getByRole("button", { name: /create/i }));
|
|
await waitFor(() => expect(cmd.createSchema).toHaveBeenCalledWith("c1", "myschema"));
|
|
await waitFor(() => expect(refresh).toHaveBeenCalled());
|
|
});
|
|
|
|
it("drop non-empty requires cascade checkbox + typed confirm", async () => {
|
|
vi.mocked(cmd.getObjectDependencies).mockResolvedValue([{ deptype: "n", class: "pg_class", name: "users" }]);
|
|
vi.mocked(cmd.dropSchema).mockResolvedValue(undefined);
|
|
const refresh = vi.fn();
|
|
render(<SchemaMenu connectionId="c1" schema="s" onRefresh={refresh} />);
|
|
fireEvent.click(screen.getByLabelText(/schema menu/i));
|
|
fireEvent.click(screen.getByText(/drop/i));
|
|
await waitFor(() => expect(cmd.getObjectDependencies).toHaveBeenCalledWith("c1", "s", "schema", "s"));
|
|
await waitFor(() => expect(screen.getByText("users")).toBeTruthy());
|
|
fireEvent.click(screen.getByRole("checkbox"));
|
|
fireEvent.change(screen.getByPlaceholderText(/type the schema name/i), { target: { value: "s" } });
|
|
fireEvent.click(screen.getByRole("button", { name: /drop schema/i }));
|
|
await waitFor(() => expect(cmd.dropSchema).toHaveBeenCalledWith("c1", "s", true));
|
|
await waitFor(() => expect(refresh).toHaveBeenCalled());
|
|
});
|
|
}); |