diff --git a/tests/RequestLinkEncoding.spec.ts b/tests/RequestLinkEncoding.spec.ts index 6f2a155..bd6ca0a 100644 --- a/tests/RequestLinkEncoding.spec.ts +++ b/tests/RequestLinkEncoding.spec.ts @@ -172,16 +172,17 @@ describe('RequestLinkEncoding', () => { // Note: the test samples will include tests for known contract addresses on the "wrong" chain and chain ids for // a mismatching currency, but that's fine as contracts and chain ids are prioritized over the passed currency // in createEthereumRequestLink and parseEthereumRequestLink. - for (const currency of [...ETHEREUM_SUPPORTED_NATIVE_CURRENCIES, Currency.USDC] as const) { + for (const currency of [...ETHEREUM_SUPPORTED_NATIVE_CURRENCIES, Currency.USDC, Currency.USDT] as const) { for (const chainId of [undefined, ...knownEthereumChainIds, customChainId]) { for (const contractAddress of [undefined, ...knownEthereumContracts, customContractAddress]) { - for (const amount of [undefined, `2.014e${currency !== Currency.USDC ? 18 : 6}`]) { + const decimals = currency === Currency.USDC || currency === Currency.USDT ? 6 : 18; + for (const amount of [undefined, `2.014e${decimals}`]) { for (const gasPrice of [undefined, '9e9']) { for (const gasLimit of [undefined, 100000]) { // Alternative, much simplified and less versatile implementation of // RequestLinkEncoding.createEthereumLink const effectiveContractAddress = contractAddress - // @ts-ignore only Currency.USDC is a defined index + // @ts-ignore only Currency.USDC and Currency.USDT are defined indices || (ETHEREUM_SUPPORTED_CONTRACTS[chainId] || {})[currency]; const [ contractChainId, @@ -222,18 +223,31 @@ describe('RequestLinkEncoding', () => { // Expected errors for disallowed inputs are tested in the next test // it('should throw error for Ethereum link creation due to bad arguments'): // - mismatching chainId and contractChainId - // - missing chain id and contract address for contract currencies (USDC) - // - missing contract address for custom chain id for contract currencies (USDC) + // - missing chain id and contract address for contract currencies (USDC, USDT) + // - missing contract address for custom chain id for contract currencies (USDC, + // USDT) if (!( (chainId && contractChainId && chainId !== contractChainId) - || (currency === Currency.USDC && !chainId && !contractAddress) - || (currency === Currency.USDC && chainId === customChainId && !contractAddress) + || ( + [Currency.USDC, Currency.USDT].includes(currency) + && !chainId + && !contractAddress + ) + || ( + [Currency.USDC, Currency.USDT].includes(currency) + && chainId === customChainId + && !contractAddress + ) )) throw e; } const parseResult = RequestLinkEncoding.parseRequestLink( link, - { currencies: [...ETHEREUM_SUPPORTED_NATIVE_CURRENCIES, Currency.USDC] }, + { currencies: [ + ...ETHEREUM_SUPPORTED_NATIVE_CURRENCIES, + Currency.USDC, + Currency.USDT, + ] }, ); // Link should only not be parseable when the chainId contradicts the expected chain id @@ -250,17 +264,22 @@ describe('RequestLinkEncoding', () => { ? Currency.MATIC : Currency.ETH; const expectedCurrency = contractCurrency || chainCurrency; - if ((!chainId && !contractAddress && currency !== Currency.USDC) || (contractAddress - // @ts-ignore only Currency.USDC is a defined index + if (( + !chainId + && !contractAddress + && currency !== Currency.USDC + && currency !== Currency.USDT + ) || (contractAddress + // @ts-ignore only Currency.USDC and Currency.USDT are defined indices ? contractAddress === ETHEREUM_SUPPORTED_CONTRACTS[contractChainId][currency] : chainId && currency === chainCurrency )) { // Cross-check our test implementation for when the parsed currency should match the // input currency, which should be the case when: // - no contract address and no chain id are set, because in that case they can not - // overrule the input currency. If it's a contract currency (USDC), this is an - // invalid currency though if no contract address and chain id are provided, see - // link creation error handling above. + // overrule the input currency. If it's a contract currency (USDC/USDT), this is + // an invalid currency though if no contract address and chain id are provided, + // see link creation error handling above. // - the contract address is set and matches what's defined for the input currency // and chainId in ETHEREUM_SUPPORTED_CONTRACTS. Note that if the contract address // is set, it has to be one of our known contracts at this point, because the @@ -333,7 +352,7 @@ describe('RequestLinkEncoding', () => { chainId: RequestLinkEncoding.EthereumChain.ETHEREUM_MAINNET, contractAddress: RequestLinkEncoding.ETHEREUM_SUPPORTED_CONTRACTS // eslint-disable-next-line no-unexpected-multiline - [RequestLinkEncoding.EthereumChain.ETHEREUM_GOERLI_TESTNET][Currency.USDC], + [RequestLinkEncoding.EthereumChain.ETHEREUM_SEPOLIA_TESTNET][Currency.USDC], })).toThrowError('chainId does not match chain id associated to contractAddress'); for (const option of ['amount', 'gasPrice', 'gasLimit', 'chainId']) {