/** * @vitest-environment happy-dom */ import { describe, it, expect, beforeEach, vi } from "vitest"; import { render } from "@testing-library/react"; import React from "react"; import { BranchActionSelectorScreen } from "../BranchActionSelectorScreen.js"; import { Window } from "happy-dom"; describe("BranchActionSelectorScreen", () => { beforeEach(() => { // Setup happy-dom const window = new Window(); globalThis.window = window as any; globalThis.document = window.document as any; }); it("should render the screen", () => { const onUseExisting = vi.fn(); const onCreateNew = vi.fn(); const onBack = vi.fn(); const { container } = render( , ); expect(container).toBeDefined(); }); it("should display the message with selected branch name", () => { const onUseExisting = vi.fn(); const onCreateNew = vi.fn(); const onBack = vi.fn(); const { getByText } = render( , ); // Should show message about selecting action for the branch const messageElement = getByText(/feature-test/); expect(messageElement).toBeDefined(); }); it("should display two action options", () => { const onUseExisting = vi.fn(); const onCreateNew = vi.fn(); const onBack = vi.fn(); const { getByText } = render( , ); // Should show "Use existing branch" option expect(getByText(/Use existing branch/)).toBeDefined(); // Should show "Create new branch" option expect(getByText(/Create new branch/)).toBeDefined(); }); it("should render protected mode labels and info message", () => { const onUseExisting = vi.fn(); const onCreateNew = vi.fn(); const onBack = vi.fn(); const { getByText } = render( , ); expect(getByText(/Use root branch/)).toBeDefined(); expect(getByText(/Create new branch from root/)).toBeDefined(); expect( getByText(/Root branches are handled in the repository root./), ).toBeDefined(); }); it("should hide create option when canCreateNew is false", () => { const onUseExisting = vi.fn(); const onCreateNew = vi.fn(); const onBack = vi.fn(); const { getByText, queryByText } = render( , ); expect(getByText(/Use existing branch/)).toBeDefined(); expect(queryByText(/Create new branch/)).toBeNull(); }); it("should call onUseExisting when existing branch option is selected", () => { const onUseExisting = vi.fn(); const onCreateNew = vi.fn(); const onBack = vi.fn(); render( , ); // Note: Simulating selection requires ink-testing-library // For now, we verify the component structure and callbacks are set up expect(onUseExisting).not.toHaveBeenCalled(); }); it("should call onCreateNew when create new branch option is selected", () => { const onUseExisting = vi.fn(); const onCreateNew = vi.fn(); const onBack = vi.fn(); render( , ); // Note: Simulating selection requires ink-testing-library // For now, we verify the component structure and callbacks are set up expect(onCreateNew).not.toHaveBeenCalled(); }); });