Improve test mecanic; Continue test until 2nd derivation view

This commit is contained in:
poka 2021-04-27 11:51:14 +02:00
parent c77b776d59
commit 1a604bfb5a
5 changed files with 105 additions and 69 deletions

View File

@ -9,11 +9,12 @@
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application
<application android:requestLegacyExternalStorage="true"
android:name="io.flutter.app.FlutterApplication"
android:label="Ğecko">
<!-- android:icon="@mipmap/ic_launcher"> -->
<activity
android:requestLegacyExternalStorage="true"
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"

View File

@ -63,6 +63,7 @@ class WalletsHome extends StatelessWidget {
width: 80.0,
child: FittedBox(
child: FloatingActionButton(
key: Key('addDerivation'),
heroTag: "buttonGenerateWallet",
onPressed: () {
showDialog(
@ -223,6 +224,7 @@ class WalletsHome extends StatelessWidget {
Padding(
padding: const EdgeInsets.all(8.0),
child: ElevatedButton(
key: Key('validDerivation'),
style: ElevatedButton.styleFrom(
elevation: 1,
primary: Color(0xffFFD68E), // background

View File

@ -70,6 +70,7 @@ class OnboardingStepFourteen extends StatelessWidget {
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 30),
child: PinCodeTextField(
key: Key('formKey2'),
autoFocus: true,
appContext: context,
pastedTextStyle: TextStyle(
@ -77,7 +78,7 @@ class OnboardingStepFourteen extends StatelessWidget {
fontWeight: FontWeight.bold,
),
length: _pinLenght,
obscureText: false,
obscureText: true,
obscuringCharacter: '*',
animationType: AnimationType.fade,
validator: (v) {

View File

@ -56,6 +56,7 @@ class OnboardingStepNine extends StatelessWidget {
width: 400,
height: 62,
child: ElevatedButton(
key: Key('generateMnemonic'),
style: ElevatedButton.styleFrom(
elevation: 5,
primary: Color(0xffFFD58D),

View File

@ -1,5 +1,6 @@
// Imports the Flutter Driver API.
import 'dart:async';
import 'dart:io';
import 'package:flutter_driver/flutter_driver.dart';
// import 'package:flutter_test/flutter_test.dart';
@ -28,6 +29,17 @@ void main() {
}
});
// Function to tap the widget by key
Future tapOn(String key) async {
await driver.tap(find.byValueKey(key));
}
Future<String> getText(String text) async {
return await driver.getText(find.byValueKey(
text,
));
}
test('OnBoarding - Open wallets management', (
{timeout: const Duration(seconds: 2)}) async {
// await driver.runUnsynchronized(() async { // Needed if we want to manage async drivers
@ -48,12 +60,12 @@ void main() {
test('OnBoarding - Go to create restore sentance', (
{timeout: const Duration(seconds: 5)}) async {
await driver.tap(find.byValueKey('goStep1'));
await driver.tap(find.byValueKey('goStep2'));
await driver.tap(find.byValueKey('goStep3'));
await driver.tap(find.byValueKey('goStep4'));
await driver.tap(find.byValueKey('goStep5'));
await driver.tap(find.byValueKey('goStep6'));
await tapOn('goStep1');
await tapOn('goStep2');
await tapOn('goStep3');
await tapOn('goStep4');
await tapOn('goStep5');
await tapOn('goStep6');
expect(
await driver.getText(find.byValueKey(
@ -64,95 +76,114 @@ void main() {
test('OnBoarding - Generate sentance and confirme it', (
{timeout: const Duration(seconds: 5)}) async {
await driver.tap(find.byValueKey('goStep7'));
await tapOn('goStep7');
print('THE SECOND WORD IS:');
while (await driver.getText(find.byValueKey(
'word1',
)) ==
'...') {
while (await getText('word1') == '...') {
print('Waiting for Mnemonic generation...');
await Future.delayed(const Duration(seconds: 1));
await Future.delayed(const Duration(milliseconds: 100));
}
Future selectWord() async {
List words = [for (var i = 1; i <= 13; i += 1) i];
for (var j = 1; j < 13; j++) {
words[j] = await driver.getText(find.byValueKey(
'word$j',
));
words[j] = await getText('word$j');
}
// print word 1, 2 and 12
// print(words[1] + words[2] + words[12]);
expect(
await driver.getText(find.byValueKey(
'step7',
)),
"C'est le moment de noter votre phrase !");
await getText('step7'), "C'est le moment de noter votre phrase !");
await driver.tap(find.byValueKey('goStep8'));
await tapOn('goStep8');
await Future.delayed(const Duration(milliseconds: 50));
final String goodWord = words[int.parse(
await driver.getText(
find.byValueKey(
'askedWord',
),
),
String goodWord = words[int.parse(
await getText('askedWord'),
)];
// Enter the expected word
await driver.enterText(goodWord);
await driver.tap(find.byValueKey('goStep9'));
// Check if word is valid
await driver.waitFor(find.text("C'est le bon mot !"));
// Continue onboarding workflow
await tapOn('goStep9');
}
await selectWord();
//Go back 2 times to mnemonic generation screen
await goBack();
await goBack();
await Future.delayed(const Duration(milliseconds: 100));
// Generate 3 times mnemonic
await tapOn('generateMnemonic');
await tapOn('generateMnemonic');
await tapOn('generateMnemonic');
await Future.delayed(const Duration(milliseconds: 500));
await selectWord();
});
test('OnBoarding - Generate secret code and confirm it', (
{timeout: const Duration(seconds: 5)}) async {
expect(
await driver.getText(find.byValueKey(
'step9',
)),
expect(await getText('step9'),
"Super !\n\nJe vais maintenant créer votre code secret. \n\nVotre code secret chiffre votre trousseau de clefs, ce qui le rend inutilisable par dautres, par exemple si vous perdez votre téléphone ou si on vous le vole.");
await driver.tap(find.byValueKey('goStep10'));
await driver.tap(find.byValueKey('goStep11'));
await tapOn('goStep10');
await tapOn('goStep11');
while (await driver.getText(find.byValueKey(
'generatedPin',
)) ==
'') {
while (await getText('generatedPin') == '') {
print('Waiting for pin code generation...');
await Future.delayed(const Duration(seconds: 1));
await Future.delayed(const Duration(milliseconds: 100));
}
final pinCode = await driver.getText(
find.byValueKey(
'generatedPin',
),
);
final pinCode = await getText('generatedPin');
await driver.tap(find.byValueKey('goStep12'));
await Future.delayed(const Duration(seconds: 1));
await tapOn('goStep12');
await Future.delayed(const Duration(milliseconds: 300));
// //Enter bad secret code
// await driver.enterText('abcde');
// await tapOn('formKey');
// await Future.delayed(const Duration(milliseconds: 4000));
// await tapOn('formKey2');
//Enter good secret code
await driver.enterText(pinCode);
expect(
await driver.getText(find.byValueKey(
'step13',
)),
expect(await getText('step13'),
"Top !\n\nVotre trousseau de clef et votre portefeuille ont été créés avec un immense succès.\n\nFélicitations !");
});
test('OnBoarding - Create a derivation and display it', (
test('My wallets - Create a derivation and display it', (
{timeout: const Duration(seconds: 5)}) async {
await driver.tap(find.byValueKey('goWalletHome'));
await tapOn('goWalletHome');
expect(
await driver.getText(find.byValueKey(
'myWallets',
)),
"Mes portefeuilles");
expect(await getText('myWallets'), "Mes portefeuilles");
await Future.delayed(const Duration(milliseconds: 300));
// Add a second derivation
await tapOn('addDerivation');
await Future.delayed(const Duration(milliseconds: 50));
await driver.enterText('Derivation 2');
await tapOn('validDerivation');
await Future.delayed(const Duration(milliseconds: 300));
await driver.tap(find.text('Derivation 2'));
// Wait 3 seconds at the end
await Future.delayed(const Duration(seconds: 3));
});
});
}
// Function to go back to previous screen
Future goBack() async {
await Process.run(
'adb',
<String>['shell', 'input', 'keyevent', 'KEYCODE_BACK'],
runInShell: true,
);
}