From 4c9e37c205b5b35de8659a46461059de5e50f5f6 Mon Sep 17 00:00:00 2001 From: Czarek Nakamoto <cyjan@mrcyjanek.net> Date: Mon, 3 Feb 2025 15:42:16 +0100 Subject: [PATCH 1/6] fix tests not working in latest main [skip slack] # Conflicts: # lib/src/screens/wallet_keys/wallet_keys_page.dart --- .../robots/wallet_keys_robot.dart | 42 +++++++++++++------ .../screens/wallet_keys/wallet_keys_page.dart | 6 +-- 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/integration_test/robots/wallet_keys_robot.dart b/integration_test/robots/wallet_keys_robot.dart index 189929737..38a605b9d 100644 --- a/integration_test/robots/wallet_keys_robot.dart +++ b/integration_test/robots/wallet_keys_robot.dart @@ -70,7 +70,10 @@ class WalletKeysAndSeedPageRobot { if (walletType == WalletType.bitcoin || walletType == WalletType.litecoin || walletType == WalletType.bitcoinCash) { - commonTestCases.hasText(appStore.wallet!.seed!); + final seedWords = appStore.wallet!.seed!.split(" "); + for (var seedWord in seedWords) { + commonTestCases.hasTextAtLestOnce(seedWord); + } tester.printToConsole('$walletName wallet has seeds properly displayed'); } @@ -78,10 +81,14 @@ class WalletKeysAndSeedPageRobot { walletType == WalletType.solana || walletType == WalletType.tron) { if (hasSeed) { - commonTestCases.hasText(appStore.wallet!.seed!); + final seedWords = appStore.wallet!.seed!.split(" "); + for (var seedWord in seedWords) { + commonTestCases.hasTextAtLestOnce(seedWord); + } tester.printToConsole('$walletName wallet has seeds properly displayed'); } if (hasPrivateKey) { + await commonTestCases.tapItemByKey('wallet_keys_page_keys'); commonTestCases.hasText(appStore.wallet!.privateKey!); tester.printToConsole('$walletName wallet has private key properly displayed'); } @@ -89,14 +96,19 @@ class WalletKeysAndSeedPageRobot { if (walletType == WalletType.nano || walletType == WalletType.banano) { if (hasSeed) { - commonTestCases.hasText(appStore.wallet!.seed!); + final seedWords = appStore.wallet!.seed!.split(" "); + for (var seedWord in seedWords) { + commonTestCases.hasTextAtLestOnce(seedWord); + } tester.printToConsole('$walletName wallet has seeds properly displayed'); } if (hasHexSeed) { + await commonTestCases.tapItemByKey('wallet_keys_page_keys'); commonTestCases.hasText(appStore.wallet!.hexSeed!); tester.printToConsole('$walletName wallet has hexSeed properly displayed'); } if (hasPrivateKey) { + await commonTestCases.tapItemByKey('wallet_keys_page_keys'); commonTestCases.hasText(appStore.wallet!.privateKey!); tester.printToConsole('$walletName wallet has private key properly displayed'); } @@ -129,35 +141,39 @@ class WalletKeysAndSeedPageRobot { final hasSeedLegacy = Polyseed.isValidSeed(seed); if (hasPublicSpendKey) { + await commonTestCases.tapItemByKey('wallet_keys_page_keys'); commonTestCases.hasText(keys.publicSpendKey); tester.printToConsole('$walletName wallet has public spend key properly displayed'); } if (hasPrivateSpendKey) { + await commonTestCases.tapItemByKey('wallet_keys_page_keys'); commonTestCases.hasText(keys.privateSpendKey); tester.printToConsole('$walletName wallet has private spend key properly displayed'); } if (hasPublicViewKey) { + await commonTestCases.tapItemByKey('wallet_keys_page_keys'); commonTestCases.hasText(keys.publicViewKey); tester.printToConsole('$walletName wallet has public view key properly displayed'); } if (hasPrivateViewKey) { + await commonTestCases.tapItemByKey('wallet_keys_page_keys'); commonTestCases.hasText(keys.privateViewKey); tester.printToConsole('$walletName wallet has private view key properly displayed'); } if (hasSeeds) { - await commonTestCases.dragUntilVisible( - '${walletName}_wallet_seed_item_key', - 'wallet_keys_page_credentials_list_view_key', - ); - commonTestCases.hasText(seed); + await commonTestCases.tapItemByKey('wallet_keys_page_seed'); + final seedWords = seed.split(" "); + for (var seedWord in seedWords) { + commonTestCases.hasTextAtLestOnce(seedWord); + } tester.printToConsole('$walletName wallet has seeds properly displayed'); } if (hasSeedLegacy) { - await commonTestCases.dragUntilVisible( - '${walletName}_wallet_seed_legacy_item_key', - 'wallet_keys_page_credentials_list_view_key', - ); - commonTestCases.hasText(legacySeed); + await commonTestCases.tapItemByKey('wallet_keys_page_seed_legacy'); + final seedWords = legacySeed.split(" "); + for (var seedWord in seedWords) { + commonTestCases.hasTextAtLestOnce(seedWord); + } tester.printToConsole('$walletName wallet has legacy seeds properly displayed'); } } diff --git a/lib/src/screens/wallet_keys/wallet_keys_page.dart b/lib/src/screens/wallet_keys/wallet_keys_page.dart index a8a35096a..e461add48 100644 --- a/lib/src/screens/wallet_keys/wallet_keys_page.dart +++ b/lib/src/screens/wallet_keys/wallet_keys_page.dart @@ -124,9 +124,9 @@ class _WalletKeysPageBodyState extends State<WalletKeysPageBody> dividerColor: Colors.transparent, padding: EdgeInsets.zero, tabs: [ - Tab(text: S.of(context).widgets_seed), - if (showKeyTab) Tab(text: S.of(context).keys), - if (showLegacySeedTab) Tab(text: S.of(context).legacy), + Tab(text: S.of(context).widgets_seed, key: ValueKey('wallet_keys_page_seed')), + if (showKeyTab) Tab(text: S.of(context).keys, key: ValueKey('wallet_keys_page_keys'),), + if (showLegacySeedTab) Tab(text: S.of(context).legacy, key: ValueKey('wallet_keys_page_seed_legacy')), ], ), ), From 5bfa16670c79ae4d61affb4c28bcec4b3c188553 Mon Sep 17 00:00:00 2001 From: Czarek Nakamoto <cyjan@mrcyjanek.net> Date: Mon, 3 Feb 2025 16:33:07 +0100 Subject: [PATCH 2/6] add zano seed [skip slack] [run tests] --- .github/workflows/pr_test_build_android.yml | 1 + .github/workflows/pr_test_build_linux.yml | 1 + integration_test/components/common_test_flows.dart | 8 ++++++-- .../restore_wallet_through_seeds_flow_test.dart | 10 +++++++++- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pr_test_build_android.yml b/.github/workflows/pr_test_build_android.yml index fbd40a4ef..7b22ea680 100644 --- a/.github/workflows/pr_test_build_android.yml +++ b/.github/workflows/pr_test_build_android.yml @@ -158,6 +158,7 @@ jobs: echo "const tronTestWalletSeeds = '${{ secrets.TRON_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart echo "const nanoTestWalletSeeds = '${{ secrets.NANO_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart echo "const wowneroTestWalletSeeds = '${{ secrets.WOWNERO_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart + echo "const zanoTestWalletSeeds = '${{ secrets.ZANO_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart echo "const moneroTestWalletReceiveAddress = '${{ secrets.MONERO_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart echo "const bitcoinTestWalletReceiveAddress = '${{ secrets.BITCOIN_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart echo "const ethereumTestWalletReceiveAddress = '${{ secrets.ETHEREUM_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart diff --git a/.github/workflows/pr_test_build_linux.yml b/.github/workflows/pr_test_build_linux.yml index a9d8085b6..a36ccb41a 100644 --- a/.github/workflows/pr_test_build_linux.yml +++ b/.github/workflows/pr_test_build_linux.yml @@ -154,6 +154,7 @@ jobs: echo "const tronTestWalletSeeds = '${{ secrets.TRON_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart echo "const nanoTestWalletSeeds = '${{ secrets.NANO_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart echo "const wowneroTestWalletSeeds = '${{ secrets.WOWNERO_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart + echo "const zanoTestWalletSeeds = '${{ secrets.ZANO_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart echo "const moneroTestWalletReceiveAddress = '${{ secrets.MONERO_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart echo "const bitcoinTestWalletReceiveAddress = '${{ secrets.BITCOIN_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart echo "const ethereumTestWalletReceiveAddress = '${{ secrets.ETHEREUM_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart diff --git a/integration_test/components/common_test_flows.dart b/integration_test/components/common_test_flows.dart index c9e605339..094665abb 100644 --- a/integration_test/components/common_test_flows.dart +++ b/integration_test/components/common_test_flows.dart @@ -336,8 +336,12 @@ class CommonTestFlows { return secrets.nanoTestWalletSeeds; case WalletType.wownero: return secrets.wowneroTestWalletSeeds; - default: - return ''; + case WalletType.zano: + return secrets.zanoTestWalletSeeds; + case WalletType.none: + case WalletType.haven: + case WalletType.banano: + throw Exception("Unable to get seeds for ${walletType}"); } } diff --git a/integration_test/test_suites/restore_wallet_through_seeds_flow_test.dart b/integration_test/test_suites/restore_wallet_through_seeds_flow_test.dart index 0589d16ba..9c8242e25 100644 --- a/integration_test/test_suites/restore_wallet_through_seeds_flow_test.dart +++ b/integration_test/test_suites/restore_wallet_through_seeds_flow_test.dart @@ -44,12 +44,20 @@ void main() { if (walletType == WalletType.solana) { continue; } + final seed = commonTestFlows.getWalletSeedsByWalletType(walletType); + if (seed.isEmpty) { + printV("----------------------------"); + printV("- Skipped wallet: ${walletType}"); + printV("- Make sure to add seed to secrets"); + printV("----------------------------"); + continue; + } await commonTestFlows.switchToWalletMenuFromDashboardPage(); await commonTestFlows.restoreWalletFromWalletMenu( walletType, - commonTestFlows.getWalletSeedsByWalletType(walletType), + seed, ); await dashboardPageRobot.confirmWalletTypeIsDisplayedCorrectly(walletType); From dda2927e21f9286ae04a02bd839586e15e1b466a Mon Sep 17 00:00:00 2001 From: Czarek Nakamoto <cyjan@mrcyjanek.net> Date: Mon, 3 Feb 2025 17:48:25 +0100 Subject: [PATCH 3/6] disable exchange_flow_test.dart [run tests] [skip slack] --- .github/workflows/pr_test_build_linux.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/pr_test_build_linux.yml b/.github/workflows/pr_test_build_linux.yml index a36ccb41a..b540601fa 100644 --- a/.github/workflows/pr_test_build_linux.yml +++ b/.github/workflows/pr_test_build_linux.yml @@ -270,13 +270,13 @@ jobs: xmessage -timeout 30 "create_wallet_flow_test" & rm -rf ~/.local/share/com.example.cake_wallet/ ~/Documents/cake_wallet/ ~/cake_wallet exec timeout --signal=SIGKILL 900 flutter drive --driver=test_driver/integration_test.dart --target=integration_test/test_suites/create_wallet_flow_test.dart - - name: Test [exchange_flow_test] - if: ${{ contains(env.message, 'run tests') }} - timeout-minutes: 20 - run: | - xmessage -timeout 30 "exchange_flow_test" & - rm -rf ~/.local/share/com.example.cake_wallet/ ~/Documents/cake_wallet/ ~/cake_wallet - exec timeout --signal=SIGKILL 900 flutter drive --driver=test_driver/integration_test.dart --target=integration_test/test_suites/exchange_flow_test.dart + # - name: Test [exchange_flow_test] + # if: ${{ contains(env.message, 'run tests') }} + # timeout-minutes: 20 + # run: | + # xmessage -timeout 30 "exchange_flow_test" & + # rm -rf ~/.local/share/com.example.cake_wallet/ ~/Documents/cake_wallet/ ~/cake_wallet + # exec timeout --signal=SIGKILL 900 flutter drive --driver=test_driver/integration_test.dart --target=integration_test/test_suites/exchange_flow_test.dart - name: Test [restore_wallet_through_seeds_flow_test] if: ${{ contains(env.message, 'run tests') }} timeout-minutes: 20 From 1396e97a138587f83bf458d0f71eb294c52bf6dd Mon Sep 17 00:00:00 2001 From: Czarek Nakamoto <cyjan@mrcyjanek.net> Date: Wed, 12 Feb 2025 18:06:56 +0100 Subject: [PATCH 4/6] Run tests on linux always (since nobody ever used [run tests]) --- .github/workflows/pr_test_build_linux.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/pr_test_build_linux.yml b/.github/workflows/pr_test_build_linux.yml index b540601fa..2e0f290b7 100644 --- a/.github/workflows/pr_test_build_linux.yml +++ b/.github/workflows/pr_test_build_linux.yml @@ -241,7 +241,7 @@ jobs: name: cakewallet_linux - name: Prepare virtual desktop - if: ${{ contains(env.message, 'run tests') }} + if: ${{ !contains(env.message, 'skip tests') }} run: | nohup Xvfb :99 -screen 0 720x1280x16 & echo DISPLAY=:99 | sudo tee -a $GITHUB_ENV @@ -257,28 +257,28 @@ jobs: # isn't much in those wallets anyway, we still wouldn't like to leak it to anyone who is able to access github. - name: Test [confirm_seeds_flow_test] - if: ${{ contains(env.message, 'run tests') }} + if: ${{ !contains(env.message, 'skip tests') }} timeout-minutes: 20 run: | xmessage -timeout 30 "confirm_seeds_flow_test" & rm -rf ~/.local/share/com.example.cake_wallet/ ~/Documents/cake_wallet/ ~/cake_wallet exec timeout --signal=SIGKILL 900 flutter drive --driver=test_driver/integration_test.dart --target=integration_test/test_suites/confirm_seeds_flow_test.dart - name: Test [create_wallet_flow_test] - if: ${{ contains(env.message, 'run tests') }} + if: ${{ !contains(env.message, 'skip tests') }} timeout-minutes: 20 run: | xmessage -timeout 30 "create_wallet_flow_test" & rm -rf ~/.local/share/com.example.cake_wallet/ ~/Documents/cake_wallet/ ~/cake_wallet exec timeout --signal=SIGKILL 900 flutter drive --driver=test_driver/integration_test.dart --target=integration_test/test_suites/create_wallet_flow_test.dart # - name: Test [exchange_flow_test] - # if: ${{ contains(env.message, 'run tests') }} + # if: ${{ !contains(env.message, 'skip tests') }} # timeout-minutes: 20 # run: | # xmessage -timeout 30 "exchange_flow_test" & # rm -rf ~/.local/share/com.example.cake_wallet/ ~/Documents/cake_wallet/ ~/cake_wallet # exec timeout --signal=SIGKILL 900 flutter drive --driver=test_driver/integration_test.dart --target=integration_test/test_suites/exchange_flow_test.dart - name: Test [restore_wallet_through_seeds_flow_test] - if: ${{ contains(env.message, 'run tests') }} + if: ${{ !contains(env.message, 'skip tests') }} timeout-minutes: 20 run: | xmessage -timeout 30 "restore_wallet_through_seeds_flow_test" & From 688170752da418cec2e23964137265a0784fc475 Mon Sep 17 00:00:00 2001 From: Czarek Nakamoto <cyjan@mrcyjanek.net> Date: Wed, 12 Feb 2025 20:21:01 +0100 Subject: [PATCH 5/6] fix tests after ui updates --- integration_test/components/common_test_flows.dart | 3 ++- integration_test/robots/dashboard_menu_widget_robot.dart | 2 +- integration_test/robots/wallet_keys_robot.dart | 1 + integration_test/robots/welcome_page_robot.dart | 5 +++++ 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/integration_test/components/common_test_flows.dart b/integration_test/components/common_test_flows.dart index 094665abb..145f85670 100644 --- a/integration_test/components/common_test_flows.dart +++ b/integration_test/components/common_test_flows.dart @@ -112,7 +112,6 @@ class CommonTestFlows { //* ========== Handles switching to wallet list or menu from dashboard =============== Future<void> switchToWalletMenuFromDashboardPage() async { _tester.printToConsole('Switching to Wallet Menu'); - await _dashboardPageRobot.openDrawerMenu(); await _dashboardPageRobot.dashboardMenuWidgetRobot.navigateToWalletMenu(); } @@ -204,6 +203,8 @@ class CommonTestFlows { await _welcomePageRobot.navigateToCreateNewWalletPage(); await _selectWalletTypeForWallet(walletTypeToCreate); + + await _welcomePageRobot.tapNewSingleSeed(); } Future<void> _welcomeToRestoreFromSeedsOrKeysPath( diff --git a/integration_test/robots/dashboard_menu_widget_robot.dart b/integration_test/robots/dashboard_menu_widget_robot.dart index f48033dda..13a897ccc 100644 --- a/integration_test/robots/dashboard_menu_widget_robot.dart +++ b/integration_test/robots/dashboard_menu_widget_robot.dart @@ -26,7 +26,7 @@ class DashboardMenuWidgetRobot { } Future<void> navigateToWalletMenu() async { - await commonTestCases.tapItemByKey('dashboard_page_menu_widget_wallet_menu_button_key'); + await commonTestCases.tapItemByKey('dashboard_page_Wallets_action_button_key'); await commonTestCases.defaultSleepTime(); } diff --git a/integration_test/robots/wallet_keys_robot.dart b/integration_test/robots/wallet_keys_robot.dart index 38a605b9d..04d62b440 100644 --- a/integration_test/robots/wallet_keys_robot.dart +++ b/integration_test/robots/wallet_keys_robot.dart @@ -182,5 +182,6 @@ class WalletKeysAndSeedPageRobot { tester.printToConsole('Going back to dashboard from credentials page'); await commonTestCases.goBack(); await commonTestCases.goBack(); + await commonTestCases.goBack(); } } diff --git a/integration_test/robots/welcome_page_robot.dart b/integration_test/robots/welcome_page_robot.dart index 510f63556..e935db757 100644 --- a/integration_test/robots/welcome_page_robot.dart +++ b/integration_test/robots/welcome_page_robot.dart @@ -28,6 +28,11 @@ class WelcomePageRobot { await commonTestCases.defaultSleepTime(); } + Future<void> tapNewSingleSeed() async { + await commonTestCases.tapItemByKey('wallet_group_description_page_create_new_seed_button_key'); + await commonTestCases.defaultSleepTime(); + } + Future<void> navigateToRestoreWalletPage() async { await commonTestCases.tapItemByKey('welcome_page_restore_wallet_button_key'); await commonTestCases.defaultSleepTime(); From 0d2b0a33e68cf9d1f00cb7e810a8d0bbf998540c Mon Sep 17 00:00:00 2001 From: Czarek Nakamoto <cyjan@mrcyjanek.net> Date: Wed, 12 Feb 2025 20:48:04 +0100 Subject: [PATCH 6/6] [skip slack] tests update --- .../robots/wallet_group_description_page_robot.dart | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/integration_test/robots/wallet_group_description_page_robot.dart b/integration_test/robots/wallet_group_description_page_robot.dart index 57500dc3c..4eaa4c1d3 100644 --- a/integration_test/robots/wallet_group_description_page_robot.dart +++ b/integration_test/robots/wallet_group_description_page_robot.dart @@ -1,5 +1,6 @@ import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/new_wallet/wallet_group_description_page.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter_test/flutter_test.dart'; import '../components/common_test_cases.dart'; @@ -19,9 +20,11 @@ class WalletGroupDescriptionPageRobot { } Future<void> navigateToCreateNewSeedPage() async { - await commonTestCases.tapItemByKey( - 'wallet_group_description_page_create_new_seed_button_key', - ); + if (await(find.byKey(ValueKey('wallet_group_description_page_create_new_seed_button_key'))).hasFound) { + await commonTestCases.tapItemByKey( + 'wallet_group_description_page_create_new_seed_button_key', + ); + } } Future<void> navigateToChooseWalletGroup() async {