Skip to content

Commit 3ecf19c

Browse files
committed
[#97] 🚚 remove closeOnSelect props from header user menu component
1 parent 63a240e commit 3ecf19c

File tree

2 files changed

+131
-5
lines changed

2 files changed

+131
-5
lines changed
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
import React from 'react'
2+
3+
import '@testing-library/jest-dom'
4+
import { fireEvent, render, screen } from '@testing-library/react'
5+
6+
import { Dropdown } from './Dropdown'
7+
8+
describe('Dropdown Component', () => {
9+
it('renders children correctly', () => {
10+
render(
11+
<Dropdown>
12+
<Dropdown.Trigger>Open Menu</Dropdown.Trigger>
13+
<Dropdown.Menu>
14+
<Dropdown.Item>Item 1</Dropdown.Item>
15+
<Dropdown.Item>Item 2</Dropdown.Item>
16+
</Dropdown.Menu>
17+
</Dropdown>
18+
)
19+
20+
// Trigger 버튼이 렌더링되었는지 확인
21+
expect(screen.getByText('Open Menu')).toBeInTheDocument()
22+
23+
// Menu의 아이템이 초기에는 보이지 않아야 함
24+
expect(screen.queryByText('Item 1')).not.toBeInTheDocument()
25+
expect(screen.queryByText('Item 2')).not.toBeInTheDocument()
26+
})
27+
28+
it('opens the menu when the trigger is clicked', () => {
29+
render(
30+
<Dropdown>
31+
<Dropdown.Trigger>Open Menu</Dropdown.Trigger>
32+
<Dropdown.Menu>
33+
<Dropdown.Item>Item 1</Dropdown.Item>
34+
<Dropdown.Item>Item 2</Dropdown.Item>
35+
</Dropdown.Menu>
36+
</Dropdown>
37+
)
38+
39+
const trigger = screen.getByText('Open Menu')
40+
41+
// Trigger 버튼 클릭
42+
fireEvent.click(trigger)
43+
44+
// Menu의 아이템이 보여야 함
45+
expect(screen.getByText('Item 1')).toBeInTheDocument()
46+
expect(screen.getByText('Item 2')).toBeInTheDocument()
47+
})
48+
49+
it('closes the menu when an item is clicked', () => {
50+
render(
51+
<Dropdown>
52+
<Dropdown.Trigger>Open Menu</Dropdown.Trigger>
53+
<Dropdown.Menu>
54+
<Dropdown.Item>Item 1</Dropdown.Item>
55+
<Dropdown.Item>Item 2</Dropdown.Item>
56+
</Dropdown.Menu>
57+
</Dropdown>
58+
)
59+
60+
const trigger = screen.getByText('Open Menu')
61+
62+
// Trigger 버튼 클릭
63+
fireEvent.click(trigger)
64+
65+
// Menu의 아이템이 보여야 함
66+
const item = screen.getByText('Item 1')
67+
fireEvent.click(item)
68+
69+
// Menu가 닫혀야 함
70+
expect(screen.queryByText('Item 1')).not.toBeInTheDocument()
71+
expect(screen.queryByText('Item 2')).not.toBeInTheDocument()
72+
})
73+
74+
it('does not close the menu when closeOnSelect is false', () => {
75+
render(
76+
<Dropdown>
77+
<Dropdown.Trigger>Open Menu</Dropdown.Trigger>
78+
<Dropdown.Menu>
79+
<Dropdown.Item closeOnSelect={false}>Item 1</Dropdown.Item>
80+
<Dropdown.Item>Item 2</Dropdown.Item>
81+
</Dropdown.Menu>
82+
</Dropdown>
83+
)
84+
85+
const trigger = screen.getByText('Open Menu')
86+
87+
// Trigger 버튼 클릭
88+
fireEvent.click(trigger)
89+
90+
// Menu의 아이템이 보여야 함
91+
const item = screen.getByText('Item 1')
92+
fireEvent.click(item)
93+
94+
// Menu가 닫히지 않아야 함
95+
expect(screen.getByText('Item 1')).toBeInTheDocument()
96+
expect(screen.getByText('Item 2')).toBeInTheDocument()
97+
})
98+
99+
it('closes the menu when clicking outside the dropdown', () => {
100+
render(
101+
<>
102+
<Dropdown>
103+
<Dropdown.Trigger>Open Menu</Dropdown.Trigger>
104+
<Dropdown.Menu>
105+
<Dropdown.Item>Item 1</Dropdown.Item>
106+
<Dropdown.Item>Item 2</Dropdown.Item>
107+
</Dropdown.Menu>
108+
</Dropdown>
109+
<button>Outside Button</button>
110+
</>
111+
)
112+
113+
const trigger = screen.getByText('Open Menu')
114+
const outsideButton = screen.getByText('Outside Button')
115+
116+
// Trigger 버튼 클릭
117+
fireEvent.click(trigger)
118+
119+
// Menu의 아이템이 보여야 함
120+
expect(screen.getByText('Item 1')).toBeInTheDocument()
121+
expect(screen.getByText('Item 2')).toBeInTheDocument()
122+
123+
// Dropdown 외부 클릭
124+
fireEvent.click(outsideButton)
125+
126+
// Menu가 닫혀야 함
127+
expect(screen.queryByText('Item 1')).not.toBeInTheDocument()
128+
expect(screen.queryByText('Item 2')).not.toBeInTheDocument()
129+
})
130+
})

src/components/shared/header/HeaderUserMenu.tsx

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,7 @@ export const HeaderUserMenu = ({
6767
</Dropdown.Item>
6868
</NextLink>
6969
))}
70-
<Dropdown.Item
71-
className={itemClass}
72-
onClick={handleLogout}
73-
closeOnSelect={false}
74-
>
70+
<Dropdown.Item className={itemClass} onClick={handleLogout}>
7571
<Highlight className='flex items-center gap-8 text-gray-500'>
7672
<IcLogout />
7773
{'로그아웃'}

0 commit comments

Comments
 (0)