From 2052fdbe5edbc73710bdd6b31939ff761195523f Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 7 Jan 2026 12:10:04 +0700 Subject: [PATCH] TF-4227 Add integration test on mobile for case display_view_with_all_email_with_tag_scenario --- integration_test/base/base_test_scenario.dart | 6 + .../provisioning_label_scenario_mixin.dart | 88 +++++++++ .../mixin/scenario_utils_mixin.dart | 2 + .../models/provisioning_email.dart | 4 + .../models/provisioning_label.dart | 9 + integration_test/robots/label_robot.dart | 14 ++ ...view_with_all_email_with_tag_scenario.dart | 82 +++++++++ ...lay_view_with_all_email_with_tag_test.dart | 10 ++ .../lib/extensions/list_label_extension.dart | 4 + .../create_email_request_extension.dart | 32 ++-- .../model/create_email_request.dart | 4 + .../presentation_mailbox_extension.dart | 2 +- .../create_email_request_extension_test.dart | 169 ++++++++++++++++++ 13 files changed, 415 insertions(+), 11 deletions(-) create mode 100644 integration_test/mixin/provisioning_label_scenario_mixin.dart create mode 100644 integration_test/models/provisioning_label.dart create mode 100644 integration_test/robots/label_robot.dart create mode 100644 integration_test/scenarios/labels/display_view_with_all_email_with_tag_scenario.dart create mode 100644 integration_test/tests/labels/display_view_with_all_email_with_tag_test.dart diff --git a/integration_test/base/base_test_scenario.dart b/integration_test/base/base_test_scenario.dart index 30ed32f58..b69d867b7 100644 --- a/integration_test/base/base_test_scenario.dart +++ b/integration_test/base/base_test_scenario.dart @@ -10,9 +10,15 @@ abstract class BaseTestScenario extends BaseScenario @override Future execute() async { + await setupPreLogin(); await executeLoginScenario(); await runTestLogic(); + await disposeAfterTest(); } + Future setupPreLogin() async {} + Future runTestLogic(); + + Future disposeAfterTest() async {} } diff --git a/integration_test/mixin/provisioning_label_scenario_mixin.dart b/integration_test/mixin/provisioning_label_scenario_mixin.dart new file mode 100644 index 000000000..395302d7a --- /dev/null +++ b/integration_test/mixin/provisioning_label_scenario_mixin.dart @@ -0,0 +1,88 @@ +import 'package:core/utils/app_logger.dart'; +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:labels/labels.dart'; +import 'package:tmail_ui_user/features/labels/domain/state/create_new_label_state.dart'; +import 'package:tmail_ui_user/features/labels/domain/usecases/create_new_label_interactor.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart'; +import 'package:tmail_ui_user/main/routes/route_navigation.dart'; + +import '../models/provisioning_email.dart'; +import '../models/provisioning_label.dart'; + +mixin ProvisioningLabelScenarioMixin { + Future> provisionLabels( + List provisioningLabels, + ) async { + if (provisioningLabels.isEmpty) { + return []; + } + + final dashboardController = getBinding(); + final createLabelInteractor = getBinding(); + + final accountId = dashboardController?.accountId.value; + final labelController = dashboardController?.labelController; + + if (createLabelInteractor == null || accountId == null) { + log( + 'ProvisioningLabelScenarioMixin::provisionLabels ' + 'skipped: missing CreateNewLabelInteractor or accountId', + ); + return []; + } + + final List results = await Future.wait(provisioningLabels.map( + (label) => _createLabel(createLabelInteractor, accountId, label), + )); + + final List