Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: Add CCTP E2E tests to CI #1843

Merged
merged 102 commits into from
Sep 9, 2024
Merged
Show file tree
Hide file tree
Changes from 90 commits
Commits
Show all changes
102 commits
Select commit Hold shift + click to select a range
a10e181
test: Add CCTP E2E tests to CI
chrstph-dvx Aug 14, 2024
b69c875
Cleanup
chrstph-dvx Aug 14, 2024
98f820d
Set proper flag in synpress task
chrstph-dvx Aug 14, 2024
1b9b0f8
Merge branch 'master' into fs-729-add-cctp-e2e
chrstph-dvx Aug 14, 2024
068647a
Cleanup
chrstph-dvx Aug 14, 2024
f5579e4
Merge branch 'master' into fs-729-add-cctp-e2e
chrstph-dvx Aug 14, 2024
87d5076
Enable tests
chrstph-dvx Aug 14, 2024
d25098a
WIP
chrstph-dvx Aug 14, 2024
aa1a658
WIP
chrstph-dvx Aug 14, 2024
c800534
WIP
chrstph-dvx Aug 15, 2024
ebd0fe7
WIP
chrstph-dvx Aug 15, 2024
2fd494f
WIP
chrstph-dvx Aug 15, 2024
2dfa7f9
WIP
chrstph-dvx Aug 15, 2024
1b1f88e
WIP
chrstph-dvx Aug 15, 2024
4617247
WIP
chrstph-dvx Aug 15, 2024
beca089
WIP
chrstph-dvx Aug 15, 2024
b71132b
Update path
chrstph-dvx Aug 15, 2024
2d954e5
Move setup to depositCctp beforeEach
chrstph-dvx Aug 15, 2024
4665586
Merge branch 'master' into fs-729-add-cctp-e2e
chrstph-dvx Aug 15, 2024
c4dcec5
WIP
chrstph-dvx Aug 15, 2024
e533bbc
Separate funding transactions
chrstph-dvx Aug 15, 2024
4190b17
Update depositCctp spend
chrstph-dvx Aug 15, 2024
0ea6870
Run all tests
chrstph-dvx Aug 15, 2024
c4522ac
Update approveToken test
chrstph-dvx Aug 15, 2024
c15c6de
Add cy.confirmMetamaskDataSignatureRequest()
chrstph-dvx Aug 15, 2024
103adf0
Wrap with try catch
chrstph-dvx Aug 15, 2024
a56f574
Downgrade synpress
chrstph-dvx Aug 15, 2024
861adc5
Add back cy:command to logs
chrstph-dvx Aug 15, 2024
0cbdad3
Cleanup
chrstph-dvx Aug 19, 2024
fe1e06f
Manually approve spending
chrstph-dvx Aug 19, 2024
7e26873
WIP
chrstph-dvx Aug 19, 2024
6e8bcc6
Test approveToken
chrstph-dvx Aug 19, 2024
25fa4d4
WIP
chrstph-dvx Aug 19, 2024
1b316ce
Add confirmSpending command
chrstph-dvx Aug 19, 2024
4d47ca3
WIP
chrstph-dvx Aug 21, 2024
3cf381d
Create account per test
chrstph-dvx Aug 21, 2024
a54e1e6
Change browser
chrstph-dvx Aug 21, 2024
56e7cec
Update beforeEach setup
chrstph-dvx Aug 21, 2024
91ab959
Fix localWallet setup
chrstph-dvx Aug 21, 2024
ead5eb0
Cleanup
chrstph-dvx Aug 21, 2024
c270d21
Merge branch 'master' into fs-729-add-cctp-e2e
chrstph-dvx Aug 21, 2024
1be6714
Add timeout for deposit
chrstph-dvx Aug 21, 2024
f2c2dc7
Update gas check
chrstph-dvx Aug 21, 2024
973b841
Cleanup
chrstph-dvx Aug 21, 2024
c0e99df
Cleanup
chrstph-dvx Aug 21, 2024
6e14faa
Update gas for arb sepolia
chrstph-dvx Aug 21, 2024
833be8c
Restore cctp files
chrstph-dvx Aug 21, 2024
c2bbefb
Replace before with beforeEach
chrstph-dvx Aug 21, 2024
dca3362
Add custom sepolia
chrstph-dvx Aug 22, 2024
f7f5a06
Disable confirmation on depositCctp
chrstph-dvx Aug 22, 2024
2880a0e
Remove custom-sepolia reference
chrstph-dvx Aug 22, 2024
bdfb67e
Skip second deposit test
chrstph-dvx Aug 22, 2024
4d9f090
Add comment
chrstph-dvx Aug 22, 2024
779dbd8
Remove options in findTransactionInTransactionHistory
chrstph-dvx Aug 22, 2024
7643194
Update keystroke delay
chrstph-dvx Aug 22, 2024
d58aaa0
Merge branch 'master' into fs-729-add-cctp-e2e
chrstph-dvx Aug 22, 2024
c66adea
Review comments
chrstph-dvx Aug 26, 2024
557cd4d
test: Add CCTP synpress config
chrstph-dvx Aug 26, 2024
4334b65
Fix approve token test
chrstph-dvx Aug 26, 2024
ffb579b
Minimize diff
chrstph-dvx Aug 26, 2024
4b51541
Simplify funding
chrstph-dvx Aug 26, 2024
cb4af3b
Add changes in AdvancedSettigns
chrstph-dvx Aug 26, 2024
723a297
Add wait time before confirming transaction
chrstph-dvx Aug 26, 2024
af967ea
Add wait time before confirming transaction
chrstph-dvx Aug 26, 2024
3ede98b
Record video
chrstph-dvx Aug 27, 2024
6f1f65b
Confirm spending only once
chrstph-dvx Aug 27, 2024
316eb24
WIP
chrstph-dvx Aug 27, 2024
874e159
Update approved amount
chrstph-dvx Aug 27, 2024
baf317a
Merge branch 'master' into fs-729-add-cct-synpress-config
chrstph-dvx Aug 27, 2024
a57d136
Fix approval
chrstph-dvx Aug 27, 2024
38650ee
Merge branch 'fs-729-add-cct-synpress-config' into fs-729-add-cctp-e2e
chrstph-dvx Aug 27, 2024
ca34996
Cleanup
chrstph-dvx Aug 27, 2024
ff978ac
Merge branch 'master' into fs-729-add-cct-synpress-config
dewanshparashar Aug 29, 2024
e891ca4
Merge branch 'fs-729-add-cct-synpress-config' into fs-729-add-cctp-e2e
chrstph-dvx Aug 29, 2024
fc5a3ef
Combine both CCTP and normal tests
chrstph-dvx Aug 29, 2024
608f655
Run tests
chrstph-dvx Aug 29, 2024
99a0ec8
Format loaded files
chrstph-dvx Aug 29, 2024
9df8a58
Add logs
chrstph-dvx Aug 29, 2024
3343b91
WIP
chrstph-dvx Aug 29, 2024
820532b
Fix spending amount
chrstph-dvx Aug 29, 2024
22dc256
Merge branch 'master' into fs-729-add-cctp-e2e
chrstph-dvx Aug 29, 2024
dca4c3f
Merge branch 'master' into fs-729-add-cct-synpress-config
chrstph-dvx Aug 29, 2024
17afffd
Merge branch 'fs-729-add-cct-synpress-config' into fs-729-add-cctp-e2e
chrstph-dvx Aug 29, 2024
02f05ac
Merge branch 'master' into fs-729-add-cct-synpress-config
chrstph-dvx Sep 2, 2024
0176245
Move check
chrstph-dvx Sep 2, 2024
75afe34
Merge branch 'fs-729-add-cct-synpress-config' into fs-729-add-cctp-e2e
chrstph-dvx Sep 2, 2024
7004d59
Move FundUSDC
chrstph-dvx Sep 2, 2024
ce9bc3f
Update fundEth
chrstph-dvx Sep 2, 2024
628fa6d
Merge branch 'fs-729-add-cct-synpress-config' into fs-729-add-cctp-e2e
chrstph-dvx Sep 2, 2024
a97d852
Merge branch 'master' into fs-729-add-cctp-e2e
chrstph-dvx Sep 2, 2024
4f6bfd9
Add comments in approveToken
chrstph-dvx Sep 3, 2024
84549e0
Merge branch 'master' into fs-729-add-cctp-e2e
fionnachan Sep 3, 2024
7f787bc
Merge branch 'master' into fs-729-add-cctp-e2e
dewanshparashar Sep 3, 2024
da3983e
Remove options in findTransactionInTransactionHistory
chrstph-dvx Sep 3, 2024
89a8173
Simplify name of jobs, extract formatSpecfiles
chrstph-dvx Sep 3, 2024
5dc75dd
Fix typo
chrstph-dvx Sep 3, 2024
d5a8050
Correct path
chrstph-dvx Sep 3, 2024
cbfb7f4
Fix boolean in name
chrstph-dvx Sep 3, 2024
88474cb
Merge branch 'master' into fs-729-add-cctp-e2e
chrstph-dvx Sep 3, 2024
f1d60ab
Add wait before confirming transaction
chrstph-dvx Sep 3, 2024
21c6af5
Debug
chrstph-dvx Sep 3, 2024
734b147
Merge branch 'master' into fs-729-add-cctp-e2e
chrstph-dvx Sep 3, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 19 additions & 16 deletions .github/workflows/build-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -155,21 +155,24 @@ jobs:

- id: set-matrix
run: |
content=`cat packages/arb-token-bridge-ui/tests/e2e/specfiles.json | jq --compact-output .`
echo "e2eFiles=$content" >> $GITHUB_OUTPUT
e2e_content=$(cat packages/arb-token-bridge-ui/tests/e2e/specfiles.json | jq --compact-output .)
cctp_content=$(cat packages/arb-token-bridge-ui/tests/e2e/cctp.json | jq --compact-output .)

e2e_with_orbit=$(echo "$e2e_content" | jq '[.[] | {type: "regular", name: .name, file: .file, recordVideo: .recordVideo, orbitTest: "0"}, {type: "regular", name: .name, file: .file, recordVideo: .recordVideo, orbitTest: "1"}]' | jq . --compact-output)
cctp_formatted=$(echo "$cctp_content" | jq '[.[] | {type: "cctp", name: .name, file: .file, recordVideo: .recordVideo, orbitTest: null}]' | jq . --compact-output)

combined_content=$(echo "$e2e_with_orbit $cctp_formatted" | jq -s 'add' --compact-output)
echo "e2eFiles=$combined_content" >> $GITHUB_OUTPUT
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is way too chunky to read now

can you clean this up please?

we can also handle this in a separate file rather than inlining the processing script


# based on https://github.com/Synthetixio/synpress/blob/dev/.github/workflows/e2e_cypress-action.yml
test-e2e:
name: "Test E2E${{ matrix.orbit-test == '1' && ' with L3' || '' }} - ${{ matrix.tests.name }}"
name: "Test ${{ matrix.test.type == 'cctp' && 'E2E CCTP' || 'E2E' }}${{ matrix.test.type == 'regular' && matrix.test.orbitTest == '1' && ' with L3' || '' }} - ${{ matrix.test.name }}"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
name: "Test ${{ matrix.test.type == 'cctp' && 'E2E CCTP' || 'E2E' }}${{ matrix.test.type == 'regular' && matrix.test.orbitTest == '1' && ' with L3' || '' }} - ${{ matrix.test.name }}"
name: "Test E2E ${{ matrix.test.type == 'cctp' && 'CCTP' || matrix.test.orbitTest == '1' && 'with L3' }} - ${{ matrix.test.name }}"

does this work?

runs-on: ubuntu-latest
needs: [build, check-files, check-is-hotfix, load-e2e-files]
if: needs.check-files.outputs.run_tests == 'true' && needs.check-is-hotfix.outputs.is_hotfix == 'false'
strategy:
fail-fast: false # If one test fails, let the other tests run
matrix:
tests:
${{ fromJson(needs.load-e2e-files.outputs.matrix) }}
orbit-test: ['0', '1']
test: ${{ fromJson(needs.load-e2e-files.outputs.matrix) }}

steps:
- name: Free Disk Space (Ubuntu)
Expand Down Expand Up @@ -214,27 +217,29 @@ jobs:
DISPLAY: :0.0

- name: Run nitro testnode
if: matrix.test.type == 'regular'
uses: OffchainLabs/actions/run-nitro-test-node@a20a76172ce524832ac897bef2fa10a62ed81c29
with:
nitro-testnode-ref: aab133aceadec2e622f15fa438f6327e3165392d
l3-node: ${{ matrix.orbit-test == '1' }}
no-l3-token-bridge: ${{ matrix.orbit-test == '0' }}
l3-node: ${{ matrix.test.orbitTest == '1' }}
no-l3-token-bridge: ${{ matrix.test.orbitTest == '0' }}

- name: Run e2e tests via cypress-io/github-action
uses: cypress-io/github-action@8d3918616d8ac34caa2b49afc8b408b6a872a6f5 # [email protected]
with:
start: yarn start
command: ${{ matrix.orbit-test == '1' && 'yarn test:e2e:orbit --browser chromium' || 'yarn test:e2e --browser chromium' }}
command: ${{ matrix.test.type == 'cctp' && 'yarn test:e2e:cctp --browser chromium' || (matrix.test.orbitTest == '1' && 'yarn test:e2e:orbit --browser chromium' || 'yarn test:e2e --browser chromium') }}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
command: ${{ matrix.test.type == 'cctp' && 'yarn test:e2e:cctp --browser chromium' || (matrix.test.orbitTest == '1' && 'yarn test:e2e:orbit --browser chromium' || 'yarn test:e2e --browser chromium') }}
command: "yarn test:e2e${{ matrix.test.type == 'cctp' && ':cctp' || matrix.test.orbitTest == '1' && ':orbit' }} --browser chromium"

does this work?

wait-on: http://127.0.0.1:3000
wait-on-timeout: 120
spec: ./packages/arb-token-bridge-ui/tests/e2e/specs/*
env:
DISPLAY: :0.0
TEST_FILE: ${{ matrix.tests.file }}
TEST_FILE: ${{ matrix.test.file }}
SKIP_METAMASK_SETUP: true
CYPRESS_RECORD_VIDEO: ${{ matrix.tests.recordVideo }}
CYPRESS_RECORD_VIDEO: ${{ matrix.test.recordVideo }}
PRIVATE_KEY_CUSTOM: ${{ secrets.E2E_PRIVATE_KEY }}
PRIVATE_KEY_USER: ${{ secrets.E2E_PRIVATE_KEY_USER }}
PRIVATE_KEY_CCTP: ${{ secrets.E2E_PRIVATE_KEY_CCTP }}
NEXT_PUBLIC_IS_E2E_TEST: true
NEXT_PUBLIC_INFURA_KEY: ${{ secrets.NEXT_PUBLIC_INFURA_KEY }}
NEXT_PUBLIC_LOCAL_ETHEREUM_RPC_URL: http://127.0.0.1:8545
Expand All @@ -245,17 +250,16 @@ jobs:
uses: actions/upload-artifact@v4
if: always()
with:
name: e2e-artifacts-pull-request-${{ github.event.pull_request.number }}-commit-${{ github.sha }}-${{ matrix.tests.name }}
name: e2e-artifacts-pull-request-${{ github.event.pull_request.number }}-commit-${{ github.sha }}-${{ matrix.test.name }}-${{ matrix.test.type }}-${{ matrix.test.orbitTest }}
path: |
./packages/arb-token-bridge-ui/cypress/videos
./packages/arb-token-bridge-ui/cypress/screenshots
if-no-files-found: 'ignore'
continue-on-error: true

- name: Throw error if tests failed
if: steps.e2e-run.outputs.status == 'failed'
run: exit 1

test-e2e-success:
name: "Test E2E Success"
runs-on: ubuntu-latest
Expand All @@ -269,7 +273,6 @@ jobs:
- name: E2E Failed
if: needs.test-e2e.result != 'success' && needs.test-e2e.result != 'skipped'
run: exit 1

clean-up:
name: "Clean Up"
runs-on: ubuntu-latest
Expand Down
16 changes: 8 additions & 8 deletions packages/arb-token-bridge-ui/synpress.cctp.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,6 @@ if (typeof INFURA_KEY === 'undefined') {
throw new Error('Infura API key not provided')
}

const SEPOLIA_INFURA_RPC_URL = `https://sepolia.infura.io/v3/${INFURA_KEY}`
const sepoliaRpcUrl =
process.env.NEXT_PUBLIC_SEPOLIA_RPC_URL ?? SEPOLIA_INFURA_RPC_URL
const arbSepoliaRpcUrl = 'https://sepolia-rollup.arbitrum.io/rpc'

const sepoliaProvider = new StaticJsonRpcProvider(sepoliaRpcUrl)
const arbSepoliaProvider = new StaticJsonRpcProvider(arbSepoliaRpcUrl)

if (!process.env.PRIVATE_KEY_CCTP) {
throw new Error('PRIVATE_KEY_CCTP variable missing.')
}
Expand All @@ -67,6 +59,14 @@ if (!process.env.PRIVATE_KEY_USER) {
throw new Error('PRIVATE_KEY_USER variable missing.')
}

const SEPOLIA_INFURA_RPC_URL = `https://sepolia.infura.io/v3/${INFURA_KEY}`
const sepoliaRpcUrl =
process.env.NEXT_PUBLIC_SEPOLIA_RPC_URL ?? SEPOLIA_INFURA_RPC_URL
const arbSepoliaRpcUrl = 'https://sepolia-rollup.arbitrum.io/rpc'

const sepoliaProvider = new StaticJsonRpcProvider(sepoliaRpcUrl)
const arbSepoliaProvider = new StaticJsonRpcProvider(arbSepoliaRpcUrl)

Comment on lines +62 to +69
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nbd but why move them?

// Wallet funded on Sepolia and ArbSepolia with ETH and USDC
const localWallet = new Wallet(process.env.PRIVATE_KEY_CCTP)
// Generate a new wallet every time
Expand Down
6 changes: 4 additions & 2 deletions packages/arb-token-bridge-ui/tests/e2e/cctp.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
[
{
"name": "Deposit Cctp",
"file": "tests/e2e/specs/**/depositCctp.cy.{js,jsx,ts,tsx}"
"file": "tests/e2e/specs/**/depositCctp.cy.{js,jsx,ts,tsx}",
"recordVideo": false
},
{
"name": "Withdraw Cctp",
"file": "tests/e2e/specs/**/withdrawCctp.cy.{js,jsx,ts,tsx}"
"file": "tests/e2e/specs/**/withdrawCctp.cy.{js,jsx,ts,tsx}",
"recordVideo": false
}
]
145 changes: 67 additions & 78 deletions packages/arb-token-bridge-ui/tests/e2e/specs/depositCctp.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,9 @@ const confirmAndApproveCctpDeposit = () => {
.should('be.enabled')
.click()

cy.findByText(/I understand that I have to/).click()
cy.findByText(/I understand that I have to/)
.should('be.visible')
.click()
cy.findByRole('button', {
name: /Pay approval fee of/
}).click()
Expand All @@ -61,86 +63,73 @@ const confirmAndApproveCctpDeposit = () => {

describe('Deposit USDC through CCTP', () => {
// Happy Path
context('User has some USDC and is on L1', () => {
let USDCAmountToSend: number = 0

// log in to metamask before deposit
beforeEach(() => {
USDCAmountToSend = Number((Math.random() * 0.001).toFixed(6)) // randomize the amount to be sure that previous transactions are not checked in e2e

cy.fundUserWalletEth('parentChain')
cy.fundUserUsdcTestnet('parentChain')
cy.resetCctpAllowance('parentChain')

/// common code before all tests
cy.login({ networkType: 'parentChain', networkName: 'sepolia' })
context('should show L1 and L2 chains, and USD correctly', () => {
cy.findSourceChainButton('Sepolia')
cy.findDestinationChainButton('Arbitrum Sepolia')
cy.findSelectTokenButton('ETH')
})

cy.searchAndSelectToken({
tokenName: 'USDC',
tokenAddress: CommonAddress.Sepolia.USDC
})

context('should show summary', () => {
cy.typeAmount(USDCAmountToSend)
cy.findGasFeeSummary(zeroToLessThanOneETH)
cy.findGasFeeForChain('Sepolia', zeroToLessThanOneETH)
cy.findGasFeeForChain(
/You'll have to pay Arbitrum Sepolia gas fee upon claiming./i
)
})
})
const USDCAmountToSend = 0.0001

beforeEach(() => {
cy.login({ networkType: 'parentChain', networkName: 'sepolia' })
cy.findSourceChainButton('Sepolia')
cy.findDestinationChainButton('Arbitrum Sepolia')
cy.findSelectTokenButton('ETH')

it('should initiate depositing USDC to the same address through CCTP successfully', () => {
context('should show clickable deposit button', () => {
cy.findMoveFundsButton().click()
})

context('Should display CCTP modal', () => {
confirmAndApproveCctpDeposit()
cy.confirmMetamaskPermissionToSpend(USDCAmountToSend.toString())

// eslint-disable-next-line
cy.wait(40_000)
cy.confirmMetamaskTransaction()
cy.findTransactionInTransactionHistory({
duration: 'a minute',
amount: USDCAmountToSend,
symbol: 'USDC'
})
})
cy.searchAndSelectToken({
tokenName: 'USDC',
tokenAddress: CommonAddress.Sepolia.USDC
})

it('should initiate depositing USDC to custom destination address through CCTP successfully', () => {
context('should fill custom destination address successfully', () => {
cy.fillCustomDestinationAddress()
})

context('should click deposit successfully', () => {
cy.findMoveFundsButton().click()
})

context('Should display CCTP modal', () => {
confirmAndApproveCctpDeposit()
cy.confirmMetamaskPermissionToSpend(USDCAmountToSend.toString())

// eslint-disable-next-line
cy.wait(40_000)
cy.confirmMetamaskTransaction()
const txData = { amount: USDCAmountToSend, symbol: 'USDC' }
cy.findTransactionInTransactionHistory({
duration: 'a minute',
...txData
})
cy.openTransactionDetails(txData)
cy.findTransactionDetailsCustomDestinationAddress(
Cypress.env('CUSTOM_DESTINATION_ADDRESS')
)
})
cy.typeAmount(USDCAmountToSend)
cy.findGasFeeSummary(zeroToLessThanOneETH)
cy.findGasFeeForChain('Sepolia', zeroToLessThanOneETH)
cy.findGasFeeForChain(
/You'll have to pay Arbitrum Sepolia gas fee upon claiming./i
)
})

it('should initiate depositing USDC to the same address through CCTP successfully', () => {
cy.findMoveFundsButton().click()

confirmAndApproveCctpDeposit()
cy.confirmSpending(USDCAmountToSend.toString())

/**
* Currently synpress cy.confirmMetamaskTransaction doesn't work on Sepolia
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there no way to fix this currently? We are also skipping 1 test coz of it which isn't ideal.

* CCTP flow is tested in withdrawCctp.cy.ts
*/
// cy.wait(40_000)
// cy.confirmMetamaskTransaction(undefined)
// cy.findTransactionInTransactionHistory({
// duration: 'a minute',
// amount: USDCAmountToSend,
// symbol: 'USDC',
// options: {
// timeout: 60_000
// }
// })
})

/**
* Because the previous test doesn't send any transaction, allowance is still valid here.
* Skipping the test for now
*/
it.skip('should initiate depositing USDC to custom destination address through CCTP successfully', () => {
cy.fillCustomDestinationAddress()
cy.findMoveFundsButton().click()
confirmAndApproveCctpDeposit()

cy.confirmSpending(USDCAmountToSend.toString())

cy.wait(40_000)
cy.confirmMetamaskTransaction(undefined)
const txData = { amount: USDCAmountToSend, symbol: 'USDC' }
cy.findTransactionInTransactionHistory({
duration: 'a minute',
...txData,
options: {
timeout: 60_000
}
})
cy.openTransactionDetails(txData)
cy.findTransactionDetailsCustomDestinationAddress(
Cypress.env('CUSTOM_DESTINATION_ADDRESS')
)
})
})
Loading