import { cleanup, render, screen } from "@solidjs/testing-library";
import { afterEach, describe, expect, it, vi } from "vitest";
import { EditorToolbar } from "../EditorToolbar";
describe("EditorToolbar", () => {
afterEach(() => {
cleanup();
vi.clearAllMocks();
});
const mockHandlers = {
onBold: vi.fn(),
onItalic: vi.fn(),
onHeading: vi.fn(),
onLink: vi.fn(),
onCode: vi.fn(),
onCodeBlock: vi.fn(),
onWikilink: vi.fn(),
onList: vi.fn(),
};
it("renders all toolbar buttons", () => {
render(() => );
expect(screen.getByTitle(/Bold/)).toBeInTheDocument();
expect(screen.getByTitle(/Italic/)).toBeInTheDocument();
expect(screen.getByTitle(/Heading 1/)).toBeInTheDocument();
expect(screen.getByTitle(/Heading 2/)).toBeInTheDocument();
expect(screen.getByTitle(/Heading 3/)).toBeInTheDocument();
expect(screen.getByTitle(/Link/)).toBeInTheDocument();
expect(screen.getByTitle(/Inline Code/)).toBeInTheDocument();
expect(screen.getByTitle(/Code Block/)).toBeInTheDocument();
expect(screen.getByTitle(/Wikilink/)).toBeInTheDocument();
expect(screen.getByTitle(/Bullet List/)).toBeInTheDocument();
});
it("calls onBold when bold button clicked", async () => {
render(() => );
const boldBtn = screen.getByTitle(/Bold/);
boldBtn.click();
expect(mockHandlers.onBold).toHaveBeenCalledTimes(1);
});
it("calls onItalic when italic button clicked", async () => {
render(() => );
const italicBtn = screen.getByTitle(/Italic/);
italicBtn.click();
expect(mockHandlers.onItalic).toHaveBeenCalledTimes(1);
});
it("calls onHeading with level when heading button clicked", async () => {
render(() => );
screen.getByTitle(/Heading 1/).click();
expect(mockHandlers.onHeading).toHaveBeenCalledWith(1);
screen.getByTitle(/Heading 2/).click();
expect(mockHandlers.onHeading).toHaveBeenCalledWith(2);
screen.getByTitle(/Heading 3/).click();
expect(mockHandlers.onHeading).toHaveBeenCalledWith(3);
});
it("calls onLink when link button clicked", async () => {
render(() => );
screen.getByTitle(/Link/).click();
expect(mockHandlers.onLink).toHaveBeenCalledTimes(1);
});
it("calls onWikilink when wikilink button clicked", async () => {
render(() => );
screen.getByTitle(/Wikilink/).click();
expect(mockHandlers.onWikilink).toHaveBeenCalledTimes(1);
});
});