From f7a9279a14250189ba1151bdf5fae0d80cf6b253 Mon Sep 17 00:00:00 2001 From: yyh Date: Thu, 30 Apr 2026 12:49:25 +0800 Subject: [PATCH] fix(web): avoid reload when switching signin locale --- web/app/signin/__tests__/_header.spec.tsx | 57 +++++++++++++++++++++++ web/app/signin/_header.tsx | 2 +- 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 web/app/signin/__tests__/_header.spec.tsx diff --git a/web/app/signin/__tests__/_header.spec.tsx b/web/app/signin/__tests__/_header.spec.tsx new file mode 100644 index 0000000000..06a54e0b36 --- /dev/null +++ b/web/app/signin/__tests__/_header.spec.tsx @@ -0,0 +1,57 @@ +import { useSuspenseQuery } from '@tanstack/react-query' +import { fireEvent, render, screen } from '@testing-library/react' +import { setLocaleOnClient } from '@/i18n-config' +import Header from '../_header' + +vi.mock('@tanstack/react-query', () => ({ + useSuspenseQuery: vi.fn(), +})) + +vi.mock('@/context/i18n', () => ({ + useLocale: () => 'en-US', +})) + +vi.mock('@/i18n-config', () => ({ + setLocaleOnClient: vi.fn(), +})) + +vi.mock('@/next/dynamic', () => ({ + default: () => () => null, +})) + +vi.mock('@/service/system-features', () => ({ + systemFeaturesQueryOptions: () => ({}), +})) + +vi.mock('../_locale-menu', () => ({ + default: ({ onChange }: { onChange?: (value: string) => void }) => ( + + ), +})) + +const mockUseSuspenseQuery = vi.mocked(useSuspenseQuery) +const mockSetLocaleOnClient = vi.mocked(setLocaleOnClient) + +describe('Signin Header', () => { + beforeEach(() => { + vi.clearAllMocks() + mockUseSuspenseQuery.mockReturnValue({ + data: { + branding: { + enabled: false, + login_page_logo: '', + }, + }, + } as ReturnType) + }) + + it('should switch locale without forcing a full page reload', () => { + render(
) + + fireEvent.click(screen.getByRole('button', { name: 'Switch Language' })) + + expect(mockSetLocaleOnClient).toHaveBeenCalledWith('ja-JP', false) + }) +}) diff --git a/web/app/signin/_header.tsx b/web/app/signin/_header.tsx index 5b638b4208..c589513d61 100644 --- a/web/app/signin/_header.tsx +++ b/web/app/signin/_header.tsx @@ -39,7 +39,7 @@ const Header = () => { value={locale} items={languages.filter(item => item.supported)} onChange={(value) => { - setLocaleOnClient(value as Locale) + setLocaleOnClient(value as Locale, false) }} />