@getclave/lifi-sdk
Version:
LI.FI Any-to-Any Cross-Chain-Swap SDK
79 lines (78 loc) • 4.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const data_types_1 = require("@lifi/data-types");
const types_1 = require("@lifi/types");
const vitest_1 = require("vitest");
const api_1 = require("../../services/api");
const setup_1 = require("../../tests/setup");
const getEVMBalance_1 = require("./getEVMBalance");
const defaultWalletAddress = '0x552008c0f6870c2f77e5cC1d2eb9bdff03e30Ea0';
const retryTimes = 2;
const timeout = 10000;
(0, vitest_1.beforeAll)(setup_1.setupTestEnvironment);
(0, vitest_1.describe)('getBalances integration tests', () => {
const loadAndCompareTokenAmounts = async (walletAddress, tokens) => {
const tokenBalances = await (0, getEVMBalance_1.getEVMBalance)(walletAddress, tokens);
(0, vitest_1.expect)(tokenBalances.length).toEqual(tokens.length);
for (let i = 0; i < tokens.length; i++) {
const token = tokens[i];
const tokenBalance = tokenBalances[i];
// contain token properties
(0, vitest_1.expect)(token.address).toEqual(tokenBalance.address);
// set amount
(0, vitest_1.expect)(tokenBalance.amount).toBeDefined();
(0, vitest_1.expect)(tokenBalance.amount).toBeGreaterThanOrEqual(0);
// contain block number
(0, vitest_1.expect)(tokenBalance.blockNumber).toBeDefined();
(0, vitest_1.expect)(tokenBalance.blockNumber).toBeGreaterThan(0);
}
};
(0, vitest_1.it)('should work for ERC20 on POL', { retry: retryTimes, timeout }, async () => {
const walletAddress = defaultWalletAddress;
const tokens = [
(0, data_types_1.findDefaultToken)(types_1.CoinKey.USDC, types_1.ChainId.POL),
(0, data_types_1.findDefaultToken)(types_1.CoinKey.USDT, types_1.ChainId.POL),
];
await loadAndCompareTokenAmounts(walletAddress, tokens);
});
(0, vitest_1.it)('should work for MATIC on POL', { retry: retryTimes, timeout }, async () => {
const walletAddress = defaultWalletAddress;
const tokens = [
(0, data_types_1.findDefaultToken)(types_1.CoinKey.POL, types_1.ChainId.POL),
(0, data_types_1.findDefaultToken)(types_1.CoinKey.DAI, types_1.ChainId.POL),
];
await loadAndCompareTokenAmounts(walletAddress, tokens);
});
(0, vitest_1.it)('should return even with invalid data on POL', { retry: retryTimes, timeout }, async () => {
const walletAddress = defaultWalletAddress;
const invalidToken = (0, data_types_1.findDefaultToken)(types_1.CoinKey.POL, types_1.ChainId.POL);
invalidToken.address = '0x2170ed0880ac9a755fd29b2688956bd959f933f8';
const tokens = [(0, data_types_1.findDefaultToken)(types_1.CoinKey.USDC, types_1.ChainId.POL), invalidToken];
const tokenBalances = await (0, getEVMBalance_1.getEVMBalance)(walletAddress, tokens);
(0, vitest_1.expect)(tokenBalances.length).toBe(2);
// invalid tokens should be returned with balance 0
const invalidBalance = tokenBalances.find((token) => token.address === invalidToken.address);
(0, vitest_1.expect)(invalidBalance).toBeDefined();
(0, vitest_1.expect)(invalidBalance.amount).toBeUndefined();
});
(0, vitest_1.it)('should fallback to a direct call if only one token is requested', { retry: retryTimes, timeout }, async () => {
const walletAddress = defaultWalletAddress;
const tokens = [(0, data_types_1.findDefaultToken)(types_1.CoinKey.DAI, types_1.ChainId.BSC)];
await loadAndCompareTokenAmounts(walletAddress, tokens);
});
(0, vitest_1.it)('should handle empty lists', { retry: retryTimes, timeout }, async () => {
const walletAddress = defaultWalletAddress;
const tokens = [];
await loadAndCompareTokenAmounts(walletAddress, tokens);
});
(0, vitest_1.it)('should handle token lists with more than 100 tokens', { retry: retryTimes, timeout }, async () => {
const walletAddress = defaultWalletAddress;
const { tokens } = await (0, api_1.getTokens)({
chains: [types_1.ChainId.OPT],
});
(0, vitest_1.expect)(tokens[types_1.ChainId.OPT]?.length).toBeGreaterThan(100);
if (tokens[types_1.ChainId.OPT]?.length) {
await loadAndCompareTokenAmounts(walletAddress, tokens[types_1.ChainId.OPT].slice(0, 150)); // chunk limit is 100
}
});
});