Skip to content

Commit 8de5c17

Browse files
committed
fix: test
1 parent cfbc6b9 commit 8de5c17

File tree

3 files changed

+71
-150
lines changed

3 files changed

+71
-150
lines changed

web-app/src/containers/__tests__/SettingsMenu.test.tsx

Lines changed: 54 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import SettingsMenu from '../SettingsMenu'
55
import { useNavigate, useMatches } from '@tanstack/react-router'
66
import { useGeneralSetting } from '@/hooks/useGeneralSetting'
77
import { useModelProvider } from '@/hooks/useModelProvider'
8-
import { useAppState } from '@/hooks/useAppState'
98

109
// Mock dependencies
1110
vi.mock('@tanstack/react-router', () => ({
@@ -25,9 +24,7 @@ vi.mock('@/i18n/react-i18next-compat', () => ({
2524
}))
2625

2726
vi.mock('@/hooks/useGeneralSetting', () => ({
28-
useGeneralSetting: vi.fn(() => ({
29-
experimentalFeatures: false,
30-
})),
27+
useGeneralSetting: vi.fn(() => ({})),
3128
}))
3229

3330
vi.mock('@/hooks/useModelProvider', () => ({
@@ -71,14 +68,14 @@ describe('SettingsMenu', () => {
7168

7269
beforeEach(() => {
7370
vi.clearAllMocks()
74-
71+
7572
vi.mocked(useNavigate).mockReturnValue(mockNavigate)
7673
vi.mocked(useMatches).mockReturnValue(mockMatches)
7774
})
7875

7976
it('renders all menu items', () => {
8077
render(<SettingsMenu />)
81-
78+
8279
expect(screen.getByText('common:general')).toBeInTheDocument()
8380
expect(screen.getByText('common:appearance')).toBeInTheDocument()
8481
expect(screen.getByText('common:privacy')).toBeInTheDocument()
@@ -88,29 +85,14 @@ describe('SettingsMenu', () => {
8885
expect(screen.getByText('common:local_api_server')).toBeInTheDocument()
8986
expect(screen.getByText('common:https_proxy')).toBeInTheDocument()
9087
expect(screen.getByText('common:extensions')).toBeInTheDocument()
91-
})
92-
93-
it('does not show MCP Servers when experimental features disabled', () => {
94-
render(<SettingsMenu />)
95-
96-
expect(screen.queryByText('common:mcp-servers')).not.toBeInTheDocument()
97-
})
98-
99-
it('shows MCP Servers when experimental features enabled', () => {
100-
vi.mocked(useGeneralSetting).mockReturnValue({
101-
experimentalFeatures: true,
102-
})
103-
104-
render(<SettingsMenu />)
105-
10688
expect(screen.getByText('common:mcp-servers')).toBeInTheDocument()
10789
})
10890

10991
it('shows provider expansion chevron when providers are active', () => {
11092
render(<SettingsMenu />)
111-
93+
11294
const chevronButtons = screen.getAllByRole('button')
113-
const chevron = chevronButtons.find(button =>
95+
const chevron = chevronButtons.find((button) =>
11496
button.querySelector('svg.tabler-icon-chevron-right')
11597
)
11698
expect(chevron).toBeInTheDocument()
@@ -119,14 +101,14 @@ describe('SettingsMenu', () => {
119101
it('expands providers submenu when chevron is clicked', async () => {
120102
const user = userEvent.setup()
121103
render(<SettingsMenu />)
122-
104+
123105
const chevronButtons = screen.getAllByRole('button')
124-
const chevron = chevronButtons.find(button =>
106+
const chevron = chevronButtons.find((button) =>
125107
button.querySelector('svg.tabler-icon-chevron-right')
126108
)
127109
if (!chevron) throw new Error('Chevron button not found')
128110
await user.click(chevron)
129-
111+
130112
expect(screen.getByTestId('provider-avatar-openai')).toBeInTheDocument()
131113
expect(screen.getByTestId('provider-avatar-llama.cpp')).toBeInTheDocument()
132114
})
@@ -138,52 +120,56 @@ describe('SettingsMenu', () => {
138120
params: { providerName: 'openai' },
139121
},
140122
])
141-
123+
142124
render(<SettingsMenu />)
143-
125+
144126
expect(screen.getByTestId('provider-avatar-openai')).toBeInTheDocument()
145127
expect(screen.getByTestId('provider-avatar-llama.cpp')).toBeInTheDocument()
146128
})
147129

148130
it('highlights active provider in submenu', async () => {
149131
const user = userEvent.setup()
150-
132+
151133
vi.mocked(useMatches).mockReturnValue([
152134
{
153135
routeId: '/settings/providers/$providerName',
154136
params: { providerName: 'openai' },
155137
},
156138
])
157-
139+
158140
render(<SettingsMenu />)
159-
141+
160142
// First expand the providers submenu
161143
const chevronButtons = screen.getAllByRole('button')
162-
const chevron = chevronButtons.find(button =>
144+
const chevron = chevronButtons.find((button) =>
163145
button.querySelector('svg.tabler-icon-chevron-right')
164146
)
165147
if (chevron) await user.click(chevron)
166-
167-
const openaiProvider = screen.getByTestId('provider-avatar-openai').closest('div')
148+
149+
const openaiProvider = screen
150+
.getByTestId('provider-avatar-openai')
151+
.closest('div')
168152
expect(openaiProvider).toBeInTheDocument()
169153
})
170154

171155
it('navigates to provider when provider is clicked', async () => {
172156
const user = userEvent.setup()
173157
render(<SettingsMenu />)
174-
158+
175159
// First expand the providers
176160
const chevronButtons = screen.getAllByRole('button')
177-
const chevron = chevronButtons.find(button =>
161+
const chevron = chevronButtons.find((button) =>
178162
button.querySelector('svg.tabler-icon-chevron-right')
179163
)
180164
if (!chevron) throw new Error('Chevron button not found')
181165
await user.click(chevron)
182-
166+
183167
// Then click on a provider
184-
const openaiProvider = screen.getByTestId('provider-avatar-openai').closest('div')
168+
const openaiProvider = screen
169+
.getByTestId('provider-avatar-openai')
170+
.closest('div')
185171
await user.click(openaiProvider!)
186-
172+
187173
expect(mockNavigate).toHaveBeenCalledWith({
188174
to: '/settings/providers/$providerName',
189175
params: { providerName: 'openai' },
@@ -192,18 +178,22 @@ describe('SettingsMenu', () => {
192178

193179
it('shows mobile menu toggle button', () => {
194180
render(<SettingsMenu />)
195-
196-
const menuToggle = screen.getByRole('button', { name: 'Toggle settings menu' })
181+
182+
const menuToggle = screen.getByRole('button', {
183+
name: 'Toggle settings menu',
184+
})
197185
expect(menuToggle).toBeInTheDocument()
198186
})
199187

200188
it('opens mobile menu when toggle is clicked', async () => {
201189
const user = userEvent.setup()
202190
render(<SettingsMenu />)
203-
204-
const menuToggle = screen.getByRole('button', { name: 'Toggle settings menu' })
191+
192+
const menuToggle = screen.getByRole('button', {
193+
name: 'Toggle settings menu',
194+
})
205195
await user.click(menuToggle)
206-
196+
207197
// Menu should now be visible
208198
const menu = screen.getByText('common:general').closest('div')
209199
expect(menu).toHaveClass('flex')
@@ -212,38 +202,40 @@ describe('SettingsMenu', () => {
212202
it('closes mobile menu when X is clicked', async () => {
213203
const user = userEvent.setup()
214204
render(<SettingsMenu />)
215-
205+
216206
// Open menu first
217-
const menuToggle = screen.getByRole('button', { name: 'Toggle settings menu' })
207+
const menuToggle = screen.getByRole('button', {
208+
name: 'Toggle settings menu',
209+
})
218210
await user.click(menuToggle)
219-
211+
220212
// Then close it
221213
await user.click(menuToggle)
222-
214+
223215
// Just verify the toggle button is still there after clicking twice
224216
expect(menuToggle).toBeInTheDocument()
225217
})
226218

227219
it('hides llamacpp provider during setup remote provider step', async () => {
228220
const user = userEvent.setup()
229-
221+
230222
vi.mocked(useMatches).mockReturnValue([
231223
{
232224
routeId: '/settings/providers/',
233225
params: {},
234226
search: { step: 'setup_remote_provider' },
235227
},
236228
])
237-
229+
238230
render(<SettingsMenu />)
239-
231+
240232
// First expand the providers submenu
241233
const chevronButtons = screen.getAllByRole('button')
242-
const chevron = chevronButtons.find(button =>
234+
const chevron = chevronButtons.find((button) =>
243235
button.querySelector('svg.tabler-icon-chevron-right')
244236
)
245237
if (chevron) await user.click(chevron)
246-
238+
247239
// llamacpp provider div should have hidden class
248240
const llamacppElement = screen.getByTestId('provider-avatar-llama.cpp')
249241
expect(llamacppElement.parentElement).toHaveClass('hidden')
@@ -253,7 +245,7 @@ describe('SettingsMenu', () => {
253245

254246
it('filters out inactive providers from submenu', async () => {
255247
const user = userEvent.setup()
256-
248+
257249
vi.mocked(useModelProvider).mockReturnValue({
258250
providers: [
259251
{
@@ -268,17 +260,19 @@ describe('SettingsMenu', () => {
268260
},
269261
],
270262
})
271-
263+
272264
render(<SettingsMenu />)
273-
265+
274266
// Expand providers
275267
const chevronButtons = screen.getAllByRole('button')
276-
const chevron = chevronButtons.find(button =>
268+
const chevron = chevronButtons.find((button) =>
277269
button.querySelector('svg.tabler-icon-chevron-right')
278270
)
279271
if (chevron) await user.click(chevron)
280-
272+
281273
expect(screen.getByTestId('provider-avatar-openai')).toBeInTheDocument()
282-
expect(screen.queryByTestId('provider-avatar-anthropic')).not.toBeInTheDocument()
274+
expect(
275+
screen.queryByTestId('provider-avatar-anthropic')
276+
).not.toBeInTheDocument()
283277
})
284-
})
278+
})

0 commit comments

Comments
 (0)