diff --git a/src/earn/components/EarnProvider.test.tsx b/src/earn/components/EarnProvider.test.tsx index 39573b8402..1f035902a3 100644 --- a/src/earn/components/EarnProvider.test.tsx +++ b/src/earn/components/EarnProvider.test.tsx @@ -1,12 +1,13 @@ import { useMorphoVault } from '@/earn/hooks/useMorphoVault'; import { useGetTokenBalance } from '@/wallet/hooks/useGetTokenBalance'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { render, renderHook } from '@testing-library/react'; +import { fireEvent, render, renderHook, screen } from '@testing-library/react'; import { act } from 'react'; import { baseSepolia } from 'viem/chains'; import { type Mock, beforeEach, describe, expect, it, vi } from 'vitest'; import { http, WagmiProvider, createConfig, mock, useAccount } from 'wagmi'; import { EarnProvider, useEarnContext } from './EarnProvider'; +import { TransactionReceipt } from 'viem'; const DUMMY_ADDRESS = '0x9E95f497a7663B70404496dB6481c890C4825fe1' as const; const queryClient = new QueryClient(); @@ -23,7 +24,49 @@ const mockConfig = createConfig({ }, }); -const wrapper = ({ children }: { children: React.ReactNode }) => ( +const TestComponent = () => { + const context = useEarnContext(); + const handleStatusError = async () => { + context.updateLifecycleStatus({ + statusName: 'error', + statusData: { + code: 'code', + error: 'error_long_messages', + message: 'error_long_messages', + }, + }); + }; + const handleStatusSuccess = async () => { + context.updateLifecycleStatus({ + statusName: 'success', + statusData: { + transactionReceipts: [ + { hash: '0x1235' } as unknown as TransactionReceipt, + ], + }, + }); + }; + + return ( +
+ + {context.lifecycleStatus.statusName} + + + +
+ ); +}; + +const wrapper = ({ + children, +}: { + children?: React.ReactNode; +}) => ( {children} @@ -58,6 +101,54 @@ describe('EarnProvider', () => { }); }); + it('should emit onError when setLifecycleStatus is called with error', async () => { + const onErrorMock = vi.fn(); + const onStatusMock = vi.fn(); + (useMorphoVault as Mock).mockReturnValue({ + asset: DUMMY_ADDRESS, + assetDecimals: 18, + assetSymbol: 'TEST', + balance: '100', + totalApy: '0.05', + }); + + render( + + + , + ); + + const button = screen.getByText('setLifecycleStatus.error'); + fireEvent.click(button); + expect(onErrorMock).toHaveBeenCalled(); + expect(onStatusMock).toHaveBeenCalled(); + }); + + it('should emit onSuccess when setLifecycleStatus is called with success', async () => { + const onSuccessMock = vi.fn(); + (useMorphoVault as Mock).mockReturnValue({ + asset: DUMMY_ADDRESS, + assetDecimals: 18, + assetSymbol: 'TEST', + balance: '100', + totalApy: '0.05', + }); + + render( + + + , + ); + + const button = screen.getByText('setLifecycleStatus.success'); + fireEvent.click(button); + expect(onSuccessMock).toHaveBeenCalledWith({ hash: '0x1235' }); + }); + it('throws an error when vaultAddress is not provided', () => { expect(() => renderHook(() => useEarnContext(), {