diff --git a/integration_test/robots/email_robot.dart b/integration_test/robots/email_robot.dart index 2675b81b5..6e3981b14 100644 --- a/integration_test/robots/email_robot.dart +++ b/integration_test/robots/email_robot.dart @@ -21,6 +21,14 @@ class EmailRobot extends CoreRobot { await $(#reply_email_button).tap(); } + Future onTapReplyToListEmail() async { + await $(#reply_to_list_email_button).tap(); + } + + Future onTapReplyAllEmail() async { + await $(#reply_all_emails_button).tap(); + } + Future onTapBackButton() async { await $(find.byType(EmailViewBackButton)).first.tap(); } diff --git a/integration_test/scenarios/email_detailed/reply_all_email_scenario.dart b/integration_test/scenarios/email_detailed/reply_all_email_scenario.dart new file mode 100644 index 000000000..109481ac9 --- /dev/null +++ b/integration_test/scenarios/email_detailed/reply_all_email_scenario.dart @@ -0,0 +1,112 @@ + +import 'package:flutter_test/flutter_test.dart'; +import 'package:model/email/prefix_email_address.dart'; +import 'package:tmail_ui_user/features/composer/presentation/composer_view.dart'; +import 'package:tmail_ui_user/features/composer/presentation/widgets/recipient_composer_widget.dart'; +import 'package:tmail_ui_user/features/composer/presentation/widgets/subject_composer_widget.dart'; +import 'package:tmail_ui_user/features/email/presentation/email_view.dart'; +import 'package:tmail_ui_user/features/search/email/presentation/search_email_view.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; + +import '../../base/base_test_scenario.dart'; +import '../../robots/composer_robot.dart'; +import '../../robots/email_robot.dart'; +import '../../robots/search_robot.dart'; +import '../../robots/thread_robot.dart'; + +class ReplyAllEmailScenario extends BaseTestScenario { + + const ReplyAllEmailScenario(super.$); + + static const String queryString = 'Reply all email'; + + @override + Future runTestLogic() async { + final threadRobot = ThreadRobot($); + final searchRobot = SearchRobot($); + final emailRobot = EmailRobot($); + final composerRobot = ComposerRobot($); + final appLocalizations = AppLocalizations(); + + await threadRobot.openSearchView(); + await _expectSearchViewVisible(); + + await searchRobot.enterQueryString(queryString); + await searchRobot.tapOnShowAllResultsText(); + await _expectSearchResultEmailListVisible(); + + await searchRobot.openEmailWithSubject(queryString); + await _expectEmailViewVisible(); + await _expectReplyAllEmailButtonVisible(); + + await emailRobot.onTapReplyAllEmail(); + await _expectComposerViewVisible(); + + await composerRobot.grantContactPermission(); + + await _expectComposerSubjectDisplayedCorrectly(appLocalizations); + await _expectToFieldContainListEmailAddressCorrectly(); + await _expectCcFieldContainListEmailAddressCorrectly(); + await _expectBccFieldContainListEmailAddressCorrectly(); + } + + Future _expectSearchViewVisible() async { + await expectViewVisible($(SearchEmailView)); + } + + Future _expectSearchResultEmailListVisible() async { + await expectViewVisible($(#search_email_list_notification_listener)); + await $.pump(const Duration(seconds: 3)); + } + + Future _expectEmailViewVisible() async { + await expectViewVisible($(EmailView)); + } + + Future _expectReplyAllEmailButtonVisible() async { + await expectViewVisible($(#reply_all_emails_button)); + } + + Future _expectComposerViewVisible() async { + await expectViewVisible($(ComposerView)); + } + + Future _expectComposerSubjectDisplayedCorrectly(AppLocalizations appLocalizations) async { + expect( + $(SubjectComposerWidget).which((widget) => + widget.textController.text == '${appLocalizations.prefix_reply_email} $queryString' + ).visible, + isTrue, + ); + } + + Future _expectToFieldContainListEmailAddressCorrectly() async { + expect( + $(RecipientComposerWidget).which((widget) => + widget.prefix == PrefixEmailAddress.to && + isMatchingEmailList(widget.listEmailAddress, {'emma-reply-to@example.com', 'emma@example.com'}) + ).visible, + isTrue, + ); + } + + Future _expectCcFieldContainListEmailAddressCorrectly() async { + expect( + $(RecipientComposerWidget).which((widget) => + widget.prefix == PrefixEmailAddress.cc && + isMatchingEmailList(widget.listEmailAddress, {'alice@example.com'}) + ).visible, + isTrue, + ); + } + + Future _expectBccFieldContainListEmailAddressCorrectly() async { + expect( + $(RecipientComposerWidget).which((widget) => + widget.prefix == PrefixEmailAddress.bcc && + isMatchingEmailList(widget.listEmailAddress, {'brian@example.com'}) + ).visible, + isTrue, + ); + } +} \ No newline at end of file diff --git a/integration_test/scenarios/email_detailed/reply_email_with_reply_to_scenario.dart b/integration_test/scenarios/email_detailed/reply_email_with_reply_to_scenario.dart new file mode 100644 index 000000000..e6abd8945 --- /dev/null +++ b/integration_test/scenarios/email_detailed/reply_email_with_reply_to_scenario.dart @@ -0,0 +1,90 @@ + +import 'package:flutter_test/flutter_test.dart'; +import 'package:model/email/prefix_email_address.dart'; +import 'package:tmail_ui_user/features/composer/presentation/composer_view.dart'; +import 'package:tmail_ui_user/features/composer/presentation/widgets/recipient_composer_widget.dart'; +import 'package:tmail_ui_user/features/composer/presentation/widgets/subject_composer_widget.dart'; +import 'package:tmail_ui_user/features/email/presentation/email_view.dart'; +import 'package:tmail_ui_user/features/search/email/presentation/search_email_view.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; + +import '../../base/base_test_scenario.dart'; +import '../../robots/composer_robot.dart'; +import '../../robots/email_robot.dart'; +import '../../robots/search_robot.dart'; +import '../../robots/thread_robot.dart'; + +class ReplyEmailWithReplyToScenario extends BaseTestScenario { + + const ReplyEmailWithReplyToScenario(super.$); + + static const String queryString = 'Reply email with Reply-To'; + + @override + Future runTestLogic() async { + final threadRobot = ThreadRobot($); + final searchRobot = SearchRobot($); + final emailRobot = EmailRobot($); + final composerRobot = ComposerRobot($); + final appLocalizations = AppLocalizations(); + + await threadRobot.openSearchView(); + await _expectSearchViewVisible(); + + await searchRobot.enterQueryString(queryString); + await searchRobot.tapOnShowAllResultsText(); + await _expectSearchResultEmailListVisible(); + + await searchRobot.openEmailWithSubject(queryString); + await _expectEmailViewVisible(); + await _expectReplyEmailButtonVisible(); + + await emailRobot.onTapReplyEmail(); + await _expectComposerViewVisible(); + + await composerRobot.grantContactPermission(); + + await _expectComposerSubjectDisplayedCorrectly(appLocalizations); + await _expectToFieldContainReplyToAndFromEmailAddress(); + } + + Future _expectSearchViewVisible() async { + await expectViewVisible($(SearchEmailView)); + } + + Future _expectSearchResultEmailListVisible() async { + await expectViewVisible($(#search_email_list_notification_listener)); + await $.pump(const Duration(seconds: 3)); + } + + Future _expectEmailViewVisible() async { + await expectViewVisible($(EmailView)); + } + + Future _expectReplyEmailButtonVisible() async { + await expectViewVisible($(#reply_email_button)); + } + + Future _expectComposerViewVisible() async { + await expectViewVisible($(ComposerView)); + } + + Future _expectComposerSubjectDisplayedCorrectly(AppLocalizations appLocalizations) async { + expect( + $(SubjectComposerWidget).which((widget) => + widget.textController.text == '${appLocalizations.prefix_reply_email} $queryString' + ).visible, + isTrue, + ); + } + + Future _expectToFieldContainReplyToAndFromEmailAddress() async { + expect( + $(RecipientComposerWidget).which((widget) => + widget.prefix == PrefixEmailAddress.to && + isMatchingEmailList(widget.listEmailAddress, {'emma@example.com'}) + ).visible, + isTrue, + ); + } +} \ No newline at end of file diff --git a/integration_test/scenarios/email_detailed/reply_email_without_reply_to_scenario.dart b/integration_test/scenarios/email_detailed/reply_email_without_reply_to_scenario.dart new file mode 100644 index 000000000..e2cf59174 --- /dev/null +++ b/integration_test/scenarios/email_detailed/reply_email_without_reply_to_scenario.dart @@ -0,0 +1,90 @@ + +import 'package:flutter_test/flutter_test.dart'; +import 'package:model/email/prefix_email_address.dart'; +import 'package:tmail_ui_user/features/composer/presentation/composer_view.dart'; +import 'package:tmail_ui_user/features/composer/presentation/widgets/recipient_composer_widget.dart'; +import 'package:tmail_ui_user/features/composer/presentation/widgets/subject_composer_widget.dart'; +import 'package:tmail_ui_user/features/email/presentation/email_view.dart'; +import 'package:tmail_ui_user/features/search/email/presentation/search_email_view.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; + +import '../../base/base_test_scenario.dart'; +import '../../robots/composer_robot.dart'; +import '../../robots/email_robot.dart'; +import '../../robots/search_robot.dart'; +import '../../robots/thread_robot.dart'; + +class ReplyEmailWithoutReplyToScenario extends BaseTestScenario { + + const ReplyEmailWithoutReplyToScenario(super.$); + + static const String queryString = 'Reply email without Reply-To'; + + @override + Future runTestLogic() async { + final threadRobot = ThreadRobot($); + final searchRobot = SearchRobot($); + final emailRobot = EmailRobot($); + final composerRobot = ComposerRobot($); + final appLocalizations = AppLocalizations(); + + await threadRobot.openSearchView(); + await _expectSearchViewVisible(); + + await searchRobot.enterQueryString(queryString); + await searchRobot.tapOnShowAllResultsText(); + await _expectSearchResultEmailListVisible(); + + await searchRobot.openEmailWithSubject(queryString); + await _expectEmailViewVisible(); + await _expectReplyEmailButtonVisible(); + + await emailRobot.onTapReplyEmail(); + await _expectComposerViewVisible(); + + await composerRobot.grantContactPermission(); + + await _expectComposerSubjectDisplayedCorrectly(appLocalizations); + await _expectToFieldContainFromEmailAddress(); + } + + Future _expectSearchViewVisible() async { + await expectViewVisible($(SearchEmailView)); + } + + Future _expectSearchResultEmailListVisible() async { + await expectViewVisible($(#search_email_list_notification_listener)); + await $.pump(const Duration(seconds: 3)); + } + + Future _expectEmailViewVisible() async { + await expectViewVisible($(EmailView)); + } + + Future _expectReplyEmailButtonVisible() async { + await expectViewVisible($(#reply_email_button)); + } + + Future _expectComposerViewVisible() async { + await expectViewVisible($(ComposerView)); + } + + Future _expectComposerSubjectDisplayedCorrectly(AppLocalizations appLocalizations) async { + expect( + $(SubjectComposerWidget).which((widget) => + widget.textController.text == '${appLocalizations.prefix_reply_email} $queryString' + ).visible, + isTrue, + ); + } + + Future _expectToFieldContainFromEmailAddress() async { + expect( + $(RecipientComposerWidget).which((widget) => + widget.prefix == PrefixEmailAddress.to && + isMatchingEmailList(widget.listEmailAddress, {'emma@example.com'}) + ).visible, + isTrue, + ); + } +} \ No newline at end of file diff --git a/integration_test/scenarios/email_detailed/reply_to_list_email_scenario.dart b/integration_test/scenarios/email_detailed/reply_to_list_email_scenario.dart new file mode 100644 index 000000000..98ea2c8e1 --- /dev/null +++ b/integration_test/scenarios/email_detailed/reply_to_list_email_scenario.dart @@ -0,0 +1,90 @@ + +import 'package:flutter_test/flutter_test.dart'; +import 'package:model/email/prefix_email_address.dart'; +import 'package:tmail_ui_user/features/composer/presentation/composer_view.dart'; +import 'package:tmail_ui_user/features/composer/presentation/widgets/recipient_composer_widget.dart'; +import 'package:tmail_ui_user/features/composer/presentation/widgets/subject_composer_widget.dart'; +import 'package:tmail_ui_user/features/email/presentation/email_view.dart'; +import 'package:tmail_ui_user/features/search/email/presentation/search_email_view.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; + +import '../../base/base_test_scenario.dart'; +import '../../robots/composer_robot.dart'; +import '../../robots/email_robot.dart'; +import '../../robots/search_robot.dart'; +import '../../robots/thread_robot.dart'; + +class ReplyToListEmailScenario extends BaseTestScenario { + + const ReplyToListEmailScenario(super.$); + + static const String queryString = 'Reply to list email'; + + @override + Future runTestLogic() async { + final threadRobot = ThreadRobot($); + final searchRobot = SearchRobot($); + final emailRobot = EmailRobot($); + final composerRobot = ComposerRobot($); + final appLocalizations = AppLocalizations(); + + await threadRobot.openSearchView(); + await _expectSearchViewVisible(); + + await searchRobot.enterQueryString(queryString); + await searchRobot.tapOnShowAllResultsText(); + await _expectSearchResultEmailListVisible(); + + await searchRobot.openEmailWithSubject(queryString); + await _expectEmailViewVisible(); + await _expectReplyToListEmailButtonVisible(); + + await emailRobot.onTapReplyToListEmail(); + await _expectComposerViewVisible(); + + await composerRobot.grantContactPermission(); + + await _expectComposerSubjectDisplayedCorrectly(appLocalizations); + await _expectToFieldContainListPostEmailAddress(); + } + + Future _expectSearchViewVisible() async { + await expectViewVisible($(SearchEmailView)); + } + + Future _expectSearchResultEmailListVisible() async { + await expectViewVisible($(#search_email_list_notification_listener)); + await $.pump(const Duration(seconds: 3)); + } + + Future _expectEmailViewVisible() async { + await expectViewVisible($(EmailView)); + } + + Future _expectReplyToListEmailButtonVisible() async { + await expectViewVisible($(#reply_to_list_email_button)); + } + + Future _expectComposerViewVisible() async { + await expectViewVisible($(ComposerView)); + } + + Future _expectComposerSubjectDisplayedCorrectly(AppLocalizations appLocalizations) async { + expect( + $(SubjectComposerWidget).which((widget) => + widget.textController.text == '${appLocalizations.prefix_reply_email} $queryString' + ).visible, + isTrue, + ); + } + + Future _expectToFieldContainListPostEmailAddress() async { + expect( + $(RecipientComposerWidget).which((widget) => + widget.prefix == PrefixEmailAddress.to && + isMatchingEmailList(widget.listEmailAddress, {'emma-reply-to-list@example.com'}) + ).visible, + isTrue, + ); + } +} \ No newline at end of file diff --git a/integration_test/tests/email_detailed/reply_all_email_test.dart b/integration_test/tests/email_detailed/reply_all_email_test.dart new file mode 100644 index 000000000..b60fe526a --- /dev/null +++ b/integration_test/tests/email_detailed/reply_all_email_test.dart @@ -0,0 +1,11 @@ +import '../../base/test_base.dart'; +import '../../scenarios/email_detailed/reply_all_email_scenario.dart'; + +void main() { + TestBase().runPatrolTest( + description: + 'SHOULD see the Subject contain the prefix `Re:`\n' + 'AND the To, Cc, Bcc field should display correctly', + scenarioBuilder: ($) => ReplyAllEmailScenario($), + ); +} \ No newline at end of file diff --git a/integration_test/tests/email_detailed/reply_email_with_reply_to_test.dart b/integration_test/tests/email_detailed/reply_email_with_reply_to_test.dart new file mode 100644 index 000000000..ca74b63c0 --- /dev/null +++ b/integration_test/tests/email_detailed/reply_email_with_reply_to_test.dart @@ -0,0 +1,11 @@ +import '../../base/test_base.dart'; +import '../../scenarios/email_detailed/reply_email_with_reply_to_scenario.dart'; + +void main() { + TestBase().runPatrolTest( + description: + 'SHOULD see the Subject contain the prefix `Re:`\n' + 'AND the To field should contain the email\'s `Reply-To` address.', + scenarioBuilder: ($) => ReplyEmailWithReplyToScenario($), + ); +} \ No newline at end of file diff --git a/integration_test/tests/email_detailed/reply_email_without_reply_to_test.dart b/integration_test/tests/email_detailed/reply_email_without_reply_to_test.dart new file mode 100644 index 000000000..9840b0f2c --- /dev/null +++ b/integration_test/tests/email_detailed/reply_email_without_reply_to_test.dart @@ -0,0 +1,11 @@ +import '../../base/test_base.dart'; +import '../../scenarios/email_detailed/reply_email_without_reply_to_scenario.dart'; + +void main() { + TestBase().runPatrolTest( + description: + 'SHOULD see the Subject contain the prefix `Re:`\n' + 'AND the To field should contain the email\'s `From` address.', + scenarioBuilder: ($) => ReplyEmailWithoutReplyToScenario($), + ); +} \ No newline at end of file diff --git a/integration_test/tests/email_detailed/reply_to_list_email_test.dart b/integration_test/tests/email_detailed/reply_to_list_email_test.dart new file mode 100644 index 000000000..5c7206139 --- /dev/null +++ b/integration_test/tests/email_detailed/reply_to_list_email_test.dart @@ -0,0 +1,11 @@ +import '../../base/test_base.dart'; +import '../../scenarios/email_detailed/reply_to_list_email_scenario.dart'; + +void main() { + TestBase().runPatrolTest( + description: + 'SHOULD see the Subject contain the prefix `Re:`\n' + 'AND the To field should contain the email\'s `List-Post` address.', + scenarioBuilder: ($) => ReplyToListEmailScenario($), + ); +} \ No newline at end of file diff --git a/provisioning/integration_test/eml/reply_email/reply-all.eml b/provisioning/integration_test/eml/reply_email/reply-all.eml new file mode 100644 index 000000000..b50e6f0ac --- /dev/null +++ b/provisioning/integration_test/eml/reply_email/reply-all.eml @@ -0,0 +1,36 @@ +Return-Path: +MIME-Version: 1.0 +References: +Subject: Reply all email +From: emma@example.com +To: "bob" +Cc: "alice" +Bcc: "brian" +Reply-To: emma-reply-to@example.com +Date: Tue, 17 Dec 2024 16:31:00 +0000 +Message-ID: +User-Agent: Twake-Mail/0.13.2 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; + rv:131.0) Gecko/20100101 Firefox/131.0 +Content-Type: multipart/alternative; + boundary="-=Part.4f.450e1cfbcd355387.192d67ae03d.c367d8042fea24dd=-" +List-Post: + +---=Part.4f.450e1cfbcd355387.192d67ae03d.c367d8042fea24dd=- +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: quoted-printable +Accept-Language: fr-FR, en-US, vi-VN, ru-RU, ar-TN, it-IT +Content-Language: en-US + +Reply all email + +Invite you in to a meeting: Event OPEN TECH TALK: INNOVATION FOR THE TWAKE WORKPLACE + +Our 3rd Open Tech Talk in 2024! + + ► Topic: "Enhancing Multi-Tenancy Security" + ► Topic: "Bringing Desktop Synchronization into TDrive" + ► Topic: "Websocket: Real-time Update + +We are waiting for you! + +---=Part.4f.450e1cfbcd355387.192d67ae03d.c367d8042fea24dd=--- diff --git a/provisioning/integration_test/eml/reply_email/reply-to-list.eml b/provisioning/integration_test/eml/reply_email/reply-to-list.eml new file mode 100644 index 000000000..c5fab5bfa --- /dev/null +++ b/provisioning/integration_test/eml/reply_email/reply-to-list.eml @@ -0,0 +1,35 @@ +Return-Path: +MIME-Version: 1.0 +References: +Subject: Reply to list email +From: emma@example.com +To: "bob" +Cc: "alice" +Bcc: "brian" +Date: Tue, 17 Dec 2024 16:31:00 +0000 +Message-ID: +User-Agent: Twake-Mail/0.13.2 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; + rv:131.0) Gecko/20100101 Firefox/131.0 +Content-Type: multipart/alternative; + boundary="-=Part.4f.450e1cfbcd355387.192d67ae03d.c367d8042fea24dd=-" +List-Post: + +---=Part.4f.450e1cfbcd355387.192d67ae03d.c367d8042fea24dd=- +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: quoted-printable +Accept-Language: fr-FR, en-US, vi-VN, ru-RU, ar-TN, it-IT +Content-Language: en-US + +Reply to list email + +Invite you in to a meeting: Event OPEN TECH TALK: INNOVATION FOR THE TWAKE WORKPLACE + +Our 3rd Open Tech Talk in 2024! + + ► Topic: "Enhancing Multi-Tenancy Security" + ► Topic: "Bringing Desktop Synchronization into TDrive" + ► Topic: "Websocket: Real-time Update + +We are waiting for you! + +---=Part.4f.450e1cfbcd355387.192d67ae03d.c367d8042fea24dd=--- diff --git a/provisioning/integration_test/eml/reply_email/with-reply-to.eml b/provisioning/integration_test/eml/reply_email/with-reply-to.eml new file mode 100644 index 000000000..68a12052e --- /dev/null +++ b/provisioning/integration_test/eml/reply_email/with-reply-to.eml @@ -0,0 +1,36 @@ +Return-Path: +MIME-Version: 1.0 +References: +Subject: Reply email with Reply-To +From: emma@example.com +To: "bob" +Cc: "alice" +Bcc: "brian" +Reply-To: emma-reply-to@example.com +Date: Tue, 17 Dec 2024 16:31:00 +0000 +Message-ID: +User-Agent: Twake-Mail/0.13.2 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; + rv:131.0) Gecko/20100101 Firefox/131.0 +Content-Type: multipart/alternative; + boundary="-=Part.4f.450e1cfbcd355387.192d67ae03d.c367d8042fea24dd=-" +List-Post: + +---=Part.4f.450e1cfbcd355387.192d67ae03d.c367d8042fea24dd=- +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: quoted-printable +Accept-Language: fr-FR, en-US, vi-VN, ru-RU, ar-TN, it-IT +Content-Language: en-US + +Reply email with Reply-To + +Invite you in to a meeting: Event OPEN TECH TALK: INNOVATION FOR THE TWAKE WORKPLACE + +Our 3rd Open Tech Talk in 2024! + + ► Topic: "Enhancing Multi-Tenancy Security" + ► Topic: "Bringing Desktop Synchronization into TDrive" + ► Topic: "Websocket: Real-time Update + +We are waiting for you! + +---=Part.4f.450e1cfbcd355387.192d67ae03d.c367d8042fea24dd=--- diff --git a/provisioning/integration_test/eml/reply_email/without-reply-to.eml b/provisioning/integration_test/eml/reply_email/without-reply-to.eml new file mode 100644 index 000000000..ff89705d6 --- /dev/null +++ b/provisioning/integration_test/eml/reply_email/without-reply-to.eml @@ -0,0 +1,34 @@ +Return-Path: +MIME-Version: 1.0 +References: +Subject: Reply email without Reply-To +From: emma@example.com +To: "bob" +Cc: "alice" +Bcc: "brian" +Date: Tue, 17 Dec 2024 16:31:00 +0000 +Message-ID: +User-Agent: Twake-Mail/0.13.2 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; + rv:131.0) Gecko/20100101 Firefox/131.0 +Content-Type: multipart/alternative; + boundary="-=Part.4f.450e1cfbcd355387.192d67ae03d.c367d8042fea24dd=-" + +---=Part.4f.450e1cfbcd355387.192d67ae03d.c367d8042fea24dd=- +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: quoted-printable +Accept-Language: fr-FR, en-US, vi-VN, ru-RU, ar-TN, it-IT +Content-Language: en-US + +Reply email without Reply-To + +Invite you in to a meeting: Event OPEN TECH TALK: INNOVATION FOR THE TWAKE WORKPLACE + +Our 3rd Open Tech Talk in 2024! + + ► Topic: "Enhancing Multi-Tenancy Security" + ► Topic: "Bringing Desktop Synchronization into TDrive" + ► Topic: "Websocket: Real-time Update + +We are waiting for you! + +---=Part.4f.450e1cfbcd355387.192d67ae03d.c367d8042fea24dd=--- diff --git a/provisioning/integration_test/eml/search_email_with_sort_order/0.eml b/provisioning/integration_test/eml/search_email_with_sort_order/0.eml index f9061eec4..32b94670b 100644 --- a/provisioning/integration_test/eml/search_email_with_sort_order/0.eml +++ b/provisioning/integration_test/eml/search_email_with_sort_order/0.eml @@ -30,11 +30,4 @@ Our 3rd Open Tech Talk in 2024! We are waiting for you! ----=Part.4f.450e1cfbcd355387.192d67ae03d.c367d8042fea24dd=- -Content-Type: text/html; charset=UTF-8 -Content-Transfer-Encoding: quoted-printable -Accept-Language: fr-FR, en-US, vi-VN, ru-RU, ar-TN, it-IT -Content-Language: en-US - - ---=Part.4f.450e1cfbcd355387.192d67ae03d.c367d8042fea24dd=--- diff --git a/provisioning/integration_test/eml/search_email_with_sort_order/1.eml b/provisioning/integration_test/eml/search_email_with_sort_order/1.eml index 4586e5425..61d73f835 100644 --- a/provisioning/integration_test/eml/search_email_with_sort_order/1.eml +++ b/provisioning/integration_test/eml/search_email_with_sort_order/1.eml @@ -30,11 +30,4 @@ Our 3rd Open Tech Talk in 2024! We are waiting for you! ----=Part.4f.450e1cfbcd355387.192d67ae03d.c367d8042fea24dd=- -Content-Type: text/html; charset=UTF-8 -Content-Transfer-Encoding: quoted-printable -Accept-Language: fr-FR, en-US, vi-VN, ru-RU, ar-TN, it-IT -Content-Language: en-US - - ---=Part.4f.450e1cfbcd355387.192d67ae03d.c367d8042fea24dd=--- diff --git a/provisioning/integration_test/eml/search_email_with_sort_order/2.eml b/provisioning/integration_test/eml/search_email_with_sort_order/2.eml index f71f64a24..37a519bb2 100644 --- a/provisioning/integration_test/eml/search_email_with_sort_order/2.eml +++ b/provisioning/integration_test/eml/search_email_with_sort_order/2.eml @@ -30,11 +30,4 @@ Our 3rd Open Tech Talk in 2024! We are waiting for you! ----=Part.4f.450e1cfbcd355387.192d67ae03d.c367d8042fea24dd=- -Content-Type: text/html; charset=UTF-8 -Content-Transfer-Encoding: quoted-printable -Accept-Language: fr-FR, en-US, vi-VN, ru-RU, ar-TN, it-IT -Content-Language: en-US - - ---=Part.4f.450e1cfbcd355387.192d67ae03d.c367d8042fea24dd=--- diff --git a/provisioning/integration_test/eml/search_email_with_sort_order/3.eml b/provisioning/integration_test/eml/search_email_with_sort_order/3.eml index 23282777d..0a38affc7 100644 --- a/provisioning/integration_test/eml/search_email_with_sort_order/3.eml +++ b/provisioning/integration_test/eml/search_email_with_sort_order/3.eml @@ -30,11 +30,4 @@ Our 3rd Open Tech Talk in 2024! We are waiting for you! ----=Part.4f.450e1cfbcd355387.192d67ae03d.c367d8042fea24dd=- -Content-Type: text/html; charset=UTF-8 -Content-Transfer-Encoding: quoted-printable -Accept-Language: fr-FR, en-US, vi-VN, ru-RU, ar-TN, it-IT -Content-Language: en-US - - ---=Part.4f.450e1cfbcd355387.192d67ae03d.c367d8042fea24dd=--- diff --git a/provisioning/integration_test/eml/search_email_with_sort_order/4.eml b/provisioning/integration_test/eml/search_email_with_sort_order/4.eml index 815535ee8..44fe83e1f 100644 --- a/provisioning/integration_test/eml/search_email_with_sort_order/4.eml +++ b/provisioning/integration_test/eml/search_email_with_sort_order/4.eml @@ -30,11 +30,4 @@ Our 3rd Open Tech Talk in 2024! We are waiting for you! ----=Part.4f.450e1cfbcd355387.192d67ae03d.c367d8042fea24dd=- -Content-Type: text/html; charset=UTF-8 -Content-Transfer-Encoding: quoted-printable -Accept-Language: fr-FR, en-US, vi-VN, ru-RU, ar-TN, it-IT -Content-Language: en-US - - ---=Part.4f.450e1cfbcd355387.192d67ae03d.c367d8042fea24dd=--- diff --git a/provisioning/integration_test/provisioning.sh b/provisioning/integration_test/provisioning.sh index 0c220373c..d9d6aa178 100755 --- a/provisioning/integration_test/provisioning.sh +++ b/provisioning/integration_test/provisioning.sh @@ -2,7 +2,7 @@ # Define users and folders users=("alice" "bob" "brian" "charlotte" "david" "emma") -bobFolders=("Search Emails" "Forward Emails" "Disposition" "MailBase64" "Calendar") +bobFolders=("Search Emails" "Forward Emails" "Disposition" "MailBase64" "Calendar" "Reply Emails") # Add users for user in "${users[@]}"; do @@ -66,4 +66,13 @@ james-cli ImportEml \#private "bob@example.com" "MailBase64" "/root/conf/integra # For test calendar event # Import email into 'Calendar' folder for user Bob echo "Importing calendar eml into 'Calendar' folder for user bob" -james-cli ImportEml \#private "bob@example.com" "Calendar" "/root/conf/integration_test/eml/calendar/calendar_counter.eml" \ No newline at end of file +james-cli ImportEml \#private "bob@example.com" "Calendar" "/root/conf/integration_test/eml/calendar/calendar_counter.eml" + +# For test reply email +# Import emails into 'Reply Emails' folder for user Bob +replyEmailsEML=("reply-all.eml" "reply-to-list.eml" "with-reply-to.eml" "without-reply-to.eml") + +for eml in "${replyEmailsEML[@]}"; do + echo "Importing $eml into 'Reply Emails' folder for user bob" + james-cli ImportEml \#private "bob@example.com" "Reply Emails" "/root/conf/integration_test/eml/reply_email/$eml" +done \ No newline at end of file