mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2024-12-24 20:39:21 +00:00
644 lines
26 KiB
Dart
644 lines
26 KiB
Dart
|
import 'package:flutter/material.dart';
|
||
|
import 'package:flutter/services.dart';
|
||
|
import 'package:flutter_test/flutter_test.dart';
|
||
|
import 'package:integration_test/integration_test.dart';
|
||
|
import 'package:stackwallet/main.dart' as campfireApp;
|
||
|
import 'package:stackwallet/notifications/modal_popup_dialog.dart';
|
||
|
import 'package:stackwallet/pages/settings_view/settings_subviews/network_settings_subviews/add_custom_node_view.dart';
|
||
|
import 'package:stackwallet/utilities/address_utils.dart';
|
||
|
import 'package:stackwallet/widgets/custom_buttons/gradient_button.dart';
|
||
|
import 'package:stackwallet/widgets/custom_buttons/simple_button.dart';
|
||
|
import 'package:stackwallet/widgets/node_card.dart';
|
||
|
import 'package:pretty_qr_code/pretty_qr_code.dart';
|
||
|
|
||
|
import 'bot_runners/create_wallet_until_pin_confirmation.dart';
|
||
|
import 'bots/addressbook/add_address_book_entry_view_bot.dart';
|
||
|
import 'bots/addressbook/address_book_card_bot.dart';
|
||
|
import 'bots/addressbook/address_book_entry_details_view_bot.dart';
|
||
|
import 'bots/addressbook/address_book_view_bot.dart';
|
||
|
import 'bots/addressbook/edit_address_book_entry_view_bot.dart';
|
||
|
import 'bots/lockscreen_view_bot.dart';
|
||
|
import 'bots/main_view_bot.dart';
|
||
|
import 'bots/onboarding/backup_key_warning_bot.dart';
|
||
|
import 'bots/onboarding/create_pin_view_bot.dart';
|
||
|
import 'bots/onboarding/name_your_wallet_view_bot.dart';
|
||
|
import 'bots/onboarding/onboarding_view_bot.dart';
|
||
|
import 'bots/onboarding/terms_and_conditions_bot.dart';
|
||
|
import 'bots/settings/currency_view_bot.dart';
|
||
|
import 'bots/settings/network_settings/add_custom_node_view_bot.dart';
|
||
|
import 'bots/settings/network_settings/network_settings_view_bot.dart';
|
||
|
import 'bots/settings/network_settings/node_details_view_bot.dart';
|
||
|
import 'bots/settings/settings_view_bot.dart';
|
||
|
import 'bots/settings/wallet_backup_view_bot.dart';
|
||
|
import 'bots/settings/wallet_settings/change_pin_view_bot.dart';
|
||
|
import 'bots/settings/wallet_settings/delete_wallet_warning_view_bot.dart';
|
||
|
import 'bots/settings/wallet_settings/rename_wallet_view_bot.dart';
|
||
|
import 'bots/settings/wallet_settings/wallet_delete_mnemonic_view_bot.dart';
|
||
|
import 'bots/settings/wallet_settings_view_bot.dart';
|
||
|
|
||
|
const bool TEST_ADDRESS_BOOK = true;
|
||
|
const bool TEST_NETWORK_SETTINGS = true;
|
||
|
const bool TEST_WALLET_BACKUP = true;
|
||
|
const bool TEST_CURRENCY = true;
|
||
|
const bool TEST_WALLET_SETTINGS = true;
|
||
|
|
||
|
void main() {
|
||
|
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
|
||
|
// may fail if a network connection fails somewhere
|
||
|
testWidgets("settings integration test", (tester) async {
|
||
|
campfireApp.main();
|
||
|
await tester.pumpAndSettle(Duration(seconds: 10));
|
||
|
|
||
|
// robots
|
||
|
final onboardingViewBot = OnboardingViewBot(tester);
|
||
|
final termsAndConditionsViewBot = TermsAndConditionsViewBot(tester);
|
||
|
final nameYourWalletViewBot = NameYourWalletViewBot(tester);
|
||
|
final createPinViewBot = CreatePinViewBot(tester);
|
||
|
final backupKeyWarningViewBot = BackupKeyWarningViewBot(tester);
|
||
|
final mainViewBot = MainViewBot(tester);
|
||
|
final settingsViewBot = SettingsViewBot(tester);
|
||
|
|
||
|
// tap create new wallet button
|
||
|
await onboardingViewBot.ensureVisible();
|
||
|
await onboardingViewBot.tapCreateNewWallet();
|
||
|
await termsAndConditionsViewBot.ensureVisible();
|
||
|
|
||
|
await createWalletUntilPinConfirmation(
|
||
|
termsAndConditionsViewBot,
|
||
|
nameYourWalletViewBot,
|
||
|
createPinViewBot,
|
||
|
);
|
||
|
|
||
|
// wait for wallet generation
|
||
|
await tester.pumpAndSettle(Duration(seconds: 60));
|
||
|
|
||
|
await backupKeyWarningViewBot.ensureVisible();
|
||
|
|
||
|
// tap skip to load into main wallet view
|
||
|
await backupKeyWarningViewBot.tapSkip();
|
||
|
await mainViewBot.ensureVisible();
|
||
|
|
||
|
// tap settings button
|
||
|
await mainViewBot.tapSettings();
|
||
|
await settingsViewBot.ensureVisible();
|
||
|
|
||
|
if (TEST_ADDRESS_BOOK) {
|
||
|
// tap address book
|
||
|
await settingsViewBot.tapAddressBook();
|
||
|
final addressBookViewBot = AddressBookViewBot(tester);
|
||
|
await addressBookViewBot.ensureVisible();
|
||
|
|
||
|
// add entry
|
||
|
await addressBookViewBot.tapAdd();
|
||
|
final addAddressBookEntryViewBot = AddAddressBookEntryViewBot(tester);
|
||
|
await addAddressBookEntryViewBot.ensureVisible();
|
||
|
|
||
|
// test back and cancel
|
||
|
await addAddressBookEntryViewBot.tapBack();
|
||
|
await addressBookViewBot.ensureVisible();
|
||
|
await addressBookViewBot.tapAdd();
|
||
|
await addAddressBookEntryViewBot.tapCancel();
|
||
|
await addressBookViewBot.ensureVisible();
|
||
|
|
||
|
// now add an entry
|
||
|
await addressBookViewBot.tapAdd();
|
||
|
await addAddressBookEntryViewBot.ensureVisible();
|
||
|
await addAddressBookEntryViewBot
|
||
|
.enterAddress("aPjLWDTPQsoPHUTxKBNRzoebDALj3eTcfh");
|
||
|
await addAddressBookEntryViewBot.enterName("john doe");
|
||
|
|
||
|
// save entry
|
||
|
await addAddressBookEntryViewBot.tapSave();
|
||
|
await addressBookViewBot.ensureVisible();
|
||
|
final addressBookCardBot = AddressBookCardBot(tester);
|
||
|
await addressBookCardBot.ensureVisible();
|
||
|
|
||
|
// expand options
|
||
|
await addressBookCardBot.toggleExpandCard();
|
||
|
|
||
|
// tap copy
|
||
|
await addressBookCardBot.tapCopy();
|
||
|
expect((await Clipboard.getData(Clipboard.kTextPlain))!.text,
|
||
|
"aPjLWDTPQsoPHUTxKBNRzoebDALj3eTcfh");
|
||
|
expect(find.text("Address copied to clipboard"), findsOneWidget);
|
||
|
await tester.pumpAndSettle(Duration(seconds: 2));
|
||
|
|
||
|
// clear clipboard
|
||
|
await Clipboard.setData(ClipboardData(text: ""));
|
||
|
|
||
|
// tap details
|
||
|
await addressBookCardBot.tapDetails();
|
||
|
final addressBookEntryDetailsViewBot =
|
||
|
AddressBookEntryDetailsViewBot(tester);
|
||
|
await addressBookEntryDetailsViewBot.ensureVisible();
|
||
|
|
||
|
// tap back then go back to details
|
||
|
await addressBookEntryDetailsViewBot.tapBack();
|
||
|
await addressBookCardBot.ensureVisible();
|
||
|
await addressBookCardBot.tapDetails();
|
||
|
await addressBookEntryDetailsViewBot.ensureVisible();
|
||
|
|
||
|
// copy address
|
||
|
await addressBookEntryDetailsViewBot.tapCopyAddress();
|
||
|
expect((await Clipboard.getData(Clipboard.kTextPlain))!.text,
|
||
|
"aPjLWDTPQsoPHUTxKBNRzoebDALj3eTcfh");
|
||
|
expect(find.text("Address copied to clipboard"), findsOneWidget);
|
||
|
await tester.pumpAndSettle(Duration(seconds: 2));
|
||
|
|
||
|
// clear clipboard
|
||
|
await Clipboard.setData(ClipboardData(text: ""));
|
||
|
|
||
|
// delete and cancel
|
||
|
await addressBookEntryDetailsViewBot.tapMore();
|
||
|
await addressBookEntryDetailsViewBot.tapDelete();
|
||
|
await addressBookEntryDetailsViewBot.tapCancelDelete();
|
||
|
|
||
|
// delete and confirm
|
||
|
await addressBookEntryDetailsViewBot.tapMore();
|
||
|
await addressBookEntryDetailsViewBot.tapDelete();
|
||
|
await addressBookEntryDetailsViewBot.tapConfirmDelete();
|
||
|
await addressBookViewBot.ensureVisible();
|
||
|
|
||
|
// add and save another entry, then go to details
|
||
|
await addressBookViewBot.tapAdd();
|
||
|
await addAddressBookEntryViewBot.ensureVisible();
|
||
|
await addAddressBookEntryViewBot
|
||
|
.enterAddress("aPjLWDTPQsoPHUTxKBNRzoebDALj3eTcfh");
|
||
|
await addAddressBookEntryViewBot.enterName("john doe");
|
||
|
await addAddressBookEntryViewBot.tapSave();
|
||
|
await addressBookViewBot.ensureVisible();
|
||
|
await addressBookCardBot.ensureVisible();
|
||
|
await addressBookCardBot.toggleExpandCard();
|
||
|
await addressBookCardBot.tapDetails();
|
||
|
await addressBookEntryDetailsViewBot.ensureVisible();
|
||
|
|
||
|
// tap edit
|
||
|
await addressBookEntryDetailsViewBot.tapEdit();
|
||
|
final editAddressBookEntryViewBot = EditAddressBookEntryViewBot(tester);
|
||
|
await editAddressBookEntryViewBot.ensureVisible();
|
||
|
|
||
|
// tap back
|
||
|
await editAddressBookEntryViewBot.tapBack();
|
||
|
await addressBookEntryDetailsViewBot.ensureVisible();
|
||
|
await addressBookEntryDetailsViewBot.tapEdit();
|
||
|
await editAddressBookEntryViewBot.ensureVisible();
|
||
|
|
||
|
// tap cancel
|
||
|
await editAddressBookEntryViewBot.tapCancel();
|
||
|
await addressBookEntryDetailsViewBot.ensureVisible();
|
||
|
await addressBookEntryDetailsViewBot.tapEdit();
|
||
|
await editAddressBookEntryViewBot.ensureVisible();
|
||
|
|
||
|
// tap save without editing
|
||
|
await editAddressBookEntryViewBot.tapSave();
|
||
|
await addressBookEntryDetailsViewBot.ensureVisible();
|
||
|
await addressBookEntryDetailsViewBot.tapEdit();
|
||
|
await editAddressBookEntryViewBot.ensureVisible();
|
||
|
|
||
|
// tap save with editing
|
||
|
await editAddressBookEntryViewBot.enterName("jane doe");
|
||
|
await editAddressBookEntryViewBot
|
||
|
.enterAddress("aPjLWDTPQsoPHUTxKBNRzoebDALj3eTcfh");
|
||
|
|
||
|
await editAddressBookEntryViewBot.tapSave();
|
||
|
await addressBookViewBot.ensureVisible();
|
||
|
await addressBookCardBot.ensureVisible();
|
||
|
|
||
|
// expand and tap send
|
||
|
await addressBookCardBot.toggleExpandCard();
|
||
|
await addressBookCardBot.tapSend();
|
||
|
await mainViewBot.ensureVisible();
|
||
|
|
||
|
// go to details and send
|
||
|
await mainViewBot.tapSettings();
|
||
|
await settingsViewBot.tapAddressBook();
|
||
|
await addressBookCardBot.toggleExpandCard();
|
||
|
await addressBookCardBot.tapDetails();
|
||
|
await addressBookEntryDetailsViewBot.tapSend();
|
||
|
await mainViewBot.ensureVisible();
|
||
|
|
||
|
// open settings again to continue testing
|
||
|
await mainViewBot.tapSettings();
|
||
|
await settingsViewBot.ensureVisible();
|
||
|
}
|
||
|
|
||
|
if (TEST_NETWORK_SETTINGS) {
|
||
|
// network settings
|
||
|
await settingsViewBot.tapNetwork();
|
||
|
final networkSettingsViewBot = NetworkSettingsViewBot(tester);
|
||
|
await networkSettingsViewBot.ensureVisible();
|
||
|
|
||
|
// test back
|
||
|
await networkSettingsViewBot.tapBack();
|
||
|
await settingsViewBot.tapNetwork();
|
||
|
await networkSettingsViewBot.ensureVisible();
|
||
|
expect(find.byType(NodeCard), findsOneWidget);
|
||
|
|
||
|
// test add node back
|
||
|
await networkSettingsViewBot.tapAdd();
|
||
|
final addCustomNodeViewBot = AddCustomNodeViewBot(tester);
|
||
|
await addCustomNodeViewBot.ensureVisible();
|
||
|
await addCustomNodeViewBot.tapBack();
|
||
|
await networkSettingsViewBot.tapAdd();
|
||
|
await addCustomNodeViewBot.ensureVisible();
|
||
|
|
||
|
// test add node
|
||
|
await addCustomNodeViewBot.enterNodeName("MyNode");
|
||
|
await addCustomNodeViewBot.enterNodeAddress("MyNodeAddress");
|
||
|
await addCustomNodeViewBot.enterNodePort("0");
|
||
|
|
||
|
// tap test connection
|
||
|
await addCustomNodeViewBot.tapTestConnection();
|
||
|
expect(find.text("Connection failed!"), findsOneWidget);
|
||
|
await tester.pumpAndSettle(Duration(seconds: 2));
|
||
|
|
||
|
// test save non connecting node
|
||
|
await addCustomNodeViewBot.tapSave();
|
||
|
expect(find.byType(CouldNotConnectOnSaveDialog), findsOneWidget);
|
||
|
await tester
|
||
|
.tap(find.byKey(Key("couldNotConnectOnSaveConfirmSaveButtonKey")));
|
||
|
await tester.pumpAndSettle();
|
||
|
await networkSettingsViewBot.ensureVisible();
|
||
|
expect(find.byType(NodeCard), findsNWidgets(2));
|
||
|
|
||
|
// tap default node to get context menu
|
||
|
expect(find.text("Connect"), findsNothing);
|
||
|
expect(find.text("Details"), findsNothing);
|
||
|
expect(find.text("Edit"), findsNothing);
|
||
|
expect(find.text("Delete"), findsNothing);
|
||
|
await networkSettingsViewBot.tapNode("Campfire default");
|
||
|
expect(find.text("Connect"), findsOneWidget);
|
||
|
expect(find.text("Details"), findsOneWidget);
|
||
|
expect(find.text("Edit"), findsNothing);
|
||
|
expect(find.text("Delete"), findsNothing);
|
||
|
|
||
|
// tap connect
|
||
|
await tester.tap(find.text("Connect"));
|
||
|
await tester.pumpAndSettle();
|
||
|
|
||
|
// tap details
|
||
|
await networkSettingsViewBot.tapNode("Campfire default");
|
||
|
await tester.tap(find.text("Details"));
|
||
|
await tester.pumpAndSettle();
|
||
|
final nodeDetailsViewBot = NodeDetailsViewBot(tester);
|
||
|
await nodeDetailsViewBot.ensureVisible();
|
||
|
|
||
|
// tap test connection
|
||
|
await nodeDetailsViewBot.tapTestConnection();
|
||
|
await tester.pumpAndSettle(Duration(seconds: 3));
|
||
|
|
||
|
// tap back
|
||
|
await nodeDetailsViewBot.tapBack();
|
||
|
await networkSettingsViewBot.ensureVisible();
|
||
|
|
||
|
// tap custom node to get context menu
|
||
|
expect(find.text("Connect"), findsNothing);
|
||
|
expect(find.text("Details"), findsNothing);
|
||
|
expect(find.text("Edit"), findsNothing);
|
||
|
expect(find.text("Delete"), findsNothing);
|
||
|
await networkSettingsViewBot.tapNode("MyNode");
|
||
|
expect(find.text("Connect"), findsOneWidget);
|
||
|
expect(find.text("Details"), findsOneWidget);
|
||
|
expect(find.text("Edit"), findsOneWidget);
|
||
|
expect(find.text("Delete"), findsOneWidget);
|
||
|
|
||
|
// tap details
|
||
|
await tester.tap(find.text("Details"));
|
||
|
await tester.pumpAndSettle();
|
||
|
await nodeDetailsViewBot.ensureVisible();
|
||
|
|
||
|
// test back
|
||
|
await nodeDetailsViewBot.tapBack();
|
||
|
await networkSettingsViewBot.ensureVisible();
|
||
|
await networkSettingsViewBot.tapNode("MyNode");
|
||
|
await tester.tap(find.text("Details"));
|
||
|
await tester.pumpAndSettle();
|
||
|
await nodeDetailsViewBot.ensureVisible();
|
||
|
|
||
|
// tap test connection
|
||
|
await nodeDetailsViewBot.tapTestConnection();
|
||
|
expect(find.text("Connection failed!"), findsOneWidget);
|
||
|
await tester.pumpAndSettle(Duration(seconds: 2));
|
||
|
|
||
|
// open context and edit
|
||
|
await nodeDetailsViewBot.tapMoreAndEdit();
|
||
|
|
||
|
// tap disabled save
|
||
|
await nodeDetailsViewBot.tapSave();
|
||
|
await nodeDetailsViewBot.ensureVisible();
|
||
|
|
||
|
// edit and save node
|
||
|
await nodeDetailsViewBot.tapUseSSLCheckbox();
|
||
|
await nodeDetailsViewBot.enterName("MyNode2");
|
||
|
await nodeDetailsViewBot.tapSave();
|
||
|
await networkSettingsViewBot.ensureVisible();
|
||
|
expect(find.text("MyNode2"), findsOneWidget);
|
||
|
expect(find.text("MyNode"), findsNothing);
|
||
|
|
||
|
// tap delete node from details view
|
||
|
await networkSettingsViewBot.tapNode("MyNode2");
|
||
|
await tester.tap(find.text("Details"));
|
||
|
await tester.pumpAndSettle();
|
||
|
await nodeDetailsViewBot.tapMoreAndDelete();
|
||
|
|
||
|
// cancel delete
|
||
|
expect(find.byType(ModalPopupDialog), findsOneWidget);
|
||
|
await nodeDetailsViewBot.tapCancelDelete();
|
||
|
expect(find.byType(ModalPopupDialog), findsNothing);
|
||
|
|
||
|
// confirm delete
|
||
|
await nodeDetailsViewBot.tapMoreAndDelete();
|
||
|
await nodeDetailsViewBot.tapConfirmDelete();
|
||
|
await networkSettingsViewBot.ensureVisible();
|
||
|
// expect only the default node now
|
||
|
expect(find.byType(NodeCard), findsOneWidget);
|
||
|
|
||
|
// create new node to test remaining two context options
|
||
|
// on the main network settings page
|
||
|
await networkSettingsViewBot.tapAdd();
|
||
|
await addCustomNodeViewBot.ensureVisible();
|
||
|
await addCustomNodeViewBot.enterNodeName("MyNode");
|
||
|
await addCustomNodeViewBot.enterNodeAddress("MyNodeAddress");
|
||
|
await addCustomNodeViewBot.enterNodePort("0");
|
||
|
await addCustomNodeViewBot.tapSave();
|
||
|
await tester
|
||
|
.tap(find.byKey(Key("couldNotConnectOnSaveConfirmSaveButtonKey")));
|
||
|
await tester.pumpAndSettle();
|
||
|
await networkSettingsViewBot.ensureVisible();
|
||
|
expect(find.byType(NodeCard), findsNWidgets(2));
|
||
|
|
||
|
// tap edit node from the main network settings page, then save
|
||
|
await networkSettingsViewBot.tapNode("MyNode");
|
||
|
await tester.tap(find.text("Edit"));
|
||
|
await tester.pumpAndSettle();
|
||
|
await nodeDetailsViewBot.ensureVisible();
|
||
|
await nodeDetailsViewBot.enterName("MyNode3");
|
||
|
await nodeDetailsViewBot.enterAddress("somenewaddress");
|
||
|
await nodeDetailsViewBot.enterPort("00");
|
||
|
await nodeDetailsViewBot.tapUseSSLCheckbox();
|
||
|
await tester.tap(find.text("Use SSL"));
|
||
|
await tester.pumpAndSettle();
|
||
|
await nodeDetailsViewBot.tapSave();
|
||
|
await networkSettingsViewBot.ensureVisible();
|
||
|
|
||
|
// tap edit node from the main network settings page, then back
|
||
|
await networkSettingsViewBot.tapNode("MyNode3");
|
||
|
await tester.tap(find.text("Edit"));
|
||
|
await tester.pumpAndSettle();
|
||
|
await nodeDetailsViewBot.tapBack();
|
||
|
await networkSettingsViewBot.ensureVisible();
|
||
|
|
||
|
// tap delete node from the main network settings page, then cancel
|
||
|
await networkSettingsViewBot.tapNode("MyNode3");
|
||
|
await tester.tap(find.text("Delete"));
|
||
|
await tester.pumpAndSettle();
|
||
|
await tester.tap(find.byType(SimpleButton));
|
||
|
await tester.pumpAndSettle();
|
||
|
await networkSettingsViewBot.ensureVisible();
|
||
|
expect(find.byType(NodeCard), findsNWidgets(2));
|
||
|
|
||
|
// tap delete node from the main network settings page, then confirm
|
||
|
await networkSettingsViewBot.tapNode("MyNode3");
|
||
|
await tester.tap(find.text("Delete"));
|
||
|
await tester.pumpAndSettle();
|
||
|
await tester.tap(find.byType(GradientButton));
|
||
|
await tester.pumpAndSettle();
|
||
|
await networkSettingsViewBot.ensureVisible();
|
||
|
expect(find.byType(NodeCard), findsOneWidget);
|
||
|
|
||
|
// go back to main settings
|
||
|
await networkSettingsViewBot.tapBack();
|
||
|
await settingsViewBot.ensureVisible();
|
||
|
}
|
||
|
|
||
|
if (TEST_WALLET_BACKUP) {
|
||
|
await settingsViewBot.tapWalletBackup();
|
||
|
final lockscreenViewBot = LockscreenViewBot(tester);
|
||
|
await lockscreenViewBot.ensureVisible();
|
||
|
|
||
|
// test back
|
||
|
await lockscreenViewBot.tapBack();
|
||
|
await settingsViewBot.ensureVisible();
|
||
|
await settingsViewBot.tapWalletBackup();
|
||
|
|
||
|
// enter wrong pin
|
||
|
await lockscreenViewBot.enterPin("2222");
|
||
|
await tester.pumpAndSettle(Duration(seconds: 2));
|
||
|
await lockscreenViewBot.ensureVisible();
|
||
|
|
||
|
// test back again
|
||
|
await lockscreenViewBot.tapBack();
|
||
|
await settingsViewBot.ensureVisible();
|
||
|
await settingsViewBot.tapWalletBackup();
|
||
|
|
||
|
// enter correct pin
|
||
|
await lockscreenViewBot.enterPin("1234");
|
||
|
await tester.pumpAndSettle(Duration(seconds: 2));
|
||
|
final walletBackUpViewBot = WalletBackUpViewBot(tester);
|
||
|
await walletBackUpViewBot.ensureVisible();
|
||
|
|
||
|
// tap copy
|
||
|
await Clipboard.setData(ClipboardData(text: ""));
|
||
|
await walletBackUpViewBot.tapCopy();
|
||
|
final mnemonic =
|
||
|
(await Clipboard.getData(Clipboard.kTextPlain))!.text!.split(" ");
|
||
|
expect(mnemonic.length, 24);
|
||
|
await tester.pumpAndSettle(Duration(seconds: 2));
|
||
|
await Clipboard.setData(ClipboardData(text: ""));
|
||
|
|
||
|
// tap qr code then cancel
|
||
|
await walletBackUpViewBot.tapQrCode();
|
||
|
final qr = find.byType(PrettyQr).evaluate().first.widget as PrettyQr;
|
||
|
expect(qr.data, AddressUtils.encodeQRSeedData(mnemonic));
|
||
|
await walletBackUpViewBot.tapQrCodeCancel();
|
||
|
expect(find.byType(ModalPopupDialog), findsNothing);
|
||
|
|
||
|
// tap back to settings
|
||
|
await walletBackUpViewBot.tapBack();
|
||
|
await settingsViewBot.ensureVisible();
|
||
|
}
|
||
|
|
||
|
if (TEST_CURRENCY) {
|
||
|
// change to a different currency from default USD
|
||
|
await settingsViewBot.tapCurrency();
|
||
|
final currencyViewBot = CurrencyViewBot(tester);
|
||
|
await currencyViewBot.ensureVisible();
|
||
|
await currencyViewBot.tapCurrency("CHF");
|
||
|
|
||
|
// go back to main view to check for "CHF"
|
||
|
await currencyViewBot.tapBack();
|
||
|
await settingsViewBot.ensureVisible();
|
||
|
await settingsViewBot.tapBack();
|
||
|
await mainViewBot.ensureVisible();
|
||
|
expect(find.text("CHF"), findsOneWidget);
|
||
|
|
||
|
// open settings again to continue testing
|
||
|
await mainViewBot.tapSettings();
|
||
|
await settingsViewBot.ensureVisible();
|
||
|
}
|
||
|
|
||
|
if (TEST_WALLET_SETTINGS) {
|
||
|
// tap wallet settings
|
||
|
await settingsViewBot.tapWalletSettings();
|
||
|
final walletSettingsViewBot = WalletSettingsViewBot(tester);
|
||
|
await walletSettingsViewBot.ensureVisible();
|
||
|
|
||
|
// test all change pin back taps
|
||
|
await walletSettingsViewBot.tapChangePIN();
|
||
|
final lockScreenViewBot = LockscreenViewBot(tester);
|
||
|
await lockScreenViewBot.ensureVisible();
|
||
|
await lockScreenViewBot.tapBack();
|
||
|
await walletSettingsViewBot.tapChangePIN();
|
||
|
await lockScreenViewBot.enterPin("1234");
|
||
|
await tester.pumpAndSettle(Duration(seconds: 2));
|
||
|
final changePinViewBot = ChangePinViewBot(tester);
|
||
|
await changePinViewBot.ensureVisible();
|
||
|
await changePinViewBot.tapBack();
|
||
|
await walletSettingsViewBot.tapChangePIN();
|
||
|
await lockScreenViewBot.enterPin("1234");
|
||
|
await tester.pumpAndSettle(Duration(seconds: 2));
|
||
|
await changePinViewBot.enterPin();
|
||
|
await changePinViewBot.tapBack();
|
||
|
await walletSettingsViewBot.ensureVisible();
|
||
|
|
||
|
// change pin with a few fails
|
||
|
await walletSettingsViewBot.tapChangePIN();
|
||
|
await lockScreenViewBot.enterPin("2222");
|
||
|
await tester.pumpAndSettle(Duration(seconds: 2));
|
||
|
await lockScreenViewBot.enterPin("1234");
|
||
|
await tester.pumpAndSettle(Duration(seconds: 2));
|
||
|
await changePinViewBot.enterPin();
|
||
|
await changePinViewBot.confirmUnmatchedPin();
|
||
|
await changePinViewBot.enterPin();
|
||
|
await changePinViewBot.confirmUnmatchedPin();
|
||
|
await changePinViewBot.enterPin();
|
||
|
await changePinViewBot.confirmMatchedPin();
|
||
|
await walletSettingsViewBot.ensureVisible();
|
||
|
await tester.pumpAndSettle(Duration(seconds: 2));
|
||
|
|
||
|
// change pin with no fails
|
||
|
await walletSettingsViewBot.tapChangePIN();
|
||
|
await lockScreenViewBot.enterPin("2222");
|
||
|
await tester.pumpAndSettle(Duration(seconds: 2));
|
||
|
await lockScreenViewBot.enterPin("1234");
|
||
|
await tester.pumpAndSettle(Duration(seconds: 2));
|
||
|
await changePinViewBot.enterPin();
|
||
|
await changePinViewBot.confirmMatchedPin();
|
||
|
await walletSettingsViewBot.ensureVisible();
|
||
|
await tester.pumpAndSettle(Duration(seconds: 2));
|
||
|
|
||
|
// biometrics doesn't test well as it prompts for system settings
|
||
|
// await walletSettingsViewBot.tapToggleBiometrics();
|
||
|
// await walletSettingsViewBot.tapCancelBiometricsSystemSettingsDialog();
|
||
|
|
||
|
// rename wallet save
|
||
|
await walletSettingsViewBot.tapRenameWallet();
|
||
|
final renameWalletViewBot = RenameWalletViewBot(tester);
|
||
|
await renameWalletViewBot.tapSave();
|
||
|
await renameWalletViewBot.enterWalletName("My Firo Wallet2");
|
||
|
await renameWalletViewBot.tapSave();
|
||
|
|
||
|
await walletSettingsViewBot.tapRenameWallet();
|
||
|
expect(find.text("My Firo Wallet2"), findsOneWidget);
|
||
|
await renameWalletViewBot.enterWalletName("My Firo Wallet");
|
||
|
await renameWalletViewBot.tapSave();
|
||
|
|
||
|
// tap back
|
||
|
await walletSettingsViewBot.tapRenameWallet();
|
||
|
await renameWalletViewBot.tapBack();
|
||
|
await walletSettingsViewBot.ensureVisible();
|
||
|
|
||
|
// tap clear cache and cancel
|
||
|
await walletSettingsViewBot.tapClearCache();
|
||
|
await walletSettingsViewBot.tapCancelClearCache();
|
||
|
await walletSettingsViewBot.ensureVisible();
|
||
|
|
||
|
// tap clear cache and clear
|
||
|
await walletSettingsViewBot.tapClearCache();
|
||
|
await walletSettingsViewBot.tapClearOnClearCache();
|
||
|
await walletSettingsViewBot.tapOkOnCacheClearedAlert();
|
||
|
await walletSettingsViewBot.ensureVisible();
|
||
|
|
||
|
// tap delete wallet and cancel
|
||
|
await walletSettingsViewBot.tapDeleteWallet();
|
||
|
await walletSettingsViewBot.tapCancelDeleteConfirmationDialog();
|
||
|
|
||
|
// tap delete wallet and continue running though
|
||
|
// and testing back taps throughout
|
||
|
await walletSettingsViewBot.tapDeleteWallet();
|
||
|
await walletSettingsViewBot.tapDeleteOnDeleteConfirmationDialog();
|
||
|
await lockScreenViewBot.ensureVisible();
|
||
|
await lockScreenViewBot.tapBack();
|
||
|
|
||
|
await walletSettingsViewBot.tapDeleteWallet();
|
||
|
await walletSettingsViewBot.tapDeleteOnDeleteConfirmationDialog();
|
||
|
await lockScreenViewBot.ensureVisible();
|
||
|
await lockScreenViewBot.enterPin("9999");
|
||
|
await tester.pumpAndSettle(Duration(seconds: 2));
|
||
|
await lockScreenViewBot.ensureVisible();
|
||
|
await lockScreenViewBot.tapBack();
|
||
|
|
||
|
await walletSettingsViewBot.tapDeleteWallet();
|
||
|
await walletSettingsViewBot.tapDeleteOnDeleteConfirmationDialog();
|
||
|
await lockScreenViewBot.ensureVisible();
|
||
|
await lockScreenViewBot.enterPin("1234");
|
||
|
await tester.pumpAndSettle(Duration(seconds: 2));
|
||
|
final deleteWalletWarningViewBot = DeleteWalletWarningViewBot(tester);
|
||
|
await deleteWalletWarningViewBot.ensureVisible();
|
||
|
await deleteWalletWarningViewBot.tapBack();
|
||
|
await walletSettingsViewBot.ensureVisible();
|
||
|
|
||
|
await walletSettingsViewBot.tapDeleteWallet();
|
||
|
await walletSettingsViewBot.tapDeleteOnDeleteConfirmationDialog();
|
||
|
await lockScreenViewBot.ensureVisible();
|
||
|
await lockScreenViewBot.enterPin("1234");
|
||
|
await tester.pumpAndSettle(Duration(seconds: 2));
|
||
|
await deleteWalletWarningViewBot.ensureVisible();
|
||
|
await deleteWalletWarningViewBot.tapCancelAndGoBack();
|
||
|
await walletSettingsViewBot.ensureVisible();
|
||
|
|
||
|
// finally go through and tap view backup key
|
||
|
await walletSettingsViewBot.tapDeleteWallet();
|
||
|
await walletSettingsViewBot.tapDeleteOnDeleteConfirmationDialog();
|
||
|
await lockScreenViewBot.ensureVisible();
|
||
|
await lockScreenViewBot.enterPin("1234");
|
||
|
await tester.pumpAndSettle(Duration(seconds: 2));
|
||
|
await deleteWalletWarningViewBot.ensureVisible();
|
||
|
await deleteWalletWarningViewBot.tapViewBackupKey();
|
||
|
final walletDeleteMnemonicViewBot = WalletDeleteMnemonicViewBot(tester);
|
||
|
await walletDeleteMnemonicViewBot.ensureVisible();
|
||
|
|
||
|
// test back
|
||
|
await walletDeleteMnemonicViewBot.tapBack();
|
||
|
await deleteWalletWarningViewBot.ensureVisible();
|
||
|
await deleteWalletWarningViewBot.tapViewBackupKey();
|
||
|
await walletDeleteMnemonicViewBot.ensureVisible();
|
||
|
|
||
|
// tap qr code
|
||
|
await walletDeleteMnemonicViewBot.tapQrCode();
|
||
|
await walletDeleteMnemonicViewBot.tapCancelQrCode();
|
||
|
await walletDeleteMnemonicViewBot.ensureVisible();
|
||
|
|
||
|
// tap copy
|
||
|
await Clipboard.setData(ClipboardData(text: ""));
|
||
|
await walletDeleteMnemonicViewBot.tapCopy();
|
||
|
final mnemonic =
|
||
|
(await Clipboard.getData(Clipboard.kTextPlain))!.text!.split(" ");
|
||
|
expect(mnemonic.length, 24);
|
||
|
await tester.pumpAndSettle(Duration(seconds: 2));
|
||
|
await Clipboard.setData(ClipboardData(text: ""));
|
||
|
await walletDeleteMnemonicViewBot.ensureVisible();
|
||
|
|
||
|
// tap continue and cancel
|
||
|
await walletDeleteMnemonicViewBot.tapContinue();
|
||
|
await walletDeleteMnemonicViewBot.tapCancelContinue();
|
||
|
await walletDeleteMnemonicViewBot.ensureVisible();
|
||
|
|
||
|
// tap continue and finally confirm deletion
|
||
|
await walletDeleteMnemonicViewBot.tapContinue();
|
||
|
await walletDeleteMnemonicViewBot.tapConfirmContinue();
|
||
|
await onboardingViewBot.ensureVisible();
|
||
|
}
|
||
|
});
|
||
|
}
|