Skip to content

Commit 0bf9025

Browse files
AvatarGroup Tests (#707)
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
1 parent c86aad5 commit 0bf9025

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import React from 'react';
2+
import { render, screen, fireEvent } from '@testing-library/react';
3+
import AvatarGroup from '../AvatarGroup';
4+
5+
describe('AvatarGroup', () => {
6+
const avatars = [
7+
{ fallback: 'A', src: 'https://i.pravatar.cc/300?img=1', alt: 'Avatar 1' },
8+
{ fallback: 'B', src: 'https://i.pravatar.cc/300?img=2', alt: 'Avatar 2' },
9+
{ fallback: 'C', src: 'https://i.pravatar.cc/300?img=3', alt: 'Avatar 3' },
10+
];
11+
const avatarsWithFallback = [
12+
{ fallback: 'A', src: '', alt: 'Avatar 1' },
13+
{ fallback: 'B', src: '', alt: 'Avatar 2' },
14+
];
15+
16+
test('renders AvatarGroup component', () => {
17+
render(<AvatarGroup avatars={avatars} />);
18+
expect(screen.getByAltText('Avatar 1')).toBeInTheDocument();
19+
expect(screen.getByAltText('Avatar 2')).toBeInTheDocument();
20+
expect(screen.getByAltText('Avatar 3')).toBeInTheDocument();
21+
});
22+
23+
test('AvatarGroup renders fallback text when src is not provided', () => {
24+
render(<AvatarGroup avatars={avatarsWithFallback} />);
25+
expect(screen.getByText('A')).toBeInTheDocument();
26+
expect(screen.getByText('B')).toBeInTheDocument();
27+
});
28+
29+
test('AvatarGroup applies className correctly', () => {
30+
const customClass = 'custom-class';
31+
render(<AvatarGroup avatars={avatarsWithFallback} className={customClass} />);
32+
expect(screen.getByText('A').parentElement.parentElement).toHaveClass(customClass);
33+
});
34+
35+
test('AvatarGroup renders correct number of avatars', () => {
36+
render(<AvatarGroup avatars={avatars} />);
37+
const avatarImages = screen.getAllByRole('img');
38+
expect(avatarImages.length).toBe(avatars.length);
39+
});
40+
41+
test('AvatarGroup renders correct src for each avatar', () => {
42+
render(<AvatarGroup avatars={avatars} />);
43+
avatars.forEach(avatar => {
44+
const img = screen.getByAltText(avatar.alt);
45+
expect(img).toHaveAttribute('src', avatar.src);
46+
});
47+
});
48+
49+
test('AvatarGroup renders correct src for with fallback as boolean', () => {
50+
const brokenFallBack = [
51+
{ fallback: true, src: 'https://i.pravatar.cc/300?img=1', alt: 'Avatar 1' },
52+
{ fallback: true, src: 'https://i.pravatar.cc/300?img=2', alt: 'Avatar 2' },
53+
{ fallback: false, src: 'https://i.pravatar.cc/300?img=3', alt: 'Avatar 3' },
54+
];
55+
render(<AvatarGroup avatars={brokenFallBack} />);
56+
brokenFallBack.forEach(avatar => {
57+
const img = screen.getByAltText(avatar.alt);
58+
expect(img).toHaveAttribute('src', avatar.src);
59+
});
60+
});
61+
62+
test('AvatarGroup renders for broken image src', () => {
63+
render(<AvatarGroup avatars={avatars} />);
64+
avatars.forEach(avatar => {
65+
const img = screen.getByAltText(avatar.alt);
66+
fireEvent.error(img);
67+
// Assert that the fallback text is rendered
68+
expect(screen.getByText(avatar.fallback)).toBeInTheDocument();
69+
});
70+
});
71+
});
72+

0 commit comments

Comments
 (0)