Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@
- fixed: Wallet list rows now announce as a button to screen readers, instead of as an inert group that reads out but does not present itself as something to activate.
- fixed: The buy/sell amount field no longer reads "Amount undefined" while the app is still working out which wallet to use.
- fixed: Show the Monero Transaction Key of a send whose key never reached the transaction's saved metadata, by falling back to the key the wallet engine mirrors into `otherParams`. Covers sends made on 4.49.0 and later while the send path reported no key, on devices that still hold the original wallet cache.
- changed: Add maestro test selectors (testIDs) to Manage Tokens rows.
- changed: Add maestro test selectors (testIDs) to the Wallet Settings name input and Done button.
- changed: Add a maestro test selector (testID) to the split-wallet confirmation button.
- fixed: Force `NODE_ENV=test` in the Jest script so UI tests keep working when npm is invoked via Socket (Socket otherwise sets `NODE_ENV=development`, which makes react-native-gesture-handler treat Jest as a non-test env).
- fixed: Bitwave CSV exports now use ISO 8601 UTC timestamps, leave the fee columns blank so Bitwave does not double-count fees, and copy the description into the second custom metadata column.
- fixed: Bitwave account ids are no longer capitalized by the keyboard or padded with whitespace when entered, so exports import without hand-editing the account id.
Expand Down
3 changes: 2 additions & 1 deletion maestro/01-accounts/C000000-change-password.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,9 @@ tags:
- pressKey: Enter
- assertVisible: Invalid username or password
# Ensure new password works
- tapOn:
id: "passwordFormField.clearIcon"
- tapOn: Password
- eraseText
- inputText: ${SECOND_PASSWORD}
- pressKey: Enter

Expand Down
20 changes: 11 additions & 9 deletions maestro/01-accounts/C000001-switch-and-forget-account.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,9 @@ tags:
id: "sideMenuButton"
- tapOn: "Logout"
- tapOn: "Exit PIN"
- assertVisible: ${USERNAME}
- tapOn: "Username"
- assertVisible: ${USERNAME1}
- tapOn:
id: "usernameFormField"
- eraseText
- inputText: ${USERNAME2}
- pressKey: Enter
Expand All @@ -63,7 +64,8 @@ tags:
- tapOn: "Logout"
- tapOn: "Exit PIN"
- assertVisible: ${USERNAME2}
- tapOn: "Username"
- tapOn:
id: "usernameFormField"
- eraseText
- inputText: ${USERNAME3}
- pressKey: Enter
Expand All @@ -79,7 +81,7 @@ tags:
id: "sideMenuButton"
- tapOn:
id: "downArrow"
- assertVisible: ${USERNAME}
- assertVisible: ${USERNAME1}
- assertVisible: ${USERNAME2}
- assertVisible: ${USERNAME3}

Expand All @@ -89,22 +91,22 @@ tags:
index: 0
- assertVisible: ${".*Forget Account.*"}
- tapOn: "Cancel"
- assertVisible: ${USERNAME}
- assertVisible: ${USERNAME1}
- assertVisible: ${USERNAME2}
- assertVisible: ${USERNAME3}
# Delete first account
- tapOn:
id: "sideMenuClose"
index: 1
- assertVisible: ${".*" + USERNAME + ".*"} # Username in confirmation modal
- assertVisible: ${".*" + USERNAME1 + ".*"} # Username in confirmation modal
- tapOn: "Forget"
- assertNotVisible: ${USERNAME}
- assertNotVisible: ${USERNAME1}
- tapOn: ${USERNAME2}

# View, forget, switch accounts from PIN login screen
- assertVisible: ${USERNAME2}
- tapOn: ${USERNAME2}
- assertNotVisible: ${USERNAME}
- assertNotVisible: ${USERNAME1}
- assertVisible: ${USERNAME2}
- assertVisible: ${USERNAME3}
- tapOn:
Expand Down Expand Up @@ -153,4 +155,4 @@ tags:
- assertNotVisible:
id: "userDropdownIcon"

- stopApp
- stopApp
54 changes: 30 additions & 24 deletions maestro/03-login/C190284-2fa-01.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ tags:
visible: "Username and password are correct. This device cannot log in because\
\ it does not have the right 2-factor code."
timeout: 15000
- assertVisible: "Enter Backup Code"
- tapOn: "Enter Backup Code"
- assertVisible: "Enter 2FA code"
- tapOn: "Enter 2FA code"
- inputText: ${MAESTRO_EDGE_2FA_BACKUP_CODE}
- assertVisible: "Submit"

Expand All @@ -38,49 +38,55 @@ tags:

# If the request notifications modal show with "Security is Our Priority"
# Cancel it
- extendedWaitUntil:
visible: "Security is Our Priority"
timeout: 20000
optional: true
- tapOn:
text: "Cancel"
optional: true

# If the 2FA warning shows up for another device, deny it
- tapOn:
text: "Deny"
optional: true
- tapOn:
text: "Deny All"
# Best effort: deny one request, deny all remaining requests, then deny one
# final request.
- extendedWaitUntil:
visible: "A new device would like to log in to your account"
timeout: 30000
optional: true
- tapOn:
text: "Deny"
id: "securityAlertDenyButton"
optional: true
- tapOn:
text: "Deny All"
- extendedWaitUntil:
notVisible:
id: "securityAlertDenyButton.spinner"
timeout: 20000
optional: true
- tapOn:
text: "SKIP"
id: "securityAlertDenyAllButton"
optional: true
- tapOn:
text: "SKIP"
optional: true

# If the request notifications modal show with "Security is Our Priority"
# Cancel it
- extendedWaitUntil:
visible: "Security is Our Priority"
notVisible:
id: "securityAlertDenyAllButton.spinner"
timeout: 20000
optional: true
- tapOn:
text: "Cancel"
id: "securityAlertDenyButton"
optional: true

# If the survey modal shows, dismiss it
- extendedWaitUntil:
visible: "How Did You Discover Edge?"
notVisible:
id: "securityAlertDenyButton.spinner"
timeout: 20000
optional: true
- tapOn:
text: "Dismiss"
text: "SKIP"
optional: true
- tapOn:
text: "SKIP"
optional: true

# Dismiss any remaining common modals and notifications.
- runFlow:
file: ../common/dismiss-modals.yaml

- assertVisible: "Assets"
- tapOn: "Assets"
- assertVisible: "Wallets"
Expand Down
7 changes: 4 additions & 3 deletions maestro/03-login/C999002-pin-login.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,18 @@ tags:

- tapOn: "Assets"
- extendedWaitUntil:
visible: FIRO
visible: "FIRO.*"
timeout: 15000
# If too fast, app won't save state of being on "Assets" scene
- tapOn: FIRO
- tapOn: "FIRO.*"

- stopApp
- launchApp

- extendedWaitUntil:
visible: ${MAESTRO_EDGE_UTXO_USERNAME}
timeout: 15000
- waitForAnimationToEnd

- tapOn: ${MAESTRO_EDGE_UTXO_PIN_1}
- tapOn: ${MAESTRO_EDGE_UTXO_PIN_2}
Expand All @@ -49,7 +50,7 @@ tags:
optional: true

- extendedWaitUntil:
visible: FIRO
visible: "FIRO.*"
timeout: 15000

- stopApp
6 changes: 3 additions & 3 deletions maestro/07-wallets/C000018-master-private-key.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ tags:

# View master private key for new wallet
- tapOn: Assets
- longPressOn: My Bitcoin
- longPressOn: ".*My Bitcoin"
- tapOn: ".*Master Private Key"
- tapOn: Enter your password
- inputText: ${output.newAccountPassword}
Expand All @@ -47,10 +47,10 @@ tags:

# Locate new wallet and check seed phrase
- scrollUntilVisible:
element: ${WALLET_NAME}
element: ${".*" + WALLET_NAME}
centerElement: true
direction: DOWN
- longPressOn: ${WALLET_NAME}
- longPressOn: ${".*" + WALLET_NAME}
- tapOn: ".*Master Private Key"

# Password Modal
Expand Down
2 changes: 1 addition & 1 deletion maestro/07-wallets/C000029a-migrate-wallets.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ env:
IMPORT_SEED: ${MAESTRO_EDGE_MAX_IMPORT_SEED}
tags:
- android
- C000029
- C000029a
---
- runFlow:
file: ../common/launch-cleared.yaml
Expand Down
38 changes: 19 additions & 19 deletions maestro/07-wallets/C000032-archive-and-restore-wallets.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,38 +22,38 @@ tags:


# Archive wallets
- evalScript: ${var walletNames = ["My Bitcoin", "My Bitcoin Cash", "My Dash", "My Ether", "My Litecoin"]}
- evalScript: ${var index = 0}
- evalScript: ${output.walletNames = ["My Bitcoin", "My Bitcoin Cash", "My Dash", "My Ether", "My Litecoin"]}
- evalScript: ${output.index = 0}
- tapOn: Assets
- repeat:
times: ${walletNames.length - 1}
times: ${output.walletNames.length - 1}
commands:
- tapOn: ${walletNames[index]}
- tapOn: ${".*" + output.walletNames[output.index]}
- tapOn:
id: gearIcon
- tapOn: ".*Archive Wallet"
# Modal
- assertVisible: "Archive Wallet"
- assertVisible: ${"Are you sure you want to archive " + walletNames[index] + "?"}
- assertVisible: ${"Are you sure you want to archive " + output.walletNames[output.index] + "?"}
- assertVisible: Cancel
# Check if "My Ether" wallet
- runFlow:
when:
true: ${walletNames[index] == "My Ether"}
true: ${output.walletNames[output.index] == "My Ether"}
commands:
- assertVisible: "Archiving this wallet will also archive any enabled tokens for this wallet."
label: "Extra message for Ether wallets"
# Archive
- tapOn: Archive
- assertNotVisible: ${walletNames[index]}
- assertNotVisible: ${".*" + output.walletNames[output.index]}

- evalScript: ${index++}
- evalScript: ${output.index++}
label: "Archive all wallets except last"

# Unable to archive last wallet
- runFlow:
commands:
- longPressOn: ${walletNames[index]}
- longPressOn: ${".*" + output.walletNames[output.index]}
- tapOn: ".*Archive Wallet"
- assertVisible: "Cannot Archive Wallet"
- assertVisible: "At least one wallet required in this account."
Expand All @@ -80,13 +80,13 @@ tags:
- assertVisible: "Restore Wallets"

# Toggle on wallets to restore
- evalScript: ${var walletCurrencyCodes = ["BTC", "BCH", "DASH", "ETH", "LTC"]}
- evalScript: ${var index = 0}
- evalScript: ${output.walletCurrencyCodes = ["BTC", "BCH", "DASH", "ETH", "LTC"]}
- evalScript: ${output.index = 0}
- repeat:
times: ${walletCurrencyCodes.length - 1}
times: ${output.walletCurrencyCodes.length - 1}
commands:
- tapOn: ${walletCurrencyCodes[index]}
- evalScript: ${index++}
- tapOn: ${output.walletCurrencyCodes[output.index]}
- evalScript: ${output.index++}
- tapOn: Restore

# Modal
Expand All @@ -97,14 +97,14 @@ tags:

# Confirm restored and returned to assets screen
- assertVisible: "Total Balance.*"
- evalScript: ${var index = 0}
- evalScript: ${output.index = 0}
- repeat:
times: ${walletNames.length}
times: ${output.walletNames.length}
commands:
- scrollUntilVisible:
element: ${walletNames[index]}
element: ${".*" + output.walletNames[output.index]}
direction: DOWN
- evalScript: ${index++}
- evalScript: ${output.index++}

# Ensure restore is not tappable when none left to restore
- tapOn:
Expand All @@ -116,4 +116,4 @@ tags:
centerElement: true
- tapOn: Restore Wallets
# Search bar appears on next scene only if wallets exist to restore
- assertNotVisible: Search Wallets
- assertNotVisible: Search Wallets
18 changes: 9 additions & 9 deletions maestro/07-wallets/C000033-pause-wallets.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,14 @@ tags:
label: "Import BCH wallet"
# Find new wallet
- scrollUntilVisible:
element: ${WALLET_NAME}
element: ${".*" + WALLET_NAME}
centerElement: true
direction: "DOWN"
# Ensure synced to show balance
- extendedWaitUntil:
visible: ${BALANCE}
timeout: 20000
- longPressOn: ${WALLET_NAME}
- longPressOn: ${".*" + WALLET_NAME}

# Test pause wallet
- tapOn:
Expand All @@ -47,12 +47,12 @@ tags:
platform: iOS
commands:
- assertVisible: "This wallet will no longer synchronize with the blockchain and will not detect new transactions or balance changes"
- assertVisible: "Wallet Paused"
- assertVisible: ".*Wallet Paused"

# Wait an arbitrary amount of time to ensure state is saved
# TODO: Reduce wait period if possible
- extendedWaitUntil:
notVisible: "Wallet Paused"
notVisible: ".*Wallet Paused"
timeout: 45000
optional: true # Expected to fail
label: "⏰ Waiting 45 seconds to ensure account state is saved"
Expand All @@ -71,10 +71,10 @@ tags:
# Wait an arbitrary amount of time to ensure wallet is paused and does not sync to show balance
- tapOn: Assets
- scrollUntilVisible:
element: ${WALLET_NAME}
element: ".*Wallet Paused"
centerElement: true
direction: "DOWN"
- assertVisible: "Wallet Paused"
- assertVisible: ${".*" + WALLET_NAME + ".*Wallet Paused"}
- extendedWaitUntil:
visible: ${BALANCE}
timeout: 10000
Expand All @@ -83,7 +83,7 @@ tags:
- assertNotVisible: ${BALANCE}

# Wallet should sync once you tap into it
- tapOn: ${WALLET_NAME}
- tapOn: ".*Wallet Paused"
- extendedWaitUntil:
visible: ${BALANCE}
timeout: 15000
Expand All @@ -97,6 +97,6 @@ tags:
optional: true # Disappears too quick for Android
- tapOn:
id: "chevronBack"
- assertNotVisible: "Wallet Paused"
- assertNotVisible: ".*Wallet Paused"

- stopApp
- stopApp
Loading
Loading