import { render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { afterEach, describe, expect, it, vi } from "vitest"; import { UserAvatar } from "#/components/features/sidebar/user-avatar"; describe("UserAvatar", () => { const onClickMock = vi.fn(); afterEach(() => { onClickMock.mockClear(); }); it("(default) should render the placeholder avatar when the user is logged out", () => { render(); expect(screen.getByTestId("user-avatar")).toBeInTheDocument(); expect( screen.getByLabelText("USER$AVATAR_PLACEHOLDER"), ).toBeInTheDocument(); }); it("should call onClick when clicked", async () => { const user = userEvent.setup(); render(); const userAvatarContainer = screen.getByTestId("user-avatar"); await user.click(userAvatarContainer); expect(onClickMock).toHaveBeenCalledOnce(); }); it("should display the user's avatar when available", () => { render( , ); expect(screen.getByAltText("user avatar")).toBeInTheDocument(); expect( screen.queryByLabelText("USER$AVATAR_PLACEHOLDER"), ).not.toBeInTheDocument(); }); it("should display a loading spinner instead of an avatar when isLoading is true", () => { const { rerender } = render(); expect(screen.queryByTestId("loading-spinner")).not.toBeInTheDocument(); expect( screen.getByLabelText("USER$AVATAR_PLACEHOLDER"), ).toBeInTheDocument(); rerender(); expect(screen.getByTestId("loading-spinner")).toBeInTheDocument(); expect( screen.queryByLabelText("USER$AVATAR_PLACEHOLDER"), ).not.toBeInTheDocument(); rerender( , ); expect(screen.getByTestId("loading-spinner")).toBeInTheDocument(); expect(screen.queryByAltText("user avatar")).not.toBeInTheDocument(); }); });