mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2025-04-27 14:04:46 +00:00
Merge branch 'Integrate-Seed-Verification-Flow-To-Integration-Tests' of https://github.com/cake-tech/cake_wallet into Integrate-Seed-Verification-Flow-To-Integration-Tests
This commit is contained in:
commit
bbe72f4c1f
9 changed files with 75 additions and 35 deletions
.github/workflows
integration_test
components
robots
dashboard_menu_widget_robot.dartwallet_group_description_page_robot.dartwallet_keys_robot.dartwelcome_page_robot.dart
test_suites
lib/src/screens/wallet_keys
1
.github/workflows/pr_test_build_android.yml
vendored
1
.github/workflows/pr_test_build_android.yml
vendored
|
@ -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
|
||||
|
|
23
.github/workflows/pr_test_build_linux.yml
vendored
23
.github/workflows/pr_test_build_linux.yml
vendored
|
@ -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
|
||||
|
@ -242,7 +243,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
|
||||
|
@ -258,28 +259,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') }}
|
||||
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, '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" &
|
||||
|
|
|
@ -116,7 +116,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();
|
||||
}
|
||||
|
@ -211,6 +210,8 @@ class CommonTestFlows {
|
|||
await _welcomePageRobot.navigateToCreateNewWalletPage();
|
||||
|
||||
await _selectWalletTypeForWallet(walletTypeToCreate);
|
||||
|
||||
await _welcomePageRobot.tapNewSingleSeed();
|
||||
}
|
||||
|
||||
Future<void> _welcomeToRestoreFromSeedsOrKeysPath(
|
||||
|
@ -351,8 +352,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}");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -27,7 +27,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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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';
|
||||
|
@ -20,9 +21,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 {
|
||||
|
|
|
@ -71,7 +71,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');
|
||||
}
|
||||
|
||||
|
@ -79,10 +82,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');
|
||||
}
|
||||
|
@ -90,14 +97,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');
|
||||
}
|
||||
|
@ -130,35 +142,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');
|
||||
}
|
||||
}
|
||||
|
@ -167,5 +183,6 @@ class WalletKeysAndSeedPageRobot {
|
|||
tester.printToConsole('Going back to dashboard from credentials page');
|
||||
await commonTestCases.goBack();
|
||||
await commonTestCases.goBack();
|
||||
await commonTestCases.goBack();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,6 +29,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();
|
||||
|
|
|
@ -42,12 +42,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);
|
||||
|
|
|
@ -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')),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
|
Loading…
Reference in a new issue