import { render, screen } from '@testing-library/react'
import userEvent from '@testing-library/user-event'
import { AppModeEnum } from '@/types/app'
import Doc from '../doc'
vi.mock('../template/template.en.mdx', () => ({ default: () =>
completion-en
}))
vi.mock('../template/template.zh.mdx', () => ({ default: () => completion-zh
}))
vi.mock('../template/template.ja.mdx', () => ({ default: () => completion-ja
}))
vi.mock('../template/template_chat.en.mdx', () => ({ default: () => chat-en
}))
vi.mock('../template/template_chat.zh.mdx', () => ({ default: () => chat-zh
}))
vi.mock('../template/template_chat.ja.mdx', () => ({ default: () => chat-ja
}))
vi.mock('../template/template_advanced_chat.en.mdx', () => ({
default: () => advanced-chat-en
,
}))
vi.mock('../template/template_advanced_chat.zh.mdx', () => ({
default: () => advanced-chat-zh
,
}))
vi.mock('../template/template_advanced_chat.ja.mdx', () => ({
default: () => advanced-chat-ja
,
}))
vi.mock('../template/template_workflow.en.mdx', () => ({ default: () => workflow-en
}))
vi.mock('../template/template_workflow.zh.mdx', () => ({ default: () => workflow-zh
}))
vi.mock('../template/template_workflow.ja.mdx', () => ({ default: () => workflow-ja
}))
const mockLocale = vi.fn(() => 'en-US')
vi.mock('@/context/i18n', () => ({
useLocale: () => mockLocale(),
}))
vi.mock('@/i18n-config/language', () => ({
LanguagesSupported: ['en-US', 'zh-Hans', 'ja-JP'],
getDocLanguage: (locale: string) =>
locale === 'zh-Hans' ? 'zh' : locale === 'ja-JP' ? 'ja' : 'en',
}))
const makeAppDetail = (mode: AppModeEnum) =>
({
mode,
model_config: { configs: { prompt_variables: [] } },
}) as unknown as Parameters[0]['appDetail']
describe('Doc', () => {
beforeEach(() => {
mockLocale.mockReturnValue('en-US')
Object.defineProperty(window, 'matchMedia', {
writable: true,
value: vi.fn().mockReturnValue({ matches: false }),
})
})
it.each([
[AppModeEnum.CHAT, 'chat-en'],
[AppModeEnum.AGENT_CHAT, 'chat-en'],
[AppModeEnum.ADVANCED_CHAT, 'advanced-chat-en'],
[AppModeEnum.WORKFLOW, 'workflow-en'],
[AppModeEnum.COMPLETION, 'completion-en'],
])('selects the documentation for %s apps', (mode, template) => {
render()
expect(screen.getByText(template)).toBeInTheDocument()
})
it.each([
['zh-Hans', 'chat-zh'],
['ja-JP', 'chat-ja'],
])('selects the %s documentation', (locale, template) => {
mockLocale.mockReturnValue(locale)
render()
expect(screen.getByText(template)).toBeInTheDocument()
})
it('expands the table of contents', async () => {
const user = userEvent.setup()
render()
await user.click(screen.getByRole('button', { name: 'Open table of contents' }))
expect(screen.getByRole('navigation')).toBeInTheDocument()
})
})