Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 80 additions & 0 deletions src/components/avatar/__test__/Avatar.test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
import {fireEvent, render, screen} from '@testing-library/react'
import AvatarProfile from '@src/components/avatar/avatar.tsx';

describe('[COMPONENTS]: AvatarProfile component testing', () => {
it('to match snapshot', () => {
const { baseElement } = render(<AvatarProfile src="test-src" />);
expect(baseElement).toMatchSnapshot();
});

it('renders with default props', () => {
render(<AvatarProfile src="test" />);
const avatar = screen.getByRole('img');
expect(avatar).toBeInTheDocument();
expect(avatar).toHaveAttribute('alt', 'Avatar profile');
});

it('uses dicebear when src is not a URL', () => {
render(<AvatarProfile src="test" />);
const avatar = screen.getByRole('img');
expect(avatar).toHaveAttribute('src');
expect(avatar.getAttribute('src')).toContain('api.dicebear.com');
});

it('renders avatar with direct URL when src starts with http', () => {
render(<AvatarProfile src="https://example.com/avatar.png" data-testid="avatar" />);
const avatar = screen.getByRole('img');
expect(avatar).toHaveAttribute('src', 'https://example.com/avatar.png');
});

it('renders avatar with direct URL when src starts with blob', () => {
render(<AvatarProfile src="blob:https://example.com/avatar" />);
const avatar = screen.getByRole('img');
expect(avatar).toHaveAttribute('src', 'blob:https://example.com/avatar');
});

it('sets alt text to uppercase when provided', () => {
render(<AvatarProfile src="test-src" alt="user" />);
const avatar = screen.getByRole('img');
expect(avatar).toHaveAttribute('alt', 'USER');
});

it('sets default alt text when not provided', () => {
render(<AvatarProfile src="test-src" />);
const avatar = screen.getByRole('img');
expect(avatar).toHaveAttribute('alt', 'Avatar profile');
});

it('sets custom alt text when provided', () => {
render(<AvatarProfile alt='Custom' src="test-src" />);
const avatar = screen.getByRole('img');
expect(avatar).toHaveAttribute('alt', 'CUSTOM');
});

it('applies default styles correctly', () => {
render(<AvatarProfile src="test-src" data-testid="avatar" />);
const avatar = screen.getByTestId('avatar');
expect(avatar).toBeInTheDocument();
});

it('applies additional styles when provided via sx prop', () => {
render(<AvatarProfile src="test-src" sx={{ width: 60, height: 60 }} data-testid="avatar" />);
const avatar = screen.getByTestId('avatar');
expect(avatar).toBeInTheDocument();
});

it('handles click events correctly', async () => {
const handleClick = vi.fn();
render(<AvatarProfile src="test-src" onClick={handleClick} data-testid="avatar" />);
const avatar = screen.getByTestId('avatar');

fireEvent.click(avatar);
expect(handleClick).toHaveBeenCalledTimes(1);
});

it('applies variant correctly', () => {
render(<AvatarProfile src="test-src" variant="square" data-testid="avatar" />);
const avatar = screen.getByTestId('avatar');
expect(avatar).toHaveClass('MuiAvatar-square');
});
});
17 changes: 17 additions & 0 deletions src/components/avatar/__test__/__snapshots__/Avatar.test.tsx.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html

exports[`[COMPONENTS]: AvatarProfile component testing > to match snapshot 1`] = `
<body>
<div>
<div
class="MuiAvatar-root MuiAvatar-circular css-nxmzm1-MuiAvatar-root"
>
<img
alt="Avatar profile"
class="MuiAvatar-img css-1pqm26d-MuiAvatar-img"
src="https://api.dicebear.com/9.x/bottts-neutral/svg?seed=test-src"
/>
</div>
</div>
</body>
`;
Loading