test: execute a transaction to ChristCosmic

This commit is contained in:
poka 2022-08-23 02:13:54 +02:00
parent cbbd4eee34
commit fc80f5693c
10 changed files with 78 additions and 22 deletions

View File

@ -1,10 +1,9 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:gecko/models/widgets_keys.dart';
import 'package:integration_test/integration_test.dart';
import 'package:gecko/main.dart' as app;
import 'tests_utility.dart';
void main() {
@ -15,22 +14,27 @@ void main() {
app.main();
await tester.pumpAndSettle(const Duration(seconds: 1));
// await deleteAllWallets(tester);
// Delete all existing chests
await deleteAllWallets(tester);
// Restore a chest
await restoreChest(tester);
});
testWidgets('Send 10 ĞD to ChristCosmic', (tester) async {
// await goKey(tester, buttonKey);
// Execute a transaction to ChristCosmic
await payChrist(tester);
});
});
}
// Customs actions
Future deleteAllWallets(WidgetTester tester) async {
await goKey(tester, keyDrawerMenu);
await goKey(tester, keyParameters);
await goKey(tester, keyDeleteAllWallets);
await goKey(tester, keyConfirm);
await tester.pumpAndSettle();
if (await isPresent(tester, 'Rechercher')) {
await goKey(tester, keyDrawerMenu);
await goKey(tester, keyParameters);
await goKey(tester, keyDeleteAllWallets);
await goKey(tester, keyConfirm);
await tester.pumpAndSettle();
}
}
Future restoreChest(WidgetTester tester) async {
@ -45,7 +49,8 @@ Future restoreChest(WidgetTester tester) async {
await goKey(tester, keyGoNext);
await goKey(tester, keyGoNext);
await goKey(tester, keyGoNext);
await goKey(tester, keyCachePassword);
final isCached = await isIconPresent(tester, Icons.check_box);
if (!isCached) await goKey(tester, keyCachePassword);
await enterText(tester, keyPinForm, 'AAAAA');
await waitFor(tester, 'Accéder à mon coffre');
await goKey(tester, keyGoWalletsHome);
@ -53,3 +58,21 @@ Future restoreChest(WidgetTester tester) async {
await goBack(tester);
await waitFor(tester, "y'a pas de lézard");
}
Future payChrist(WidgetTester tester) async {
await waitFor(tester, 'Rechercher');
await goKey(tester, keyOpenSearch);
await enterText(tester, keySearchField, 'ChristCosmic');
await goKey(tester, keyConfirmSearch);
await waitFor(tester, 'XuiQeB');
await goKey(tester,
keyIndexerResult('5CJKhFCpdSpumgWjSZ3TQmejJuHV6iELJrtdrfs38SXuiQeB'));
await waitFor(tester, 'XuiQeB');
await waitFor(tester, 'ĞD');
await goKey(tester, keyPay);
await enterText(tester, keyAmountField, '2.14');
await goKey(tester, keyConfirmPayment);
await waitFor(tester, 'validé !', timeout: const Duration(seconds: 12));
await goKey(tester, keyCloseTransactionScreen);
await waitFor(tester, 'XuiQeB');
}

View File

@ -46,6 +46,26 @@ Future<void> waitFor(
} while (finder.evaluate().isEmpty);
}
// Test if text is visible on screen, return a boolean
Future<bool> isPresent(WidgetTester tester, String text,
{Duration timeout = const Duration(seconds: 1)}) async {
try {
await waitFor(tester, text, timeout: timeout);
return true;
} catch (exception) {
return false;
}
}
// Test if widget exist on screen, return a boolean
Future<bool> isIconPresent(WidgetTester tester, IconData icon,
{Duration timeout = const Duration(seconds: 1)}) async {
await tester.pumpAndSettle();
final finder = find.byIcon(icon);
log.d('tatatatatatata: ${finder.evaluate()}');
return finder.evaluate().isEmpty ? false : true;
}
extension Truncate on String {
String truncate({required int max, String suffix = ''}) {
return length < max

View File

@ -10,7 +10,8 @@ const keyConfirm = Key('keyConfirm');
const keyParameters = Key('keyParameters');
const keyContacts = Key('keyContacts');
const keyDrawerMenu = Key('keyDrawerMenu');
const keyManageWallets = Key('keyManageWallets');
const keyOpenWalletsHomme = Key('keyOpenWalletsHomme');
const keyOpenSearch = Key('keyOpenSearch');
const keyRestoreChest = Key('keyRestoreChest');
// Wallets home
@ -46,6 +47,9 @@ const keyImportChest = Key('keyImportChest');
const keyViewActivity = Key('keyViewActivity');
const keyCertify = Key('keyCertify');
const keyPay = Key('keyPay');
const keyAmountField = Key('keyAmountField');
const keyConfirmPayment = Key('keyConfirmPayment');
const keyCloseTransactionScreen = Key('keyCloseTransactionScreen');
// Activity view
const keyListTransactions = Key('keyListTransactions');
@ -67,8 +71,12 @@ const keyInputWord = Key('keyInputWord');
const keyGeneratedPin = Key('keyGeneratedPin');
const keyGoWalletsHome = Key('keyGoWalletsHome');
// Search
const keySearchField = Key('keySearchField');
const keyConfirmSearch = Key('keyConfirmSearch');
// Unit keys
Key keyMnemonicWord(String word) => Key('keyMnemonicWord$word');
Key keyIndexerResult(int keyId) => Key('keyIndexerResult$keyId');
Key keyIndexerResult(String keyId) => Key('keyIndexerResult$keyId');
Key keyTransaction(int keyId) => Key('keyTransaction$keyId');
Key keySearchResult(int keyId) => Key('keySearchResult$keyId');
Key keySearchResult(String keyId) => Key('keySearchResult$keyId');

View File

@ -294,7 +294,6 @@ class DuniterIndexer with ChangeNotifier {
return Text('noResult'.tr());
}
int keyID = 0;
double avatarSize = 55;
return Expanded(
child: ListView(children: <Widget>[
@ -302,7 +301,7 @@ class DuniterIndexer with ChangeNotifier {
Padding(
padding: const EdgeInsets.symmetric(horizontal: 5),
child: ListTile(
key: keyIndexerResult(keyID++),
key: keyIndexerResult(profile['id']),
horizontalTitleGap: 40,
contentPadding: const EdgeInsets.all(5),
leading: cesiumPlusProvider.defaultAvatar(avatarSize),

View File

@ -282,6 +282,7 @@ Widget geckHome(context) {
child: Material(
color: orangeC, // button color
child: InkWell(
key: keyOpenSearch,
child: Padding(
padding: const EdgeInsets.all(18),
child: Image(
@ -324,7 +325,7 @@ Widget geckHome(context) {
],
),
child: ClipOval(
key: keyManageWallets,
key: keyOpenWalletsHomme,
child: Material(
color: orangeC, // button color
child: InkWell(

View File

@ -29,7 +29,6 @@ class ContactsScreen extends StatelessWidget {
DuniterIndexer duniterIndexer =
Provider.of<DuniterIndexer>(context, listen: false);
int keyID = 0;
double avatarSize = 55;
final myContacts = contactsBox.toMap().values.toList();
@ -72,7 +71,7 @@ class ContactsScreen extends StatelessWidget {
Padding(
padding: const EdgeInsets.symmetric(horizontal: 5),
child: ListTile(
key: keySearchResult(keyID++),
key: keySearchResult('keyID++'),
horizontalTitleGap: 40,
contentPadding: const EdgeInsets.all(5),
leading: cesiumPlusProvider

View File

@ -2,6 +2,7 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart';
import 'package:flutter/material.dart';
import 'package:gecko/models/widgets_keys.dart';
// import 'package:gecko/providers/home.dart';
import 'package:gecko/providers/search.dart';
import 'package:gecko/screens/common_elements.dart';
@ -51,6 +52,7 @@ class SearchScreen extends StatelessWidget {
Padding(
padding: const EdgeInsets.symmetric(horizontal: 17),
child: TextField(
key: keySearchField,
controller: searchProvider.searchController,
autofocus: true,
maxLines: 1,
@ -91,6 +93,7 @@ class SearchScreen extends StatelessWidget {
width: 410,
height: 70,
child: ElevatedButton(
key: keyConfirmSearch,
style: ElevatedButton.styleFrom(
elevation: 4,
primary: orangeC, // background

View File

@ -32,7 +32,6 @@ class SearchResultScreen extends StatelessWidget {
DuniterIndexer duniterIndexer =
Provider.of<DuniterIndexer>(context, listen: false);
int keyID = 0;
double avatarSize = 55;
return Scaffold(
@ -95,7 +94,7 @@ class SearchResultScreen extends StatelessWidget {
padding:
const EdgeInsets.symmetric(horizontal: 5),
child: ListTile(
key: keySearchResult(keyID++),
key: keySearchResult(g1Wallet.pubkey!),
horizontalTitleGap: 40,
contentPadding: const EdgeInsets.all(5),
leading: cesiumPlusProvider

View File

@ -2,6 +2,7 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart';
import 'package:flutter/material.dart';
import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/providers/wallets_profiles.dart';
@ -263,6 +264,7 @@ class TransactionInProgress extends StatelessWidget {
width: 380 * ratio,
height: 60 * ratio,
child: ElevatedButton(
key: keyCloseTransactionScreen,
style: ElevatedButton.styleFrom(
elevation: 4,
primary: orangeC, // background

View File

@ -573,6 +573,7 @@ class WalletViewScreen extends StatelessWidget {
),
const SizedBox(height: 10),
TextField(
key: keyAmountField,
controller: walletViewProvider.payAmount,
autofocus: true,
maxLines: 1,
@ -618,6 +619,7 @@ class WalletViewScreen extends StatelessWidget {
width: double.infinity,
height: 60,
child: ElevatedButton(
key: keyConfirmPayment,
style: ElevatedButton.styleFrom(
elevation: 4,
primary: orangeC, // background