import type { SwapUnit } from '@/swap/types'; import type { Token } from '@/token'; import { fireEvent, render, screen } from '@testing-library/react'; import type { Address } from 'viem'; import { type Mock, beforeEach, describe, expect, it, vi } from 'vitest'; import { BuyOnrampItem } from './BuyOnrampItem'; import { useBuyContext } from './BuyProvider'; vi.mock('./BuyProvider', () => ({ useBuyContext: vi.fn(), })); vi.mock('../../internal/svg', () => ({ appleSvg: , cardSvg: , coinbaseLogoSvg: , })); const mockTo = { amountUSD: '5', amount: '5', token: { address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' }, }; describe('BuyOnrampItem', () => { const mockSetIsDropdownOpen = vi.fn(); const mockOnClick = vi.fn(); beforeEach(() => { vi.clearAllMocks(); (useBuyContext as Mock).mockReturnValue({ setIsDropdownOpen: mockSetIsDropdownOpen, }); }); it('renders correctly with provided props', () => { render( , ); expect(screen.getByRole('button')).toBeInTheDocument(); expect(screen.getByTestId('ock-applePayOnrampItem')).toBeInTheDocument(); expect(screen.getByText('Fast and secure payments.')).toBeInTheDocument(); expect(screen.getByTestId('ock-applePaySvg')).toBeInTheDocument(); }); it('handles icon rendering based on the icon prop', () => { render( , ); expect(screen.getByTestId('cardSvg')).toBeInTheDocument(); }); it('triggers onClick and closes dropdown on button click', () => { render( , ); const button = screen.getByRole('button'); fireEvent.click(button); expect(mockSetIsDropdownOpen).toHaveBeenCalledWith(false); expect(mockOnClick).toHaveBeenCalledTimes(1); }); it('applies correct styling and attributes to the button', () => { render( , ); const button = screen.getByRole('button'); expect(button).toHaveClass('flex items-center gap-2 rounded-lg p-2'); expect(button).toHaveAttribute('type', 'button'); }); it('should disables and shows message if amount is less than 5', () => { const { getByText, queryByText } = render( , ); expect(getByText('Minimum purchase amount is $5')).toBeInTheDocument(); expect(queryByText('Only on mobile and Safari')).toBeNull(); }); });