90f72e05b9
* init refactor * upgrade to 3.2.6 and refactor more uses of chainid * cleaned up lock file * remove console log and add placeholder * use supported chains type for switch fn * allow passing of all chainIds to switcher * additional typecast * better casting solution * yarn.lock cleanup * prettier * better casting for rpc * prettier * deprecate no longer needed addresses * better isSupported checking * deprecate redundant fn * cleanup toSupportedChainId * address initial ocmments * pretier * includes testnet * remove unused export * merge conflicts * spread for mutable copy * explorer text * check is supported before activating chain * remove extra uses of mumbai * remove cast to MockChainId * retain var name supportedChainId * updated prettier * use t for explorer translation * use mockchainid for test * feat: Add Avalanche support (#6776) * init avax * add most avax props * add logo * correct subgraph * update avax blocksPerFetch * add square logo * upgrade ur sdk * version syntax * correct tokens * remove unused token * remove unused token * update token list and add coming soon to searchbar * add coming soon to token explore page * names to ids * cleaned up routing * usdc token * upgrade default token list * update SOR * upgrade SOR * merge conflicts * snowtrace * upgrade SOR * handle be avax support * temp hide avax * show pool positions * whole * spotprice update * not yet supported * BACKEND_SUPPORTED_CHAINS * add avax to BE not supported * update multicall blocks to 5 * add todo * updated prettier --------- Co-authored-by: Charles Bachmeier <charlie@genie.xyz> * be added avax token balances * validateUrlChainParam should return eth for backend unsupported chain * readonly * respond to comments --------- Co-authored-by: Charles Bachmeier <charlie@genie.xyz>
108 lines
4.8 KiB
TypeScript
108 lines
4.8 KiB
TypeScript
import { BigNumber } from '@ethersproject/bignumber'
|
|
import { ChainId } from '@uniswap/sdk-core'
|
|
|
|
import { DEFAULT_DEADLINE_FROM_NOW } from '../../../src/constants/misc'
|
|
import { UNI, USDC_MAINNET } from '../../../src/constants/tokens'
|
|
import { getBalance, getTestSelector } from '../../utils'
|
|
|
|
const UNI_MAINNET = UNI[ChainId.MAINNET]
|
|
|
|
describe('Swap errors', () => {
|
|
it('wallet rejection', () => {
|
|
cy.visit(`/swap?inputCurrency=ETH&outputCurrency=${USDC_MAINNET.address}`, { ethereum: 'hardhat' })
|
|
cy.hardhat().then((hardhat) => {
|
|
// Stub the wallet to reject any transaction.
|
|
cy.stub(hardhat.wallet, 'sendTransaction').log(false).rejects(new Error('user cancelled'))
|
|
|
|
// Enter amount to swap
|
|
cy.get('#swap-currency-output .token-amount-input').type('1').should('have.value', '1')
|
|
cy.get('#swap-currency-input .token-amount-input').should('not.have.value', '')
|
|
|
|
// Submit transaction
|
|
cy.get('#swap-button').click()
|
|
cy.contains('Confirm swap').click()
|
|
cy.wait('@eth_estimateGas')
|
|
|
|
// Verify rejection
|
|
cy.contains('Review swap')
|
|
cy.contains('Confirm swap')
|
|
})
|
|
})
|
|
|
|
it('transaction past deadline', () => {
|
|
cy.visit(`/swap?inputCurrency=ETH&outputCurrency=${USDC_MAINNET.address}`, { ethereum: 'hardhat' })
|
|
cy.hardhat({ automine: false })
|
|
getBalance(USDC_MAINNET).then((initialBalance) => {
|
|
// Enter amount to swap
|
|
cy.get('#swap-currency-output .token-amount-input').type('1').should('have.value', '1')
|
|
cy.get('#swap-currency-input .token-amount-input').should('not.have.value', '')
|
|
|
|
// Submit transaction
|
|
cy.get('#swap-button').click()
|
|
cy.contains('Confirm swap').click()
|
|
cy.wait('@eth_estimateGas').wait('@eth_sendRawTransaction').wait('@eth_getTransactionReceipt')
|
|
cy.contains('Transaction submitted')
|
|
cy.get(getTestSelector('confirmation-close-icon')).click()
|
|
cy.get(getTestSelector('web3-status-connected')).should('contain', '1 Pending')
|
|
|
|
// Mine transaction
|
|
cy.hardhat().then(async (hardhat) => {
|
|
// Remove the transaction from the mempool, so that it doesn't fail but it is past the deadline.
|
|
// This should result in it being removed from pending transactions, without a failure notificiation.
|
|
const transactions = await hardhat.send('eth_pendingTransactions', [])
|
|
await hardhat.send('hardhat_dropTransaction', [transactions[0].hash])
|
|
// Mine past the deadline
|
|
await hardhat.mine(1, DEFAULT_DEADLINE_FROM_NOW + 1)
|
|
})
|
|
cy.wait('@eth_getTransactionReceipt')
|
|
|
|
// Verify transaction did not occur
|
|
cy.get(getTestSelector('web3-status-connected')).should('not.contain', 'Pending')
|
|
cy.get(getTestSelector('popups')).should('not.contain', 'Swap failed')
|
|
cy.get('#swap-currency-output').contains(`Balance: ${initialBalance}`)
|
|
getBalance(USDC_MAINNET).should('eq', initialBalance)
|
|
})
|
|
})
|
|
|
|
it.skip('slippage failure', () => {
|
|
cy.visit(`/swap?inputCurrency=ETH&outputCurrency=${UNI_MAINNET.address}`, { ethereum: 'hardhat' })
|
|
cy.hardhat({ automine: false })
|
|
getBalance(USDC_MAINNET).then((initialBalance) => {
|
|
// Gas estimation fails for this transaction (that would normally fail), so we stub it.
|
|
cy.hardhat().then((hardhat) => {
|
|
const send = cy.stub(hardhat.provider, 'send').log(false)
|
|
send.withArgs('eth_estimateGas').resolves(BigNumber.from(2_000_000))
|
|
send.callThrough()
|
|
})
|
|
|
|
// Set slippage to a very low value.
|
|
cy.get(getTestSelector('open-settings-dialog-button')).click()
|
|
cy.get(getTestSelector('max-slippage-settings')).click()
|
|
cy.get(getTestSelector('slippage-input')).clear().type('0.01')
|
|
cy.get('body').click('topRight') // close modal
|
|
cy.get(getTestSelector('slippage-input')).should('not.exist')
|
|
|
|
// Submit 2 transactions
|
|
for (let i = 0; i < 2; i++) {
|
|
cy.get('#swap-currency-input .token-amount-input').type('200').should('have.value', '200')
|
|
cy.get('#swap-currency-output .token-amount-input').should('not.have.value', '')
|
|
cy.get('#swap-button').click()
|
|
cy.contains('Confirm swap').click()
|
|
cy.wait('@eth_sendRawTransaction').wait('@eth_getTransactionReceipt')
|
|
cy.contains('Transaction submitted')
|
|
cy.get(getTestSelector('confirmation-close-icon')).click()
|
|
}
|
|
cy.get(getTestSelector('web3-status-connected')).should('contain', '2 Pending')
|
|
|
|
// Mine transactions
|
|
cy.hardhat().then((hardhat) => hardhat.mine())
|
|
cy.wait('@eth_getTransactionReceipt')
|
|
|
|
// Verify transaction did not occur
|
|
cy.get(getTestSelector('web3-status-connected')).should('not.contain', 'Pending')
|
|
cy.get(getTestSelector('popups')).contains('Swap failed')
|
|
getBalance(UNI_MAINNET).should('eq', initialBalance)
|
|
})
|
|
})
|
|
})
|