forked from axiom-team/gecko
test: execute a transaction to ChristCosmic
This commit is contained in:
parent
cbbd4eee34
commit
fc80f5693c
|
@ -1,10 +1,9 @@
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
import 'package:gecko/models/widgets_keys.dart';
|
import 'package:gecko/models/widgets_keys.dart';
|
||||||
import 'package:integration_test/integration_test.dart';
|
import 'package:integration_test/integration_test.dart';
|
||||||
|
|
||||||
import 'package:gecko/main.dart' as app;
|
import 'package:gecko/main.dart' as app;
|
||||||
|
|
||||||
import 'tests_utility.dart';
|
import 'tests_utility.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
|
@ -15,23 +14,28 @@ void main() {
|
||||||
app.main();
|
app.main();
|
||||||
await tester.pumpAndSettle(const Duration(seconds: 1));
|
await tester.pumpAndSettle(const Duration(seconds: 1));
|
||||||
|
|
||||||
// await deleteAllWallets(tester);
|
// Delete all existing chests
|
||||||
|
await deleteAllWallets(tester);
|
||||||
|
|
||||||
|
// Restore a chest
|
||||||
await restoreChest(tester);
|
await restoreChest(tester);
|
||||||
});
|
|
||||||
testWidgets('Send 10 ĞD to ChristCosmic', (tester) async {
|
// Execute a transaction to ChristCosmic
|
||||||
// await goKey(tester, buttonKey);
|
await payChrist(tester);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Customs actions
|
// Customs actions
|
||||||
Future deleteAllWallets(WidgetTester tester) async {
|
Future deleteAllWallets(WidgetTester tester) async {
|
||||||
|
if (await isPresent(tester, 'Rechercher')) {
|
||||||
await goKey(tester, keyDrawerMenu);
|
await goKey(tester, keyDrawerMenu);
|
||||||
await goKey(tester, keyParameters);
|
await goKey(tester, keyParameters);
|
||||||
await goKey(tester, keyDeleteAllWallets);
|
await goKey(tester, keyDeleteAllWallets);
|
||||||
await goKey(tester, keyConfirm);
|
await goKey(tester, keyConfirm);
|
||||||
await tester.pumpAndSettle();
|
await tester.pumpAndSettle();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Future restoreChest(WidgetTester tester) async {
|
Future restoreChest(WidgetTester tester) async {
|
||||||
await goKey(tester, keyRestoreChest);
|
await goKey(tester, keyRestoreChest);
|
||||||
|
@ -45,7 +49,8 @@ Future restoreChest(WidgetTester tester) async {
|
||||||
await goKey(tester, keyGoNext);
|
await goKey(tester, keyGoNext);
|
||||||
await goKey(tester, keyGoNext);
|
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 enterText(tester, keyPinForm, 'AAAAA');
|
||||||
await waitFor(tester, 'Accéder à mon coffre');
|
await waitFor(tester, 'Accéder à mon coffre');
|
||||||
await goKey(tester, keyGoWalletsHome);
|
await goKey(tester, keyGoWalletsHome);
|
||||||
|
@ -53,3 +58,21 @@ Future restoreChest(WidgetTester tester) async {
|
||||||
await goBack(tester);
|
await goBack(tester);
|
||||||
await waitFor(tester, "y'a pas de lézard");
|
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');
|
||||||
|
}
|
||||||
|
|
|
@ -46,6 +46,26 @@ Future<void> waitFor(
|
||||||
} while (finder.evaluate().isEmpty);
|
} 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 {
|
extension Truncate on String {
|
||||||
String truncate({required int max, String suffix = ''}) {
|
String truncate({required int max, String suffix = ''}) {
|
||||||
return length < max
|
return length < max
|
||||||
|
|
|
@ -10,7 +10,8 @@ const keyConfirm = Key('keyConfirm');
|
||||||
const keyParameters = Key('keyParameters');
|
const keyParameters = Key('keyParameters');
|
||||||
const keyContacts = Key('keyContacts');
|
const keyContacts = Key('keyContacts');
|
||||||
const keyDrawerMenu = Key('keyDrawerMenu');
|
const keyDrawerMenu = Key('keyDrawerMenu');
|
||||||
const keyManageWallets = Key('keyManageWallets');
|
const keyOpenWalletsHomme = Key('keyOpenWalletsHomme');
|
||||||
|
const keyOpenSearch = Key('keyOpenSearch');
|
||||||
const keyRestoreChest = Key('keyRestoreChest');
|
const keyRestoreChest = Key('keyRestoreChest');
|
||||||
|
|
||||||
// Wallets home
|
// Wallets home
|
||||||
|
@ -46,6 +47,9 @@ const keyImportChest = Key('keyImportChest');
|
||||||
const keyViewActivity = Key('keyViewActivity');
|
const keyViewActivity = Key('keyViewActivity');
|
||||||
const keyCertify = Key('keyCertify');
|
const keyCertify = Key('keyCertify');
|
||||||
const keyPay = Key('keyPay');
|
const keyPay = Key('keyPay');
|
||||||
|
const keyAmountField = Key('keyAmountField');
|
||||||
|
const keyConfirmPayment = Key('keyConfirmPayment');
|
||||||
|
const keyCloseTransactionScreen = Key('keyCloseTransactionScreen');
|
||||||
|
|
||||||
// Activity view
|
// Activity view
|
||||||
const keyListTransactions = Key('keyListTransactions');
|
const keyListTransactions = Key('keyListTransactions');
|
||||||
|
@ -67,8 +71,12 @@ const keyInputWord = Key('keyInputWord');
|
||||||
const keyGeneratedPin = Key('keyGeneratedPin');
|
const keyGeneratedPin = Key('keyGeneratedPin');
|
||||||
const keyGoWalletsHome = Key('keyGoWalletsHome');
|
const keyGoWalletsHome = Key('keyGoWalletsHome');
|
||||||
|
|
||||||
|
// Search
|
||||||
|
const keySearchField = Key('keySearchField');
|
||||||
|
const keyConfirmSearch = Key('keyConfirmSearch');
|
||||||
|
|
||||||
// Unit keys
|
// Unit keys
|
||||||
Key keyMnemonicWord(String word) => Key('keyMnemonicWord$word');
|
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 keyTransaction(int keyId) => Key('keyTransaction$keyId');
|
||||||
Key keySearchResult(int keyId) => Key('keySearchResult$keyId');
|
Key keySearchResult(String keyId) => Key('keySearchResult$keyId');
|
||||||
|
|
|
@ -294,7 +294,6 @@ class DuniterIndexer with ChangeNotifier {
|
||||||
return Text('noResult'.tr());
|
return Text('noResult'.tr());
|
||||||
}
|
}
|
||||||
|
|
||||||
int keyID = 0;
|
|
||||||
double avatarSize = 55;
|
double avatarSize = 55;
|
||||||
return Expanded(
|
return Expanded(
|
||||||
child: ListView(children: <Widget>[
|
child: ListView(children: <Widget>[
|
||||||
|
@ -302,7 +301,7 @@ class DuniterIndexer with ChangeNotifier {
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 5),
|
padding: const EdgeInsets.symmetric(horizontal: 5),
|
||||||
child: ListTile(
|
child: ListTile(
|
||||||
key: keyIndexerResult(keyID++),
|
key: keyIndexerResult(profile['id']),
|
||||||
horizontalTitleGap: 40,
|
horizontalTitleGap: 40,
|
||||||
contentPadding: const EdgeInsets.all(5),
|
contentPadding: const EdgeInsets.all(5),
|
||||||
leading: cesiumPlusProvider.defaultAvatar(avatarSize),
|
leading: cesiumPlusProvider.defaultAvatar(avatarSize),
|
||||||
|
|
|
@ -282,6 +282,7 @@ Widget geckHome(context) {
|
||||||
child: Material(
|
child: Material(
|
||||||
color: orangeC, // button color
|
color: orangeC, // button color
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
|
key: keyOpenSearch,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.all(18),
|
padding: const EdgeInsets.all(18),
|
||||||
child: Image(
|
child: Image(
|
||||||
|
@ -324,7 +325,7 @@ Widget geckHome(context) {
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
child: ClipOval(
|
child: ClipOval(
|
||||||
key: keyManageWallets,
|
key: keyOpenWalletsHomme,
|
||||||
child: Material(
|
child: Material(
|
||||||
color: orangeC, // button color
|
color: orangeC, // button color
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
|
|
|
@ -29,7 +29,6 @@ class ContactsScreen extends StatelessWidget {
|
||||||
DuniterIndexer duniterIndexer =
|
DuniterIndexer duniterIndexer =
|
||||||
Provider.of<DuniterIndexer>(context, listen: false);
|
Provider.of<DuniterIndexer>(context, listen: false);
|
||||||
|
|
||||||
int keyID = 0;
|
|
||||||
double avatarSize = 55;
|
double avatarSize = 55;
|
||||||
|
|
||||||
final myContacts = contactsBox.toMap().values.toList();
|
final myContacts = contactsBox.toMap().values.toList();
|
||||||
|
@ -72,7 +71,7 @@ class ContactsScreen extends StatelessWidget {
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 5),
|
padding: const EdgeInsets.symmetric(horizontal: 5),
|
||||||
child: ListTile(
|
child: ListTile(
|
||||||
key: keySearchResult(keyID++),
|
key: keySearchResult('keyID++'),
|
||||||
horizontalTitleGap: 40,
|
horizontalTitleGap: 40,
|
||||||
contentPadding: const EdgeInsets.all(5),
|
contentPadding: const EdgeInsets.all(5),
|
||||||
leading: cesiumPlusProvider
|
leading: cesiumPlusProvider
|
||||||
|
|
|
@ -2,6 +2,7 @@ import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:gecko/globals.dart';
|
import 'package:gecko/globals.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gecko/models/widgets_keys.dart';
|
||||||
// import 'package:gecko/providers/home.dart';
|
// import 'package:gecko/providers/home.dart';
|
||||||
import 'package:gecko/providers/search.dart';
|
import 'package:gecko/providers/search.dart';
|
||||||
import 'package:gecko/screens/common_elements.dart';
|
import 'package:gecko/screens/common_elements.dart';
|
||||||
|
@ -51,6 +52,7 @@ class SearchScreen extends StatelessWidget {
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 17),
|
padding: const EdgeInsets.symmetric(horizontal: 17),
|
||||||
child: TextField(
|
child: TextField(
|
||||||
|
key: keySearchField,
|
||||||
controller: searchProvider.searchController,
|
controller: searchProvider.searchController,
|
||||||
autofocus: true,
|
autofocus: true,
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
|
@ -91,6 +93,7 @@ class SearchScreen extends StatelessWidget {
|
||||||
width: 410,
|
width: 410,
|
||||||
height: 70,
|
height: 70,
|
||||||
child: ElevatedButton(
|
child: ElevatedButton(
|
||||||
|
key: keyConfirmSearch,
|
||||||
style: ElevatedButton.styleFrom(
|
style: ElevatedButton.styleFrom(
|
||||||
elevation: 4,
|
elevation: 4,
|
||||||
primary: orangeC, // background
|
primary: orangeC, // background
|
||||||
|
|
|
@ -32,7 +32,6 @@ class SearchResultScreen extends StatelessWidget {
|
||||||
DuniterIndexer duniterIndexer =
|
DuniterIndexer duniterIndexer =
|
||||||
Provider.of<DuniterIndexer>(context, listen: false);
|
Provider.of<DuniterIndexer>(context, listen: false);
|
||||||
|
|
||||||
int keyID = 0;
|
|
||||||
double avatarSize = 55;
|
double avatarSize = 55;
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
|
@ -95,7 +94,7 @@ class SearchResultScreen extends StatelessWidget {
|
||||||
padding:
|
padding:
|
||||||
const EdgeInsets.symmetric(horizontal: 5),
|
const EdgeInsets.symmetric(horizontal: 5),
|
||||||
child: ListTile(
|
child: ListTile(
|
||||||
key: keySearchResult(keyID++),
|
key: keySearchResult(g1Wallet.pubkey!),
|
||||||
horizontalTitleGap: 40,
|
horizontalTitleGap: 40,
|
||||||
contentPadding: const EdgeInsets.all(5),
|
contentPadding: const EdgeInsets.all(5),
|
||||||
leading: cesiumPlusProvider
|
leading: cesiumPlusProvider
|
||||||
|
|
|
@ -2,6 +2,7 @@ import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:gecko/globals.dart';
|
import 'package:gecko/globals.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gecko/models/widgets_keys.dart';
|
||||||
import 'package:gecko/providers/my_wallets.dart';
|
import 'package:gecko/providers/my_wallets.dart';
|
||||||
import 'package:gecko/providers/substrate_sdk.dart';
|
import 'package:gecko/providers/substrate_sdk.dart';
|
||||||
import 'package:gecko/providers/wallets_profiles.dart';
|
import 'package:gecko/providers/wallets_profiles.dart';
|
||||||
|
@ -263,6 +264,7 @@ class TransactionInProgress extends StatelessWidget {
|
||||||
width: 380 * ratio,
|
width: 380 * ratio,
|
||||||
height: 60 * ratio,
|
height: 60 * ratio,
|
||||||
child: ElevatedButton(
|
child: ElevatedButton(
|
||||||
|
key: keyCloseTransactionScreen,
|
||||||
style: ElevatedButton.styleFrom(
|
style: ElevatedButton.styleFrom(
|
||||||
elevation: 4,
|
elevation: 4,
|
||||||
primary: orangeC, // background
|
primary: orangeC, // background
|
||||||
|
|
|
@ -573,6 +573,7 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
),
|
),
|
||||||
const SizedBox(height: 10),
|
const SizedBox(height: 10),
|
||||||
TextField(
|
TextField(
|
||||||
|
key: keyAmountField,
|
||||||
controller: walletViewProvider.payAmount,
|
controller: walletViewProvider.payAmount,
|
||||||
autofocus: true,
|
autofocus: true,
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
|
@ -618,6 +619,7 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
width: double.infinity,
|
width: double.infinity,
|
||||||
height: 60,
|
height: 60,
|
||||||
child: ElevatedButton(
|
child: ElevatedButton(
|
||||||
|
key: keyConfirmPayment,
|
||||||
style: ElevatedButton.styleFrom(
|
style: ElevatedButton.styleFrom(
|
||||||
elevation: 4,
|
elevation: 4,
|
||||||
primary: orangeC, // background
|
primary: orangeC, // background
|
||||||
|
|
Loading…
Reference in New Issue