diff --git a/integration_test/base/base_test_scenario.dart b/integration_test/base/base_test_scenario.dart index 30ed32f58d..b69d867b7a 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 0000000000..9e45e7d803 --- /dev/null +++ b/integration_test/mixin/provisioning_label_scenario_mixin.dart @@ -0,0 +1,90 @@ +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 (dashboardController == null || + createLabelInteractor == null || + accountId == null) { + log( + 'ProvisioningLabelScenarioMixin::provisionLabels ' + 'skipped: missing dashboardController, CreateNewLabelInteractor, or accountId', + ); + return []; + } + + final List results = await Future.wait(provisioningLabels.map( + (label) => _createLabel(createLabelInteractor, accountId, label), + )); + + final List