import { MOCK_EARN_CONTEXT } from '@/earn/mocks/mocks.test'; import { fireEvent, render, screen } from '@testing-library/react'; import { vi } from 'vitest'; import { beforeEach, describe, expect, it } from 'vitest'; import { useEarnContext } from './EarnProvider'; import { VaultDetails } from './VaultDetails'; // Mock the context hook vi.mock('./EarnProvider', () => ({ useEarnContext: vi.fn(), })); describe('VaultDetails', () => { beforeEach(() => { // Reset mock before each test vi.mocked(useEarnContext).mockReturnValue(MOCK_EARN_CONTEXT); }); it('renders skeleton when vault data is not available', () => { vi.mocked(useEarnContext).mockReturnValue({ ...MOCK_EARN_CONTEXT, // @ts-expect-error - This is a test vaultToken: null, // @ts-expect-error - This is a test vaultName: null, }); render(); expect(screen.getByTestId('ockSkeleton')).toBeInTheDocument(); }); it('renders vault details with correct initial state', () => { render(); expect(screen.getByTestId('ock-vaultDetails')).toBeInTheDocument(); expect(screen.getByTestId('ock-vaultDetailsButton')).toBeInTheDocument(); }); it('closes popover when onClose is triggered', () => { render(); fireEvent.click(screen.getByTestId('ock-vaultDetailsButton')); expect(screen.getByTestId('ock-vaultDetails')).toBeInTheDocument(); const popover = screen.getByRole('dialog'); fireEvent.keyDown(popover, { key: 'Escape' }); expect( screen.queryByTestId('ock-vaultDetailsBaseScanLink'), ).not.toBeInTheDocument(); }); it('displays correct token information in popover', () => { vi.mocked(useEarnContext).mockReturnValue({ ...MOCK_EARN_CONTEXT, deposits: '10000', liquidity: '2000', }); render(); fireEvent.click(screen.getByTestId('ock-vaultDetailsButton')); expect(screen.getByText('USDC')).toBeInTheDocument(); expect(screen.getByText('10K USDC')).toBeInTheDocument(); // Deposits expect(screen.getByText('2K USDC')).toBeInTheDocument(); // Liquidity }); it('renders BaseScan link with correct address', () => { render(); fireEvent.click(screen.getByTestId('ock-vaultDetailsButton')); const baseScanLink = screen.getByTestId('ock-vaultDetailsBaseScanLink'); expect(baseScanLink).toHaveAttribute( 'href', 'https://basescan.org/address/0x123', ); expect(baseScanLink).toHaveAttribute('target', '_blank'); expect(baseScanLink).toHaveAttribute('rel', 'noopener noreferrer'); }); it('handles missing optional data gracefully', () => { vi.mocked(useEarnContext).mockReturnValue({ ...MOCK_EARN_CONTEXT, // @ts-expect-error - This is a test deposits: null, // @ts-expect-error - This is a test liquidity: null, }); render(); fireEvent.click(screen.getByTestId('ock-vaultDetailsButton')); expect(screen.queryByText('Total deposits')).not.toBeInTheDocument(); expect(screen.queryByText('Liquidity')).not.toBeInTheDocument(); }); });