feat(ai-character): 리소스 관리 기반 정비

This commit is contained in:
Yu Sung
2026-08-01 01:30:24 +09:00
parent 55ba0df77a
commit a1cae336d9
73 changed files with 5162 additions and 816 deletions

View File

@@ -23,6 +23,7 @@ test("FileField exposes label, description, error, accept guidance, keyboard fil
expect(input).toHaveAttribute("accept", "image/png");
expect(input).toHaveAttribute("aria-invalid", "true");
expect(input).toHaveAccessibleDescription("프로필 이미지를 선택하세요. PNG만 업로드할 수 있습니다. 파일이 너무 큽니다.");
expect(screen.getByRole("button", { name: "대표 이미지 파일 선택" })).toBeInTheDocument();
expect(screen.getByText("profile.png")).toBeInTheDocument();
expect(screen.getByRole("button", { name: "선택 취소" })).toBeInTheDocument();
});
@@ -39,3 +40,16 @@ test("FileField emits File or null and clear selection without owning upload pol
fireEvent.click(screen.getByRole("button", { name: "선택 취소" }));
expect(onChange).toHaveBeenCalledWith(null);
});
test("FileField gives same visible file buttons field-specific accessible names", () => {
render(
<>
<FileField accept="audio/mpeg" acceptDescription="MP3" label="오디오 파일" onChange={vi.fn()} value={null} />
<FileField accept="image/png" acceptDescription="PNG" label="커버 이미지" onChange={vi.fn()} value={null} />
</>,
);
expect(screen.getAllByText("파일 선택")).toHaveLength(2);
expect(screen.getByRole("button", { name: "오디오 파일 파일 선택" })).toBeInTheDocument();
expect(screen.getByRole("button", { name: "커버 이미지 파일 선택" })).toBeInTheDocument();
});