refactor(ui): 统一迁移原生按钮、输入框及交互控件

This commit is contained in:
Wxw-Gu
2026-08-20 10:18:59 +08:00
parent e9cc996ebb
commit 65830d70fe
87 changed files with 3685 additions and 2768 deletions
@@ -2,19 +2,29 @@ import { render, screen } from '@testing-library/react'
import userEvent from '@testing-library/user-event'
import { describe, expect, it, vi } from 'vitest'
import { ConversationSidebarHeader } from '../../src/renderer/src/components/conversation/ConversationSidebarHeader'
import { TooltipProvider } from '../../src/renderer/src/components/ui'
describe('ConversationSidebarHeader', () => {
it('refreshes the conversation list from the archive header', async () => {
const onRefresh = vi.fn()
render(
function renderHeader(
overrides: Partial<React.ComponentProps<typeof ConversationSidebarHeader>> = {}
): void {
render(
<TooltipProvider>
<ConversationSidebarHeader
totalCount={1306}
searchValue=""
onSearchChange={vi.fn()}
refreshing={false}
onRefresh={onRefresh}
onRefresh={vi.fn()}
{...overrides}
/>
)
</TooltipProvider>
)
}
describe('ConversationSidebarHeader', () => {
it('refreshes the conversation list from the archive header', async () => {
const onRefresh = vi.fn()
renderHeader({ onRefresh })
expect(screen.getByText('1306 个会话')).toBeInTheDocument()
await userEvent.click(screen.getByRole('button', { name: '刷新会话列表' }))
@@ -22,17 +32,20 @@ describe('ConversationSidebarHeader', () => {
})
it('disables the refresh button while contacts are loading', () => {
render(
<ConversationSidebarHeader
totalCount={12}
searchValue="测试"
onSearchChange={vi.fn()}
refreshing
onRefresh={vi.fn()}
/>
)
renderHeader({ totalCount: 12, searchValue: '测试', refreshing: true })
expect(screen.getByRole('button', { name: '正在刷新会话列表' })).toBeDisabled()
expect(screen.getByDisplayValue('测试')).toBeInTheDocument()
})
it('keeps the controlled conversation search callback and search semantics', async () => {
const onSearchChange = vi.fn()
renderHeader({ onSearchChange })
const search = screen.getByRole('searchbox', { name: '搜索会话' })
await userEvent.type(search, '产品')
expect(onSearchChange).toHaveBeenCalled()
expect(onSearchChange.mock.calls[0]).toEqual(['产'])
})
})