import type { Call } from '@/transaction/types';
import { useGetTokenBalance } from '@/wallet/hooks/useGetTokenBalance';
import { QueryClientProvider } from '@tanstack/react-query';
import { QueryClient } from '@tanstack/react-query';
import { render, screen } from '@testing-library/react';
import { baseSepolia } from 'viem/chains';
import { type Mock, beforeEach, describe, expect, it, vi } from 'vitest';
import {
http,
WagmiProvider,
createConfig,
mock,
useAccount,
useConfig,
} from 'wagmi';
import { Earn } from './Earn';
const queryClient = new QueryClient();
const mockConfig = createConfig({
chains: [baseSepolia],
connectors: [
mock({
accounts: ['0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266'],
}),
],
transports: {
[baseSepolia.id]: http(),
},
});
const wrapper = ({ children }: { children: React.ReactNode }) => (
{children}
);
vi.mock('wagmi', async (importOriginal) => {
return {
...(await importOriginal()),
useAccount: vi.fn(),
useConfig: vi.fn(),
useCapabilities: vi.fn(),
};
});
vi.mock('@/transaction', () => ({
Transaction: ({
className,
calls,
children,
}: {
className: string;
calls: Call[];
children: React.ReactNode;
}) => (
{children}
),
TransactionButton: ({ text }: { text: string }) => (
),
}));
vi.mock('@/wallet/hooks/useGetTokenBalance', () => ({
useGetTokenBalance: vi.fn(),
}));
describe('Earn Component', () => {
beforeEach(() => {
(useAccount as Mock).mockReturnValue({
address: '0x123',
});
(useGetTokenBalance as Mock).mockReturnValue({
convertedBalance: '0.0',
error: null,
});
(useConfig as Mock).mockReturnValue({});
});
it('renders custom children when provided', () => {
const customChildren = Custom Children
;
render({customChildren}, { wrapper });
expect(screen.getByText('Custom Children')).toBeInTheDocument();
expect(screen.queryByTestId('tabs')).not.toBeInTheDocument();
});
it('renders default tabs and their contents when children are not provided', () => {
const { container } = render(, { wrapper });
expect(container).toHaveTextContent('Deposit');
expect(container).toHaveTextContent('Withdraw');
});
});