mirror of
https://github.com/langgenius/dify.git
synced 2026-08-28 20:33:21 +08:00
Co-authored-by: Joel <iamjoel007@gmail.com> Co-authored-by: yyh <yuanyouhuilyz@gmail.com> Co-authored-by: Yansong Zhang <916125788@qq.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
66 lines
2.0 KiB
TypeScript
66 lines
2.0 KiB
TypeScript
import type { RosterFilterValue } from '../roster-filter'
|
|
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
|
|
import { render, screen, within } from '@testing-library/react'
|
|
import userEvent from '@testing-library/user-event'
|
|
import { RosterToolbar } from '../roster-toolbar'
|
|
|
|
vi.mock('@/next/navigation', () => ({
|
|
useRouter: () => ({
|
|
push: vi.fn(),
|
|
}),
|
|
}))
|
|
|
|
const renderToolbar = ({
|
|
filter = 'all',
|
|
onFilterChange = vi.fn(),
|
|
}: {
|
|
filter?: RosterFilterValue
|
|
onFilterChange?: (value: RosterFilterValue) => void
|
|
} = {}) => {
|
|
const queryClient = new QueryClient()
|
|
|
|
render(
|
|
<QueryClientProvider client={queryClient}>
|
|
<RosterToolbar
|
|
draftAgents={2}
|
|
filter={filter}
|
|
keyword=""
|
|
onFilterChange={onFilterChange}
|
|
onKeywordChange={vi.fn()}
|
|
publishedAgents={1}
|
|
/>
|
|
</QueryClientProvider>,
|
|
)
|
|
|
|
return { onFilterChange }
|
|
}
|
|
|
|
describe('RosterToolbar', () => {
|
|
it('enables roster filters and emits the selected filter', async () => {
|
|
const user = userEvent.setup()
|
|
const { onFilterChange } = renderToolbar()
|
|
|
|
const publishedFilter = screen.getByRole('button', { name: /agentV2\.roster\.filters\.published/ })
|
|
const draftsFilter = screen.getByRole('button', { name: /agentV2\.roster\.filters\.drafts/ })
|
|
|
|
expect(publishedFilter).toBeEnabled()
|
|
expect(draftsFilter).toBeEnabled()
|
|
|
|
await user.click(publishedFilter)
|
|
|
|
expect(onFilterChange).toHaveBeenCalledWith('published')
|
|
})
|
|
|
|
it('renders stable filter count badges and omits the all count', () => {
|
|
renderToolbar()
|
|
|
|
const allFilter = screen.getByRole('button', { name: /agentV2\.roster\.filters\.all/ })
|
|
const publishedFilter = screen.getByRole('button', { name: /agentV2\.roster\.filters\.published/ })
|
|
const draftsFilter = screen.getByRole('button', { name: /agentV2\.roster\.filters\.drafts/ })
|
|
|
|
expect(allFilter).not.toHaveTextContent('3')
|
|
expect(within(publishedFilter).getByText('1')).toBeInTheDocument()
|
|
expect(within(draftsFilter).getByText('2')).toBeInTheDocument()
|
|
})
|
|
})
|