dify/web/features/agent-v2/roster/components/__tests__/roster-toolbar.spec.tsx
盐粒 Yanli 52c106b532
feat(agent-v2): sync nightly updates to main (2026-06-25) (#37915)
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>
2026-06-26 13:13:35 +00:00

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()
})
})