feat(ai-character): 관리자 인증 셸 구현

This commit is contained in:
Yu Sung
2026-07-27 15:04:03 +09:00
parent ba43dd829e
commit 5356bd1e6a
82 changed files with 6017 additions and 18 deletions

View 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("루나");
});