/* Copyright 2026 Marimo. All rights reserved. */ import { fireEvent, render, screen, waitFor } from "@testing-library/react"; import { describe, expect, it, vi } from "vitest"; import type { DetectedDataSource } from "@/core/datasets/data-source-discovery"; import { QuickAddDataSources } from "../quick-add-data-sources"; const sources: DetectedDataSource[] = [ { id: "postgres-libpq-environment", integration: "postgres", category: "database", displayName: "PostgreSQL", confidence: "high", origins: [{ type: "environment", label: "Kernel environment" }], configuration: [ { field: "Host", value: { kind: "environment-variable", name: "PGHOST" }, }, { field: "Username", value: { kind: "environment-variable", name: "PGUSER" }, }, { field: "Database", value: { kind: "environment-variable", name: "PGDATABASE" }, }, ], code: "engine = create_engine()", hidesWhen: { kind: "dialect", substrings: ["postgres"] }, }, { id: "pyiceberg-prod", integration: "pyiceberg", category: "catalog", displayName: "PyIceberg (prod)", confidence: "high", origins: [ { type: "configuration", label: "Resolved PyIceberg configuration", }, ], configuration: [ { field: "Catalog", value: { kind: "safe-literal", value: "prod" }, }, { field: "Type", value: { kind: "safe-literal", value: "REST" }, }, ], code: 'catalog = load_catalog("prod")', hidesWhen: { kind: "dialect", substrings: ["iceberg"] }, }, ]; describe("QuickAddDataSources", () => { it("does not render an empty section", () => { const { container } = render( , ); expect(container).toBeEmptyDOMElement(); }); it("renders detected sources as clickable tags", () => { const onAdd = vi.fn(); render(); fireEvent.click( screen.getByRole("button", { name: "Add PostgreSQL connection", }), ); expect(screen.getByText("Quick add")).toBeInTheDocument(); expect(onAdd).toHaveBeenCalledWith(sources[0]); }); it("shows environment references on hover", async () => { render(); const tag = screen.getByRole("button", { name: "Add PostgreSQL connection", }); fireEvent.pointerMove(tag); fireEvent.mouseOver(tag); await waitFor(() => { expect(screen.getAllByText('os.environ["PGHOST"]')).not.toHaveLength(0); }); expect(screen.getAllByText('os.environ["PGUSER"]')).not.toHaveLength(0); expect(screen.getAllByText('os.environ["PGDATABASE"]')).not.toHaveLength(0); }); it("shows safe configuration metadata on hover", async () => { render(); const tag = screen.getByRole("button", { name: "Add PyIceberg (prod) connection", }); fireEvent.pointerMove(tag); fireEvent.mouseOver(tag); await waitFor(() => { expect( screen.getAllByText("Detected from Resolved PyIceberg configuration"), ).not.toHaveLength(0); }); expect(screen.getAllByText("REST")).not.toHaveLength(0); }); });