import { fireEvent, render, screen } from '@testing-library/react';
import { type Mock, describe, expect, it, vi } from 'vitest';
import { Message } from '../types';
import { useSignatureContext } from '../components/SignatureProvider';
import { SignatureToast } from '../components/SignatureToast';
vi.mock('../components/SignatureProvider', () => ({
useSignatureContext: vi.fn(),
}));
vi.mock('../components/SignatureIcon', () => ({
SignatureIcon: vi.fn(() =>
SignatureIcon
),
}));
vi.mock('../components/SignatureLabel', () => ({
SignatureLabel: vi.fn(() => SignatureLabel
),
}));
describe('SignatureToast', () => {
it('should render if status it not init', () => {
(useSignatureContext as Mock).mockReturnValue({
lifecycleStatus: {
statusName: 'success',
statusData: {
signature: '0x123',
type: Message.TYPED_DATA,
},
},
});
render();
expect(screen.getByTestId('ockToast')).toBeInTheDocument();
});
it('should not render in init status', () => {
(useSignatureContext as Mock).mockReturnValue({
lifecycleStatus: {
statusName: 'init',
statusData: null,
},
});
render();
expect(screen.queryByTestId('ockToast')).not.toBeInTheDocument();
});
it('should apply custom className', () => {
(useSignatureContext as Mock).mockReturnValue({
lifecycleStatus: {
statusName: 'success',
statusData: {
signature: '0x123',
type: Message.TYPED_DATA,
},
},
});
render();
expect(screen.getByTestId('ockToast')).toHaveClass('custom-class');
});
it('should hide toast onClose', () => {
(useSignatureContext as Mock).mockReturnValue({
lifecycleStatus: {
statusName: 'success',
statusData: {
signature: '0x123',
type: Message.TYPED_DATA,
},
},
});
render();
expect(screen.queryByTestId('ockToast')).toBeInTheDocument();
fireEvent.click(screen.getByTestId('ockCloseButton'));
expect(screen.queryByTestId('ockToast')).not.toBeInTheDocument();
});
it('should render default children', () => {
render();
expect(screen.getByText('SignatureIcon')).toBeInTheDocument();
expect(screen.getByText('SignatureLabel')).toBeInTheDocument();
});
it('should render passed in children', () => {
render(
Custom Child
,
);
expect(screen.getByText('Custom Child')).toBeInTheDocument();
});
});