/* Copyright 2026 Marimo. All rights reserved. */ import { render } from "@testing-library/react"; import { Provider } from "jotai"; import type React from "react"; import { beforeEach, describe, expect, it, vi } from "vitest"; import { MockRequestClient } from "@/__mocks__/requests"; import type { SQLTableContext } from "@/core/datasets/data-source-connections"; import type { DataTable, DataTableColumn } from "@/core/kernel/messages"; import { requestClientAtom } from "@/core/network/requests"; import { store } from "@/core/state/jotai"; import { DatasetColumnPreview } from "../column-preview"; const wrapper = ({ children }: { children: React.ReactNode }) => ( {children} ); const table: DataTable = { name: "users", columns: [], source: "my_engine", // Not "connection"/"catalog", so a preview is requested on mount. source_type: "duckdb", type: "table", engine: "my_engine" as DataTable["engine"], indexes: null, num_columns: null, num_rows: null, variable_name: null, primary_keys: null, }; const column = { name: "email" } as DataTableColumn; function renderPreview(sqlTableContext?: SQLTableContext) { const client = MockRequestClient.create(); store.set(requestClientAtom, client); render( , { wrapper }, ); return client; } const ctx = ( overrides: Partial & { database: string; schema: string }, ): SQLTableContext => ({ engine: "my_engine", dialect: "duckdb", ...overrides, }); describe("DatasetColumnPreview fullyQualifiedTableName", () => { beforeEach(() => { vi.clearAllMocks(); }); it("uses just the table name without a SQL context", () => { const client = renderPreview(undefined); expect(client.previewDatasetColumn).toHaveBeenCalledWith( expect.objectContaining({ fullyQualifiedTableName: "users" }), ); }); it("qualifies with database and schema for flat engines", () => { const client = renderPreview(ctx({ database: "db", schema: "public" })); expect(client.previewDatasetColumn).toHaveBeenCalledWith( expect.objectContaining({ fullyQualifiedTableName: "db.public.users" }), ); }); it("does not emit a double dot for schemaless tables", () => { // Regression: previously produced "db..users". const client = renderPreview(ctx({ database: "db", schema: "" })); expect(client.previewDatasetColumn).toHaveBeenCalledWith( expect.objectContaining({ fullyQualifiedTableName: "db.users" }), ); }); it("includes the full schema path for nested namespaces", () => { // Regression: previously dropped schemaPath and emitted "top.deep.users". const client = renderPreview( ctx({ database: "top", schema: "deep", schemaPath: ["nested", "deep"] }), ); expect(client.previewDatasetColumn).toHaveBeenCalledWith( expect.objectContaining({ fullyQualifiedTableName: "top.nested.deep.users", }), ); }); });