import { render, screen } from '@testing-library/react'; import { type Mock, beforeEach, describe, expect, it, vi } from 'vitest'; import { BuyMessage } from './BuyMessage'; import { useBuyContext } from './BuyProvider'; vi.mock('./BuyProvider', () => ({ useBuyContext: vi.fn(), })); describe('BuyMessage', () => { beforeEach(() => { vi.clearAllMocks(); }); it('renders null when statusName is not "error"', () => { (useBuyContext as Mock).mockReturnValue({ lifecycleStatus: { statusName: 'success' }, }); const { container } = render(); expect(container.firstChild).toBeNull(); }); it('renders error message when statusName is "error"', () => { (useBuyContext as Mock).mockReturnValue({ lifecycleStatus: { statusName: 'error', statusData: { error: '' } }, }); render(); expect( screen.getByText('Something went wrong. Please try again.'), ).toBeInTheDocument(); expect( screen.getByText('Something went wrong. Please try again.'), ).toHaveClass('text-sm'); expect( screen.getByText('Something went wrong. Please try again.'), ).toHaveClass('text-ock-error'); }); it('renders missing required fields message', () => { (useBuyContext as Mock).mockReturnValue({ lifecycleStatus: { statusName: 'error', statusData: { code: 'TmBPc05', error: 'Missing required fields', message: 'Complete the field to continue', }, }, }); render(); expect( screen.getByText('Complete the field to continue'), ).toBeInTheDocument(); expect(screen.getByText('Complete the field to continue')).toHaveClass( 'text-sm', ); expect(screen.getByText('Complete the field to continue')).toHaveClass( 'text-ock-foreground-muted', ); }); });