@openocean.finance/widget
Version:
Openocean Widget for cross-chain bridging and swapping. It will drive your multi-chain strategy and attract new users from everywhere.
45 lines • 2 kB
JavaScript
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
describe('OpenOceanService', () => {
beforeEach(() => {
vi.resetModules();
vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
ok: true,
json: async () => ({ data: { openapi_v1: ['https://rpc.example'] } }),
}));
});
afterEach(() => {
vi.restoreAllMocks();
});
it('throws a fallback error when swap returns a non-200 business code with an empty error', async () => {
const { OpenOceanService } = await import('./OpenOceanService.js');
vi.mocked(globalThis.fetch).mockResolvedValue({
ok: true,
json: async () => ({ code: 500, error: '' }),
});
await expect(OpenOceanService.getSwapQuote({
chain: '8453',
inTokenAddress: '0x0000000000000000000000000000000000000001',
inTokenSymbol: 'ETH',
outTokenAddress: '0x0000000000000000000000000000000000000002',
outTokenSymbol: 'USDC',
amount: '1000000000000000000',
account: '0x0000000000000000000000000000000000000003',
})).rejects.toThrow('Failed to fetch swap quote');
});
it('throws the API error message when quote returns a non-200 business code', async () => {
const { OpenOceanService } = await import('./OpenOceanService.js');
vi.mocked(globalThis.fetch).mockResolvedValue({
ok: true,
json: async () => ({ code: 500, error: 'Router unavailable' }),
});
await expect(OpenOceanService.getQuote({
chain: '8453',
inTokenAddress: '0x0000000000000000000000000000000000000001',
inTokenSymbol: 'ETH',
outTokenAddress: '0x0000000000000000000000000000000000000002',
outTokenSymbol: 'USDC',
amount: '1000000000000000000',
})).rejects.toThrow('Router unavailable');
});
});
//# sourceMappingURL=OpenOceanService.test.js.map