jest.mock('../../src/helpers/ProtocolDetector', () => { return { ProtocolDetector: jest.fn().mockImplementation(() => ({ isPoolSharkVault: jest.fn().mockReturnValue(false), isBlackholeVault: jest.fn().mockReturnValue(false), isAerodromeVault: jest.fn().mockReturnValue(false), })), }; }); import { BalanceQuerier } from '../../src/helpers/BalanceQuerier'; describe('BalanceQuerier behavior', () => { it('uses algebraVaultDetailsByAddress for poolshark-like vaults', async () => { const contract = { algebraVaultDetailsByAddress: jest.fn().mockResolvedValue({ token0Balance: 10n, token1Balance: 20n, }), getFunction: jest.fn(), } as any; const querier = new BalanceQuerier(contract); const detector = (querier as any).protocolDetector; detector.isPoolSharkVault.mockReturnValue(true); const result = await querier.getVaultBalances({ vaultAddress: '0xvault', beaconName: 'poolshark', token0: '0x1', token1: '0x2', }); expect(result).toEqual({ bal0: 10n, bal1: 20n }); expect(contract.algebraVaultDetailsByAddress).toHaveBeenCalledWith( '0xvault', ); }); it('uses vaultBalancesByAddressWithFees for standard vaults', async () => { const staticCall = jest.fn().mockResolvedValue([30n, 40n]); const contract = { getFunction: jest.fn().mockReturnValue({ staticCall }), } as any; const querier = new BalanceQuerier(contract); const result = await querier.getVaultBalances({ vaultAddress: '0xvault', beaconName: 'standard', token0: '0x1', token1: '0x2', }); expect(result).toEqual({ bal0: 30n, bal1: 40n }); expect(staticCall).toHaveBeenCalledWith('0xvault'); }); });