mirror of
https://github.com/langgenius/dify.git
synced 2026-11-13 06:41:07 +08:00
74 lines
2.4 KiB
TypeScript
74 lines
2.4 KiB
TypeScript
import { act, screen, waitFor } from '@testing-library/react'
|
|
import userEvent from '@testing-library/user-event'
|
|
import { setLocaleOnClient } from '@/i18n/client'
|
|
import { renderWithConsoleQuery as render } from '@/test/console/query-data'
|
|
import { createDeferred } from '@/test/deferred'
|
|
import Header from '../header'
|
|
|
|
vi.mock('@/i18n/client', () => ({
|
|
setLocaleOnClient: vi.fn(),
|
|
}))
|
|
|
|
vi.mock('next/dynamic', () => ({
|
|
default: () => () => null,
|
|
}))
|
|
|
|
const mockSetLocaleOnClient = vi.mocked(setLocaleOnClient)
|
|
const navigation = vi.hoisted(() => ({ refresh: vi.fn() }))
|
|
vi.mock('@/next/navigation', () => ({ useRouter: () => navigation }))
|
|
|
|
describe('Signin Header', () => {
|
|
it('uses the application title as the custom logo accessible name', () => {
|
|
render(<Header />, {
|
|
systemFeatures: {
|
|
branding: {
|
|
application_title: 'Acme AI',
|
|
enabled: true,
|
|
login_page_logo: 'https://example.com/acme-logo.svg',
|
|
},
|
|
},
|
|
})
|
|
|
|
expect(screen.getByRole('img', { name: 'Acme AI' })).toHaveAttribute(
|
|
'src',
|
|
'https://example.com/acme-logo.svg',
|
|
)
|
|
})
|
|
|
|
it('treats a custom logo as decorative when the application title is empty', () => {
|
|
const { container } = render(<Header />, {
|
|
systemFeatures: {
|
|
branding: {
|
|
application_title: '',
|
|
enabled: true,
|
|
login_page_logo: 'https://example.com/custom-logo.svg',
|
|
},
|
|
},
|
|
})
|
|
|
|
expect(container.querySelector('img')).toHaveAttribute('alt', '')
|
|
expect(screen.queryByRole('img')).not.toBeInTheDocument()
|
|
})
|
|
|
|
it('keeps the default Dify logo accessible name', () => {
|
|
render(<Header />)
|
|
|
|
expect(screen.getByRole('img', { name: 'Dify' })).toBeInTheDocument()
|
|
})
|
|
|
|
it('refreshes server content only after the selected language is ready', async () => {
|
|
const user = userEvent.setup()
|
|
const languageChange = createDeferred()
|
|
mockSetLocaleOnClient.mockReturnValueOnce(languageChange.promise)
|
|
render(<Header />)
|
|
|
|
await user.click(screen.getByRole('button', { name: /English/i }))
|
|
await user.click(screen.getByRole('menuitemradio', { name: '日本語 (日本)' }))
|
|
|
|
expect(mockSetLocaleOnClient).toHaveBeenCalledWith('ja-JP')
|
|
expect(navigation.refresh).not.toHaveBeenCalled()
|
|
await act(async () => languageChange.resolve())
|
|
await waitFor(() => expect(navigation.refresh).toHaveBeenCalledOnce())
|
|
})
|
|
})
|