part of 'app_test.dart'; class AuthenticationTest { static Future signIn() async { patrol( 'Sign-In with fuzzed emails', (PatrolIntegrationTester tester) async { $ = tester; $.tester.printToConsole('Authentication Test - Sign-In with fuzzed emails'); final PatrolFinder throwsException = $(Dialog).$(ThrowExceptionWidget); final Fuzzer fuzzer = Fuzzer( configs: [ FuzzConfig( label: 'username', type: AcceptedTypes.string, minLength: 5, maxLength: 10, ), FuzzConfig( label: 'domain', type: AcceptedTypes.string, minLength: 5, maxLength: 10, ), FuzzConfig( label: 'password', type: AcceptedTypes.string, minLength: 5, maxLength: 10, ), ], iterations: 2, ); Map concat(String username, String domain, String password) { return { 'emailTextFormField': '${username}@${domain}.test', 'passwordTextFormField': password, }; } final credentials = fuzzer.fuzz(concat); await _unlogged($); await $.pumpWidgetAndSettle(const App()); await _navigateToSignIn($); for (var credential in credentials) { print('Função: ${credential.functionName}'); print('Entradas: ${credential.inputs}'); print('Saída: ${credential.output}'); print('Mensagem: ${credential.message}'); print('---'); await _auth(credential.output, $, throwsException); } }, ); patrol( 'Sign-In with email_app@exemplo.com', (PatrolIntegrationTester tester) async { $ = tester; $.tester.printToConsole('Authentication Test - Sign-In with email_app@exemplo.com'); final PatrolFinder throwsException = $(Dialog).$(ThrowExceptionWidget); final Map credentials = { 'emailTextFormField': 'email_app@exemplo.com', 'passwordTextFormField': '12345678', }; await _unlogged($); await $.pumpWidgetAndSettle(const App()); await _navigateToSignIn($); await _auth(credentials, $, throwsException); }, ); } static Future signUp() async { patrol( 'Sign Up - credenciais já registradas', (PatrolIntegrationTester tester) async { $ = tester; $.tester.printToConsole('Authentication Test - Sign-Up: credenciais já registradas'); final PatrolFinder throwsException = $(Dialog).$(ThrowExceptionWidget); final Map credentials = { 'nameTextFormField': 'app', 'emailTextFormField': 'email_app@exemplo.com', 'passwordTextFormField': '12345678', }; await _unlogged($); await $.pumpWidgetAndSettle(const App()); await _navigateToSignUp($); await _auth(credentials, $, throwsException); await Future.delayed(const Duration(milliseconds: 500)); }, ); patrol( 'Sign Up - credenciais novas', (PatrolIntegrationTester tester) async { $ = tester; $.tester.printToConsole('Authentication Test - Sign-Up: credenciais novas'); final PatrolFinder throwsException = $(Dialog).$(ThrowExceptionWidget); final Fuzzer fuzzer = Fuzzer( configs: [ FuzzConfig( label: 'name', type: AcceptedTypes.string, minLength: 5, maxLength: 10, ), FuzzConfig( label: 'username', type: AcceptedTypes.string, minLength: 5, maxLength: 10, ), FuzzConfig( label: 'domain', type: AcceptedTypes.string, minLength: 5, maxLength: 10, ), FuzzConfig( label: 'password', type: AcceptedTypes.string, minLength: 8, maxLength: 10, ), ], iterations: 2, ); Map concat(String name, String username, String domain, String password) { return { 'nameTextFormField': name, 'emailTextFormField': '${username}@${domain}.test', 'passwordTextFormField': password, }; } final credentials = fuzzer.fuzz(concat); await _unlogged($); await $.pumpWidgetAndSettle(const App()); for (var credential in credentials) { print('Função: ${credential.functionName}'); print('Entradas: ${credential.inputs}'); print('Saída: ${credential.output}'); print('Mensagem: ${credential.message}'); print('---'); await _navigateToSignUp($); await _auth(credential.output, $, throwsException); } }, ); } static Future signOut() async { patrol( 'Deslogar da Conta', (PatrolIntegrationTester tester) async { $ = tester; $.tester.printToConsole('Authentication Test - Sign-Out: Deslogar da Conta'); await _loggedWithMultiLocalsAccount($); await $.pumpWidget(const App()); await $.waitUntilVisible($(MenuStaggeredView)); await $(Icons.menu_rounded).waitUntilVisible().tap(); await $.waitUntilVisible($(MenuListView)); await $(Icons.exit_to_app).waitUntilVisible().tap(settlePolicy: SettlePolicy.trySettle); await Future.delayed(const Duration(milliseconds: 500)); }, ); } static void recovery() async { patrol('Open url in the app', ($) async { await _loggedWithMultiLocalsAccount($); await $.pumpWidget(const App()); await $.waitUntilVisible($(MenuStaggeredView)); // await $.native.pressHome(); // final String browserId = 'com.android.chrome'; // await $.native.openApp(appId: browserId); await $.native.openUrl(// 'https://freaccess.com.br/freaccess/alterarSenha.php?email=freaccesshub@gmail.com&token=67939240e12c31.10412525'); await $.pumpAndSettle(); Future.delayed(Duration(seconds: 3)); await $.pump(Duration(seconds: 3)); await $.pumpAndSettle(); final PatrolFinder forgotPassword = await $(#ForgotPasswordScreen).waitUntilVisible(); expect(forgotPassword, findsOneWidget); }); } } Future _auth( Map credentials, PatrolIntegrationTester $, PatrolFinder throwsException, ) async { await _enterCredentials(credentials, $); await _submit('SubmitButtonWidget', $, throwsException); } Future _enterCredentials( Map credentials, PatrolIntegrationTester $, ) async { for (var entry in credentials.entries) { await $(ValueKey(entry.key)) // .waitUntilVisible() .enterText(entry.value); await $.pumpAndSettle(); } } Future _submit(String key, PatrolIntegrationTester $, PatrolFinder throwsException) async { await $(ValueKey(key)) // .waitUntilVisible() .tap(); await $.pump(Duration(milliseconds: 1000)); if ($(ValueKey('ThrowExceptionWidget')).exists) { // expect(throwsException, findsOneWidget); await $(ValueKey('ThrowExceptionWidget')) // .waitUntilVisible() .tap(); } else { _navigateBackUsingSystemGesture(); } } String _generateRandomString(int length) { const chars = 'abcdefghijklmnopqrstuvwxyz0123456789'; final rand = Random(); return List.generate(length, (index) => chars[rand.nextInt(chars.length)]).join(); }