From 2664d5f8bff9738d395344c9aa7e7c80d2f7797c Mon Sep 17 00:00:00 2001 From: hoxey2react Date: Mon, 11 Aug 2025 21:09:36 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20library=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=EC=97=90=20=EB=8C=80=ED=95=9C=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=9C=A0=EB=8B=9B=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../library/_components/GenreBadge.test.tsx | 35 +++++ src/app/library/_components/GenreBadge.tsx | 1 + .../_components/LibraryListContainer.test.tsx | 138 ++++++++++++++++++ .../library/_components/SearchInput.test.tsx | 85 +++++++++++ 4 files changed, 259 insertions(+) create mode 100644 src/app/library/_components/GenreBadge.test.tsx create mode 100644 src/app/library/_components/LibraryListContainer.test.tsx create mode 100644 src/app/library/_components/SearchInput.test.tsx diff --git a/src/app/library/_components/GenreBadge.test.tsx b/src/app/library/_components/GenreBadge.test.tsx new file mode 100644 index 00000000..92e5b0f6 --- /dev/null +++ b/src/app/library/_components/GenreBadge.test.tsx @@ -0,0 +1,35 @@ +import { render, screen } from '@testing-library/react'; +import GenreBadge from '@/app/library/_components/GenreBadge'; + +describe('GenreBadge 테스트', () => { + const mockDispatch = jest.fn(); + + const setup = (selectedGenres: string[] = []) => { + mockDispatch.mockClear(); + render( + + ); + }; + it('모든 장르 버튼이 렌더링됨', () => { + setup(); + ['전체', '판타지', '로맨스', '스릴러/미스터리', '무협'].forEach((genre) => { + expect(screen.getByRole('button', { name: genre })).toBeInTheDocument(); + }); + }); + + it('"판타지" 배지를 클릭하면 ["판타지"]로 dispatch', () => { + setup(); + const fantasyBadge = screen.getByRole('button', { name: '판타지' }); + fantasyBadge.click(); + expect(mockDispatch).toHaveBeenCalledWith(['판타지']); + }); + + it('선택된 장르는 active 스타일이 적용됨', () => { + setup(['판타지']); + const fantasyBadge = screen.getByRole('button', { name: '판타지' }); + expect(fantasyBadge).toHaveClass('bg-black', 'text-white'); + }); +}); diff --git a/src/app/library/_components/GenreBadge.tsx b/src/app/library/_components/GenreBadge.tsx index b9e8956f..ef6f95ac 100644 --- a/src/app/library/_components/GenreBadge.tsx +++ b/src/app/library/_components/GenreBadge.tsx @@ -30,6 +30,7 @@ const GenreBadge = ({