feat(ai-character): 관리자 인증 셸 구현
This commit is contained in:
42
src/shared/ui/__tests__/search-toolbar.test.tsx
Normal file
42
src/shared/ui/__tests__/search-toolbar.test.tsx
Normal file
@@ -0,0 +1,42 @@
|
||||
import { act, fireEvent, render, screen } from "@testing-library/react";
|
||||
import { afterEach, expect, test, vi } from "vitest";
|
||||
|
||||
import { SearchToolbar } from "@/shared/ui/search-toolbar";
|
||||
|
||||
afterEach(() => {
|
||||
vi.useRealTimers();
|
||||
});
|
||||
|
||||
test("SearchToolbar keeps search controlled, renders filters, and emits only a debounced generic query", () => {
|
||||
vi.useFakeTimers();
|
||||
const onQueryChange = vi.fn();
|
||||
const onSearchChange = vi.fn();
|
||||
const { rerender } = render(
|
||||
<SearchToolbar
|
||||
filters={<select aria-label="상태 필터"><option>전체</option></select>}
|
||||
onQueryChange={onQueryChange}
|
||||
onSearchChange={onSearchChange}
|
||||
search=""
|
||||
/>,
|
||||
);
|
||||
|
||||
fireEvent.change(screen.getByRole("searchbox", { name: "검색어" }), { target: { value: "루나" } });
|
||||
|
||||
expect(onSearchChange).toHaveBeenCalledWith("루나");
|
||||
expect(screen.getByLabelText("상태 필터")).toBeInTheDocument();
|
||||
expect(onQueryChange).not.toHaveBeenCalled();
|
||||
|
||||
rerender(
|
||||
<SearchToolbar
|
||||
filters={<select aria-label="상태 필터"><option>전체</option></select>}
|
||||
onQueryChange={onQueryChange}
|
||||
onSearchChange={onSearchChange}
|
||||
search="루나"
|
||||
/>,
|
||||
);
|
||||
act(() => vi.advanceTimersByTime(299));
|
||||
expect(onQueryChange).not.toHaveBeenCalled();
|
||||
|
||||
act(() => vi.advanceTimersByTime(1));
|
||||
expect(onQueryChange).toHaveBeenCalledWith("루나");
|
||||
});
|
||||
Reference in New Issue
Block a user