import 'package:flutter_test/flutter_test.dart'; import 'package:tmail_ui_user/features/login/presentation/login_view.dart'; import 'package:tmail_ui_user/features/starting_page/presentation/twake_welcome/twake_welcome_view.dart'; import 'package:tmail_ui_user/features/thread/presentation/thread_view.dart'; import '../base/base_scenario.dart'; import '../robots/login_robot.dart'; class LoginWithBasicAuthScenario extends BaseScenario { const LoginWithBasicAuthScenario( super.$, { required this.username, required this.hostUrl, required this.email, required this.password, } ); final String username; final String hostUrl; final String email; final String password; @override Future execute() async { final loginRobot = LoginRobot($); await $.pumpAndSettle(); await _expectWelcomeViewVisible(); await loginRobot.tapOnUseCompanyServer(); await _expectLoginViewVisible(); await loginRobot.enterEmail(username); await _expectUsernameToBeEntered(); await loginRobot.tapOnNextButton(); await _expectBaseUrlFormVisible(); await loginRobot.enterHostUrl(hostUrl); await _expectHostUrlToBeEntered(); await loginRobot.tapOnNextButton(); await _expectCredentialInputFormVisible(); await loginRobot.enterBasicAuthEmail(email); await _expectEmailToBeEntered(); await loginRobot.enterBasicAuthPassword(password); await loginRobot.loginBasicAuth(); await loginRobot.grantNotificationPermission(); await _expectThreadViewVisible(); } Future _expectWelcomeViewVisible() => expectViewVisible($(TwakeWelcomeView)); Future _expectLoginViewVisible() => expectViewVisible($(LoginView)); Future _expectBaseUrlFormVisible() async { await expectViewVisible($(LoginView).$(#base_url_form)); } Future _expectUsernameToBeEntered() async { await expectViewVisible($(find.text(username))); } Future _expectHostUrlToBeEntered() async { final urlWithoutScheme = hostUrl .replaceFirst('https://', '') .replaceFirst('http://', ''); await expectViewVisible($(find.textContaining(urlWithoutScheme))); } Future _expectCredentialInputFormVisible() async { await expectViewVisible($(LoginView).$(#credential_input_form)); } Future _expectEmailToBeEntered() async { await expectViewVisible($(find.text(email))); } Future _expectThreadViewVisible() => expectViewVisible($(ThreadView)); }