import { MOCK_EARN_CONTEXT } from '@/earn/mocks/mocks.test'; import type { EarnContextType } from '@/earn/types'; import type { MakeRequired } from '@/internal/types'; import type { Call } from '@/transaction/types'; import { render, screen } from '@testing-library/react'; import type { Address } from 'viem'; import { beforeEach, describe, expect, it, vi } from 'vitest'; import { useEarnContext } from './EarnProvider'; import { EarnWithdraw } from './EarnWithdraw'; // Address required to avoid connect wallet prompt const baseContext: MakeRequired = { ...MOCK_EARN_CONTEXT, recipientAddress: '0x123' as Address, }; vi.mock('wagmi', async (importOriginal) => { const actual = await importOriginal(); return { ...actual, WagmiProvider: vi.fn(), createConfig: vi.fn(), useAccount: () => ({ address: '0x123', status: 'connected' }), useConnect: vi.fn(), }; }); vi.mock('./EarnProvider', () => ({ useEarnContext: vi.fn(), })); vi.mock('@/transaction', () => ({ Transaction: ({ className, calls, children, }: { className: string; calls: Call[]; children: React.ReactNode; }) => (
{children}
), TransactionButton: ({ text }: { text: string }) => ( ), })); describe('EarnWithdraw Component', () => { beforeEach(() => { vi.mocked(useEarnContext).mockReturnValue(baseContext); }); it('renders children when provided', () => { const mockChildren =

Custom Children

; render({mockChildren}); const earnCard = screen.getByTestId('ockEarnCard'); expect(earnCard).toBeInTheDocument(); expect(earnCard).toHaveTextContent('Custom Children'); }); it('renders default components when children are not provided', () => { render(); const earnCard = screen.getByTestId('ockEarnCard'); expect(earnCard).toBeInTheDocument(); expect(screen.getByTestId('ockEarnDetails')).toBeInTheDocument(); expect(screen.getByTestId('ockEarnAmountInput')).toBeInTheDocument(); expect(screen.getByTestId('ockEarnBalance')).toBeInTheDocument(); }); it('applies custom className to the EarnCard', () => { const customClass = 'custom-class'; render(); const earnCard = screen.getByTestId('ockEarnCard'); expect(earnCard).toHaveClass(customClass); }); });