import { describe, it, expect, beforeEach } from "vitest";
import { render, screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import { TabBar } from "./TabBar";
import { useDbViewerStore } from "../../stores/dbViewerStore";
const user = userEvent.setup();
describe("TabBar", () => {
beforeEach(() => {
useDbViewerStore.getState().reset();
});
it("shows empty state when no tabs", () => {
render();
expect(screen.getByText(/No tables open/i)).toBeInTheDocument();
});
it("renders open tab names", () => {
useDbViewerStore.getState().openTab("public", "users");
useDbViewerStore.getState().openTab("public", "posts", true);
render();
expect(screen.getByText("users")).toBeInTheDocument();
expect(screen.getByText("posts")).toBeInTheDocument();
});
it("sets active tab when clicked", async () => {
const store = useDbViewerStore.getState();
store.openTab("public", "users");
store.openTab("public", "posts", true);
const firstTabId = useDbViewerStore.getState().tabs[0].id;
render();
await user.click(screen.getByText("users"));
expect(useDbViewerStore.getState().activeTabId).toBe(firstTabId);
});
it("closes tab when close button clicked", async () => {
useDbViewerStore.getState().openTab("public", "users");
useDbViewerStore.getState().openTab("public", "posts", true);
const firstTabId = useDbViewerStore.getState().tabs[0].id;
render();
const closeButton = screen.getByRole("button", {
name: /close users/i,
});
await user.click(closeButton);
expect(useDbViewerStore.getState().tabs).toHaveLength(1);
expect(
useDbViewerStore.getState().tabs.find((t) => t.id === firstTabId),
).toBeUndefined();
});
});