dev
dart 178 lines 6.74 KB
Raw
1 import 'package:cake_wallet/generated/i18n.dart';
2 import 'package:cake_wallet/reactions/wallet_connect.dart';
3 import 'package:cake_wallet/src/screens/wallet_keys/wallet_keys_page.dart';
4 import 'package:cake_wallet/store/app_store.dart';
5 import 'package:cw_core/monero_wallet_keys.dart';
6 import 'package:cw_core/wallet_type.dart';
7 import 'package:cw_monero/monero_wallet.dart';
8 import 'package:flutter_test/flutter_test.dart';
9 import 'package:polyseed/polyseed.dart';
10
11 import '../components/common_test_cases.dart';
12
13 class WalletKeysAndSeedPageRobot {
14 WalletKeysAndSeedPageRobot(this.tester) : commonTestCases = CommonTestCases(tester);
15
16 final WidgetTester tester;
17 final CommonTestCases commonTestCases;
18
19 Future<void> isWalletKeysAndSeedPage() async {
20 await commonTestCases.isSpecificPage<WalletKeysPage>();
21 await commonTestCases.takeScreenshots('wallet_keys_page');
22 }
23
24 void hasTitle() {
25 final walletKeysPage = tester.widget<WalletKeysPage>(find.byType(WalletKeysPage));
26 final walletKeysViewModel = walletKeysPage.walletKeysViewModel;
27 commonTestCases.hasText(walletKeysViewModel.title);
28 }
29
30 void hasShareWarning() {
31 commonTestCases.hasText(S.current.do_not_share_warning_text.toUpperCase());
32 }
33
34 Future<void> confirmWalletCredentials(WalletType walletType) async {
35 final walletKeysPage = tester.widget<WalletKeysPage>(find.byType(WalletKeysPage));
36 final walletKeysViewModel = walletKeysPage.walletKeysViewModel;
37
38 final appStore = walletKeysViewModel.appStore;
39 final walletName = walletType.name;
40 bool hasSeed = appStore.wallet!.seed != null;
41 bool hasHexSeed = appStore.wallet!.hexSeed != null;
42 bool hasPrivateKey = appStore.wallet!.privateKey != null;
43
44 if (walletType == WalletType.monero) {
45 final moneroWallet = appStore.wallet as MoneroWalletBase;
46 final lang = PolyseedLang.getByPhrase(moneroWallet.seed);
47 final legacySeed = moneroWallet.seedLegacy(lang.nameEnglish);
48
49 await _confirmMoneroWalletCredentials(
50 appStore,
51 walletName,
52 moneroWallet.seed,
53 legacySeed,
54 );
55 }
56
57 if (walletType == WalletType.bitcoin ||
58 walletType == WalletType.litecoin ||
59 walletType == WalletType.bitcoinCash) {
60 final seedWords = appStore.wallet!.seed!.split(" ");
61 for (var seedWord in seedWords) {
62 commonTestCases.hasTextAtLestOnce(seedWord);
63 }
64 tester.printToConsole('$walletName wallet has seeds properly displayed');
65 }
66
67 if (isEVMCompatibleChain(walletType) ||
68 walletType == WalletType.solana ||
69 walletType == WalletType.tron) {
70 if (hasSeed) {
71 final seedWords = appStore.wallet!.seed!.split(" ");
72 for (var seedWord in seedWords) {
73 commonTestCases.hasTextAtLestOnce(seedWord);
74 }
75 tester.printToConsole('$walletName wallet has seeds properly displayed');
76 }
77 if (hasPrivateKey) {
78 await commonTestCases.tapItemByKey('wallet_keys_page_keys');
79 commonTestCases.hasText(appStore.wallet!.privateKey!);
80 tester.printToConsole('$walletName wallet has private key properly displayed');
81 }
82 }
83
84 if (walletType == WalletType.nano || walletType == WalletType.banano) {
85 if (hasSeed) {
86 final seedWords = appStore.wallet!.seed!.split(" ");
87 for (var seedWord in seedWords) {
88 commonTestCases.hasTextAtLestOnce(seedWord);
89 }
90 tester.printToConsole('$walletName wallet has seeds properly displayed');
91 }
92 if (hasHexSeed) {
93 await commonTestCases.tapItemByKey('wallet_keys_page_keys');
94 commonTestCases.hasText(appStore.wallet!.hexSeed!);
95 tester.printToConsole('$walletName wallet has hexSeed properly displayed');
96 }
97 if (hasPrivateKey) {
98 await commonTestCases.tapItemByKey('wallet_keys_page_keys');
99 commonTestCases.hasText(appStore.wallet!.privateKey!);
100 tester.printToConsole('$walletName wallet has private key properly displayed');
101 }
102 }
103
104 await commonTestCases.defaultSleepTime(seconds: 5);
105 }
106
107 Future<void> _confirmMoneroWalletCredentials(
108 AppStore appStore,
109 String walletName,
110 String seed,
111 String legacySeed,
112 ) async {
113 final keys = appStore.wallet!.keys as MoneroWalletKeys;
114
115 final hasPublicSpendKey = commonTestCases.isKeyPresent(
116 '${walletName}_wallet_public_spend_key_item_key',
117 );
118 final hasPrivateSpendKey = commonTestCases.isKeyPresent(
119 '${walletName}_wallet_private_spend_key_item_key',
120 );
121 final hasPublicViewKey = commonTestCases.isKeyPresent(
122 '${walletName}_wallet_public_view_key_item_key',
123 );
124 final hasPrivateViewKey = commonTestCases.isKeyPresent(
125 '${walletName}_wallet_private_view_key_item_key',
126 );
127 final hasSeeds = seed.isNotEmpty;
128 final hasSeedLegacy = Polyseed.isValidSeed(seed);
129
130 if (hasPublicSpendKey) {
131 await commonTestCases.tapItemByKey('wallet_keys_page_keys');
132 commonTestCases.hasText(keys.publicSpendKey);
133 tester.printToConsole('$walletName wallet has public spend key properly displayed');
134 }
135 if (hasPrivateSpendKey) {
136 await commonTestCases.tapItemByKey('wallet_keys_page_keys');
137 commonTestCases.hasText(keys.privateSpendKey);
138 tester.printToConsole('$walletName wallet has private spend key properly displayed');
139 }
140 if (hasPublicViewKey) {
141 await commonTestCases.tapItemByKey('wallet_keys_page_keys');
142 commonTestCases.hasText(keys.publicViewKey);
143 tester.printToConsole('$walletName wallet has public view key properly displayed');
144 }
145 if (hasPrivateViewKey) {
146 await commonTestCases.tapItemByKey('wallet_keys_page_keys');
147 commonTestCases.hasText(keys.privateViewKey);
148 tester.printToConsole('$walletName wallet has private view key properly displayed');
149 }
150 if (hasSeeds) {
151 await commonTestCases.tapItemByKey('wallet_keys_page_seed');
152 final seedWords = seed.split(" ");
153 for (var seedWord in seedWords) {
154 commonTestCases.hasTextAtLestOnce(seedWord);
155 }
156 tester.printToConsole('$walletName wallet has seeds properly displayed');
157 }
158 if (hasSeedLegacy) {
159 await commonTestCases.tapItemByKey('wallet_keys_page_seed_legacy');
160 final seedWords = legacySeed.split(" ");
161 for (var seedWord in seedWords) {
162 commonTestCases.hasTextAtLestOnce(seedWord);
163 }
164 tester.printToConsole('$walletName wallet has legacy seeds properly displayed');
165 }
166 }
167
168 Future<void> backToDashboard() async {
169 tester.printToConsole('Going back to dashboard from credentials page');
170 await tester.pumpAndSettle(Duration(milliseconds: 1000));
171
172 await commonTestCases.goBack();
173 await tester.pumpAndSettle(Duration(milliseconds: 1000));
174
175 await commonTestCases.goBack();
176 await tester.pumpAndSettle(Duration(milliseconds: 2000));
177 }
178 }