Files
Genarrative/src/components/common/PlatformIconBadge.test.tsx
T
kdletters 9141540c37 收口充值弹窗图标槽
将充值结果弹窗和支付确认遮罩的图标槽迁移到共享 PlatformIconBadge
为 PlatformIconBadge 补充稳定类名并更新相关测试
同步更新 PlatformUiKit 收口文档与团队决策记录
2026-06-10 16:35:31 +08:00

127 lines
3.5 KiB
TypeScript

/* @vitest-environment jsdom */
import { render, screen } from '@testing-library/react';
import { Play } from 'lucide-react';
import { expect, test } from 'vitest';
import { PlatformIconBadge } from './PlatformIconBadge';
test('renders neutral circular icon badge by default', () => {
render(<PlatformIconBadge icon={<Play className="h-4 w-4" />} />);
const badge = document.querySelector('[aria-hidden="true"]');
expect(badge?.className).toContain('platform-icon-badge');
expect(badge?.className).toContain('h-9');
expect(badge?.className).toContain('rounded-full');
expect(badge?.className).toContain('bg-[var(--platform-neutral-bg)]');
});
test('supports rounded medium icon badge with label', () => {
render(
<PlatformIconBadge
icon={<Play className="h-4 w-4" />}
label="继续"
size="md"
shape="rounded"
className="custom-badge"
/>,
);
const badge = screen.getByLabelText('继续');
expect(badge.className).toContain('h-11');
expect(badge.className).toContain('rounded-[0.85rem]');
expect(badge.className).toContain('custom-badge');
});
test('supports extra small soft icon badge', () => {
render(
<PlatformIconBadge
icon={<Play className="h-3.5 w-3.5" />}
size="xs"
tone="soft"
/>,
);
const badge = document.querySelector('[aria-hidden="true"]');
expect(badge?.className).toContain('h-7');
expect(badge?.className).toContain('bg-white/82');
expect(badge?.className).toContain('shadow-sm');
});
test('supports larger creative icon badge tones', () => {
const { rerender } = render(
<PlatformIconBadge
icon={<Play className="h-4 w-4" />}
size="base"
tone="softBright"
/>,
);
let badge = document.querySelector('[aria-hidden="true"]');
expect(badge?.className).toContain('h-10');
expect(badge?.className).toContain('bg-white/84');
rerender(
<PlatformIconBadge
icon={<Play className="h-5 w-5" />}
size="lg"
tone="hero"
/>,
);
badge = document.querySelector('[aria-hidden="true"]');
expect(badge?.className).toContain('h-12');
expect(badge?.className).toContain('bg-white/18');
rerender(
<PlatformIconBadge
icon={<Play className="h-3.5 w-3.5" />}
size="xs"
tone="heroMuted"
/>,
);
badge = document.querySelector('[aria-hidden="true"]');
expect(badge?.className).toContain('h-7');
expect(badge?.className).toContain('text-white/72');
rerender(
<PlatformIconBadge
icon={<Play className="h-6 w-6" />}
size="xl"
tone="success"
/>,
);
badge = document.querySelector('[aria-hidden="true"]');
expect(badge?.className).toContain('h-14');
expect(badge?.className).toContain('bg-[var(--platform-success-bg)]');
rerender(
<PlatformIconBadge icon={<Play className="h-4 w-4" />} tone="danger" />,
);
badge = document.querySelector('[aria-hidden="true"]');
expect(badge?.className).toContain('bg-[var(--platform-button-danger-fill)]');
expect(badge?.className).toContain(
'text-[var(--platform-button-danger-text)]',
);
});
test('supports extra large dark amber icon badge', () => {
render(
<PlatformIconBadge
icon={<Play className="h-8 w-8" />}
size="xxl"
shape="xl"
tone="darkAmber"
/>,
);
const badge = document.querySelector('[aria-hidden="true"]');
expect(badge?.className).toContain('h-20');
expect(badge?.className).toContain('rounded-2xl');
expect(badge?.className).toContain('border-amber-400/30');
expect(badge?.className).toContain('bg-amber-500/15');
});