Files
SRCmail/components/ui/__tests__/avatar.test.tsx
T
Matthieu MALVACHEandMatthieu MALVACHE fb414bf2c9 feat: add contacts phase 2, advanced search, vacation responder, Docker & TOTP 2FA
- Contact groups/lists, vCard import/export (RFC 6350), bulk operations
- Advanced search with JMAP filter panel, search chips, cross-mailbox queries
- Vacation responder with JMAP VacationResponse, settings tab, sidebar indicator
- TOTP two-factor authentication support
- Docker multi-stage build with standalone output and docker-compose
- CSP Report-Only headers and security headers via proxy middleware
- Virtual scrolling for large email lists
- Structured server-side logger (text/JSON, configurable level)
- 450+ tests (contacts, vCard, threads, headers, identity, components)
- Playwright E2E framework setup
- Updated README and ROADMAP with all new features
2026-02-16 18:51:30 +01:00

34 lines
1.2 KiB
TypeScript

import { render } from '@testing-library/react';
import { describe, it, expect } from 'vitest';
import { Avatar } from '../avatar';
describe('Avatar', () => {
it('renders initials from full name', () => {
const { container } = render(<Avatar name="Alice Smith" />);
expect(container.textContent).toBe('AS');
});
it('renders two letters from single-word name', () => {
const { container } = render(<Avatar name="Alice" />);
expect(container.textContent).toBe('AL');
});
it('renders single letter from email when no name', () => {
const { container } = render(<Avatar email="bob@example.com" />);
expect(container.textContent).toBe('B');
});
it('renders "?" when no name or email', () => {
const { container } = render(<Avatar />);
expect(container.textContent).toBe('?');
});
it('produces consistent background color for same input', () => {
const { container: a } = render(<Avatar name="Alice" />);
const { container: b } = render(<Avatar name="Alice" />);
const colorA = (a.firstChild as HTMLElement).style.backgroundColor;
const colorB = (b.firstChild as HTMLElement).style.backgroundColor;
expect(colorA).toBe(colorB);
});
});