import { render, screen } from '@testing-library/react' import userEvent from '@testing-library/user-event' import { describe, expect, it, vi } from 'vitest' import { DatabaseKeyAutoDetect } from '../../src/renderer/src/features/settings/database-key/DatabaseKeyAutoDetect' import { DatabaseKeyDiagnostics } from '../../src/renderer/src/features/settings/database-key/DatabaseKeyDiagnostics' import { DatabaseKeyDangerZone } from '../../src/renderer/src/features/settings/database-key/DatabaseKeyDangerZone' import { DatabaseKeyEditor } from '../../src/renderer/src/features/settings/database-key/DatabaseKeyEditor' import { DatabaseKeyStatus } from '../../src/renderer/src/features/settings/database-key/DatabaseKeyStatus' import type { DatabaseKeyState } from '../../src/renderer/src/features/settings/database-key/types' import { TooltipProvider } from '../../src/renderer/src/components/ui' const state: DatabaseKeyState = { status: 'saved', saved: true, encryptionAvailable: true, autoPhase: 0, environment: { platform: 'win32', osVersion: 'Windows 11', appVersion: '2.2.2', wechatVersion: '4.1.0', dataStructureVersion: 'WCDB', dataDirectoryDetected: true, diagnosticSummary: 'fixture', autoDetectSupported: true, wechatRunning: true, accountIdentified: true, dbConnected: true, encryptionAvailable: true } } describe('database key controls', () => { it('keeps auto-detect and refresh callbacks separate', async () => { const user = userEvent.setup() const onDetect = vi.fn() const onRefresh = vi.fn() render( ) await user.click(screen.getByRole('button', { name: '自动获取密钥' })) await user.click(screen.getByRole('button', { name: '刷新前置状态' })) expect(onDetect).toHaveBeenCalledOnce() expect(onRefresh).toHaveBeenCalledOnce() }) it('keeps status validation and diagnostics copy actions available', async () => { const user = userEvent.setup() const onValidate = vi.fn() const onCopy = vi.fn() const { rerender } = render( ) await user.click(screen.getByRole('button', { name: '重新验证' })) expect(onValidate).toHaveBeenCalledOnce() rerender( ) await user.click(screen.getByText('查看密钥诊断')) await user.click(screen.getByRole('button', { name: '复制诊断信息' })) expect(onCopy).toHaveBeenCalledOnce() }) it('uses shared button variants for editor actions without legacy visual classes', async () => { const user = userEvent.setup() const onValidate = vi.fn() const onSave = vi.fn() render( ) const validate = screen.getByRole('button', { name: '验证密钥' }) const save = screen.getByRole('button', { name: '保存密钥' }) expect(validate).not.toHaveClass('database-key-secondary') expect(save).not.toHaveClass('database-key-primary') await user.click(validate) await user.click(save) expect(onValidate).toHaveBeenCalledOnce() expect(onSave).toHaveBeenCalledOnce() }) it('restores focus to the actual destructive dialog trigger', async () => { const user = userEvent.setup() render( ) const clearKey = screen.getByRole('button', { name: '清除密钥' }) await user.click(clearKey) expect(screen.getByRole('alertdialog', { name: '确认清除数据库密钥?' })).toBeVisible() await user.keyboard('{Escape}') expect(screen.queryByRole('alertdialog')).not.toBeInTheDocument() expect(clearKey).toHaveFocus() }) })