Add integration test for change language
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -0,0 +1,23 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/presentation/language_and_region/extensions/locale_extension.dart';
|
||||||
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
|
import '../base/core_robot.dart';
|
||||||
|
|
||||||
|
class LanguageRobot extends CoreRobot {
|
||||||
|
LanguageRobot(super.$);
|
||||||
|
|
||||||
|
Future<void> openLanguageContextMenu() async {
|
||||||
|
await $(#language_drop_down_button).tap();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> selectLanguage(
|
||||||
|
Locale locale,
|
||||||
|
AppLocalizations appLocalizations,
|
||||||
|
) async {
|
||||||
|
await $(find.text(
|
||||||
|
'${locale.getLanguageNameByCurrentLocale(appLocalizations)} - ${locale.getSourceLanguageName()}'))
|
||||||
|
.tap();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -18,4 +18,8 @@ class MailboxMenuRobot extends CoreRobot {
|
|||||||
.$(find.text(name))
|
.$(find.text(name))
|
||||||
.tap();
|
.tap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> openSetting() async {
|
||||||
|
await $(#user_avatar).tap();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
|
||||||
|
import '../base/core_robot.dart';
|
||||||
|
|
||||||
|
class SettingRobot extends CoreRobot {
|
||||||
|
SettingRobot(super.$);
|
||||||
|
|
||||||
|
Future<void> openLanguageMenuItem() async {
|
||||||
|
await $(#setting_language_region).tap();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
import 'package:duration/duration.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
|
import '../../../base/base_test_scenario.dart';
|
||||||
|
import '../../../robots/language_robot.dart';
|
||||||
|
import '../../../robots/mailbox_menu_robot.dart';
|
||||||
|
import '../../../robots/setting_robot.dart';
|
||||||
|
import '../../../robots/thread_robot.dart';
|
||||||
|
|
||||||
|
class ChangeLanguageScenario extends BaseTestScenario {
|
||||||
|
const ChangeLanguageScenario(super.$);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> runTestLogic() async {
|
||||||
|
final threadRobot = ThreadRobot($);
|
||||||
|
final mailboxMenuRobot = MailboxMenuRobot($);
|
||||||
|
final settingRobot = SettingRobot($);
|
||||||
|
final languageRobot = LanguageRobot($);
|
||||||
|
final appLocalizations = AppLocalizations();
|
||||||
|
|
||||||
|
await threadRobot.openMailbox();
|
||||||
|
await _expectUserAvatarVisible();
|
||||||
|
|
||||||
|
await mailboxMenuRobot.openSetting();
|
||||||
|
await _expectSettingViewVisible(appLocalizations);
|
||||||
|
await $.pumpAndSettle(duration: seconds(1));
|
||||||
|
|
||||||
|
await _expectLanguageMenuItemVisible();
|
||||||
|
await settingRobot.openLanguageMenuItem();
|
||||||
|
await $.pumpAndSettle(duration: seconds(1));
|
||||||
|
await _expectLanguageViewWithEnglishTitleVisible();
|
||||||
|
|
||||||
|
await languageRobot.openLanguageContextMenu();
|
||||||
|
await _expectLanguageContextMenuVisible();
|
||||||
|
|
||||||
|
await languageRobot.selectLanguage(const Locale('vi'), appLocalizations);
|
||||||
|
await $.pumpAndSettle(duration: seconds(3));
|
||||||
|
await _expectLanguageViewWithVietnameseTitleVisible();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _expectUserAvatarVisible() => expectViewVisible($(#user_avatar));
|
||||||
|
|
||||||
|
Future<void> _expectSettingViewVisible(AppLocalizations appLocalizations) =>
|
||||||
|
expectViewVisible($(find.text(appLocalizations.settings)));
|
||||||
|
|
||||||
|
Future<void> _expectLanguageMenuItemVisible() async {
|
||||||
|
await $(#setting_language_region).scrollTo(
|
||||||
|
scrollDirection: AxisDirection.down,
|
||||||
|
);
|
||||||
|
await expectViewVisible($(#setting_language_region));
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _expectLanguageViewWithEnglishTitleVisible() =>
|
||||||
|
expectViewVisible($(find.text('Language')));
|
||||||
|
|
||||||
|
Future<void> _expectLanguageContextMenuVisible() async {
|
||||||
|
await expectViewVisible($(#language_context_menu));
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _expectLanguageViewWithVietnameseTitleVisible() =>
|
||||||
|
expectViewVisible($(find.text('Ngôn ngữ')));
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
import '../../../base/test_base.dart';
|
||||||
|
import '../../../scenarios/setting/language/change_language_scenario.dart';
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
TestBase().runPatrolTest(
|
||||||
|
description: 'Should see title in Setting change language when successfully selecting another language',
|
||||||
|
scenarioBuilder: ($) => ChangeLanguageScenario($),
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -49,6 +49,7 @@ class MailboxAppBar extends StatelessWidget {
|
|||||||
onTapAction: openAppGridAction!,
|
onTapAction: openAppGridAction!,
|
||||||
),
|
),
|
||||||
UserAvatarBuilder(
|
UserAvatarBuilder(
|
||||||
|
key: const Key('user_avatar'),
|
||||||
username: username.firstLetterToUpperCase,
|
username: username.firstLetterToUpperCase,
|
||||||
padding: const EdgeInsetsDirectional.only(start: 4),
|
padding: const EdgeInsetsDirectional.only(start: 4),
|
||||||
onTapAction: openSettingsAction,
|
onTapAction: openSettingsAction,
|
||||||
|
|||||||
+1
@@ -88,6 +88,7 @@ class LanguageAndRegionController extends BaseController {
|
|||||||
}).toList();
|
}).toList();
|
||||||
|
|
||||||
openBottomSheetContextMenuAction(
|
openBottomSheetContextMenuAction(
|
||||||
|
key: const Key('language_context_menu'),
|
||||||
context: context,
|
context: context,
|
||||||
itemActions: contextMenuActions,
|
itemActions: contextMenuActions,
|
||||||
onContextMenuActionClick: (menuAction) {
|
onContextMenuActionClick: (menuAction) {
|
||||||
|
|||||||
+1
@@ -132,6 +132,7 @@ class _ChangeLanguageButtonWidgetState extends State<ChangeLanguageButtonWidget>
|
|||||||
|
|
||||||
Widget _buildMobileLanguageMenu(BuildContext context) {
|
Widget _buildMobileLanguageMenu(BuildContext context) {
|
||||||
return Obx(() => TMailDropDownWidget(
|
return Obx(() => TMailDropDownWidget(
|
||||||
|
key: const Key('language_drop_down_button'),
|
||||||
text: _languageAndRegionController
|
text: _languageAndRegionController
|
||||||
.languageSelected
|
.languageSelected
|
||||||
.value
|
.value
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ class SettingsFirstLevelView extends GetWidget<SettingsController> {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return SingleChildScrollView(
|
return SingleChildScrollView(
|
||||||
|
key: const Key('setting_menu'),
|
||||||
child: Column(children: [
|
child: Column(children: [
|
||||||
Obx(() => UserInformationWidget(
|
Obx(() => UserInformationWidget(
|
||||||
userName: controller.manageAccountDashboardController.accountId.value != null
|
userName: controller.manageAccountDashboardController.accountId.value != null
|
||||||
@@ -141,6 +142,7 @@ class SettingsFirstLevelView extends GetWidget<SettingsController> {
|
|||||||
endIndent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils)
|
endIndent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils)
|
||||||
),
|
),
|
||||||
SettingFirstLevelTileBuilder(
|
SettingFirstLevelTileBuilder(
|
||||||
|
key: const Key('setting_language_region'),
|
||||||
AccountMenuItem.languageAndRegion.getName(AppLocalizations.of(context)),
|
AccountMenuItem.languageAndRegion.getName(AppLocalizations.of(context)),
|
||||||
AccountMenuItem.languageAndRegion.getIcon(controller.imagePaths),
|
AccountMenuItem.languageAndRegion.getIcon(controller.imagePaths),
|
||||||
() => controller.selectSettings(AccountMenuItem.languageAndRegion)
|
() => controller.selectSettings(AccountMenuItem.languageAndRegion)
|
||||||
|
|||||||
Reference in New Issue
Block a user