From ebce3c2fe4d56a9c539c929708b71374e401393e Mon Sep 17 00:00:00 2001 From: openhands Date: Sun, 29 Dec 2024 04:56:12 +0000 Subject: [PATCH 01/15] Fix issue #5894: Make it possible to collapse the right-hand side of the openhands screen --- .../components/workspace-toggle.test.tsx | 35 +++++++++++++++++++ .../components/shared/buttons/icon-button.tsx | 6 ++-- frontend/src/routes/_oh.app/route.tsx | 18 ++++++++-- 3 files changed, 53 insertions(+), 6 deletions(-) create mode 100644 frontend/__tests__/components/workspace-toggle.test.tsx diff --git a/frontend/__tests__/components/workspace-toggle.test.tsx b/frontend/__tests__/components/workspace-toggle.test.tsx new file mode 100644 index 000000000000..1dee5a80f4d7 --- /dev/null +++ b/frontend/__tests__/components/workspace-toggle.test.tsx @@ -0,0 +1,35 @@ +import { render, screen, fireEvent } from "@testing-library/react"; +import { describe, it, expect, vi } from "vitest"; +import { ToggleWorkspaceIconButton } from "#/components/shared/buttons/toggle-workspace-icon-button"; + +describe("Workspace Toggle", () => { + it("should render toggle button with correct icon and label", () => { + const onClickMock = vi.fn(); + + // Test initial state (workspace visible) + const { rerender } = render( + + ); + + const button = screen.getByTestId("toggle"); + expect(button).toBeInTheDocument(); + expect(button).toHaveAttribute("aria-label", "Close workspace"); + + // Test hidden state + rerender( + + ); + expect(button).toHaveAttribute("aria-label", "Open workspace"); + }); + + it("should call onClick handler when clicked", () => { + const onClickMock = vi.fn(); + render( + + ); + + const button = screen.getByTestId("toggle"); + fireEvent.click(button); + expect(onClickMock).toHaveBeenCalledTimes(1); + }); +}); diff --git a/frontend/src/components/shared/buttons/icon-button.tsx b/frontend/src/components/shared/buttons/icon-button.tsx index 66c86e2a58e3..90832afed42f 100644 --- a/frontend/src/components/shared/buttons/icon-button.tsx +++ b/frontend/src/components/shared/buttons/icon-button.tsx @@ -1,9 +1,9 @@ import { Button } from "@nextui-org/react"; -import React, { MouseEventHandler, ReactElement } from "react"; +import React, { ReactElement } from "react"; export interface IconButtonProps { icon: ReactElement; - onClick: MouseEventHandler; + onClick: () => void; ariaLabel: string; testId?: string; } @@ -18,7 +18,7 @@ export function IconButton({