/* @vitest-environment jsdom */ import { render, screen } from '@testing-library/react'; import { expect, test } from 'vitest'; import { CopyCodeButton } from './CopyCodeButton'; test('renders public work code with default accessible copy label', () => { render( , ); const button = screen.getByRole('button', { name: '复制作品号 PZ-001' }); expect(button.className).toContain('code-chip'); expect(button.getAttribute('title')).toBe('复制作品号'); expect(screen.getByText('作品号')).toBeTruthy(); expect(screen.getByText('PZ-001').className).toContain('code-value'); }); test('renders copied and failed suffixes without business-side fragments', () => { const { rerender } = render(); expect(screen.getByText('已复制')).toBeTruthy(); rerender(); expect(screen.getByText('复制失败')).toBeTruthy(); }); test('supports compact code-only chips', () => { render( , ); const button = screen.getByRole('button', { name: '复制作品号 PZ-001' }); expect(button.textContent).toBe('PZ-001已复制'); expect(button.querySelector('svg')).toBeNull(); expect(button.getAttribute('title')).toBe('复制作品号'); }); test('can opt into shared pill action chrome for short codes', () => { render( , ); const button = screen.getByRole('button', { name: '复制作品号 RPG-001' }); expect(button.className).toContain('rounded-full'); expect(button.className).toContain('bg-white/72'); expect(button.className).toContain('text-[10px]'); expect(button.className).toContain('tracking-[0.18em]'); expect(button.className).not.toContain('platform-pill'); });