feat(profile): системные бейджи рядом с ником
- участники сервера отдают список бейджей из badges_json (AGENT.md 7.2): список расширяемый, назначается только системой - клиент: каталог бейджей (щит администратора инстанса, корона владельца, ранний сторонник, проверенный), неизвестные показываются нейтральной меткой - бейджи видны в ленте, списке участников и друзьях вместо текстовой плашки - тесты: Go (бейджи в списке участников) и Vitest (каталог и отрисовка)
This commit is contained in:
@@ -4,6 +4,7 @@ import userEvent from '@testing-library/user-event';
|
||||
|
||||
import { AnimatedImage } from '@/components/ui/AnimatedImage';
|
||||
import { FramedAvatar, Nickname } from '@/components/profile/Cosmetics';
|
||||
import { SystemBadges } from '@/components/profile/SystemBadges';
|
||||
import { nickColorStyle, nickEffectClass } from '@/components/profile/cosmeticsStyle';
|
||||
import {
|
||||
bodyOf,
|
||||
@@ -498,3 +499,31 @@ describe('фон комнаты', () => {
|
||||
expect(image?.getAttribute('data-animated')).toBe('animated');
|
||||
});
|
||||
});
|
||||
|
||||
describe('системные бейджи', () => {
|
||||
it('показывает щит администратора инстанса и корону владельца', () => {
|
||||
render(<SystemBadges badges={['instance_admin', 'early_supporter']} isOwner isInstanceAdmin />);
|
||||
|
||||
expect(screen.getByTestId('system-badge-instance_admin')).toHaveTextContent('🛡');
|
||||
expect(screen.getByTestId('system-badge-guild_owner')).toHaveTextContent('👑');
|
||||
expect(screen.getByTestId('system-badge-early_supporter')).toHaveAttribute(
|
||||
'title',
|
||||
'Ранний сторонник',
|
||||
);
|
||||
// Администратор инстанса помечен даже без записи в badges_json.
|
||||
expect(screen.getByLabelText('Администратор инстанса')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('неизвестный бейдж показывается нейтральной меткой, а не пропадает', () => {
|
||||
render(<SystemBadges badges={['future_badge']} />);
|
||||
|
||||
const badge = screen.getByTestId('system-badge-future_badge');
|
||||
expect(badge).toHaveTextContent('•');
|
||||
expect(badge).toHaveAttribute('title', 'future_badge');
|
||||
});
|
||||
|
||||
it('без бейджей ничего не рисует', () => {
|
||||
const { container } = render(<SystemBadges />);
|
||||
expect(container.querySelector('[data-testid="system-badges"]')).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user