33 lines
1.1 KiB
TypeScript
33 lines
1.1 KiB
TypeScript
import { describe, expect, test, vi } from 'vitest';
|
|
import { render, screen, fireEvent } from '@testing-library/svelte';
|
|
import ApiErrorBanner from './ApiErrorBanner.svelte';
|
|
|
|
describe('ApiErrorBanner', () => {
|
|
test('renders error.message when present', () => {
|
|
render(ApiErrorBanner, {
|
|
props: {
|
|
error: { code: 'server_error', message: 'database down', status: 500 },
|
|
onRetry: () => {}
|
|
}
|
|
});
|
|
expect(screen.getByRole('alert')).toHaveTextContent('database down');
|
|
});
|
|
|
|
test('falls back to generic text when error lacks message', () => {
|
|
render(ApiErrorBanner, { props: { error: undefined, onRetry: () => {} } });
|
|
expect(screen.getByRole('alert')).toHaveTextContent(/something went wrong/i);
|
|
});
|
|
|
|
test('clicking the button calls onRetry', async () => {
|
|
const onRetry = vi.fn();
|
|
render(ApiErrorBanner, {
|
|
props: {
|
|
error: { code: 'server_error', message: 'x', status: 500 },
|
|
onRetry
|
|
}
|
|
});
|
|
await fireEvent.click(screen.getByRole('button', { name: /try again/i }));
|
|
expect(onRetry).toHaveBeenCalledTimes(1);
|
|
});
|
|
});
|