diff --git a/test/features/thread/domain/usecases/get_emails_in_mailbox_interactor_test.dart b/test/features/thread/domain/usecases/get_emails_in_mailbox_interactor_test.dart new file mode 100644 index 000000000..71162f8f3 --- /dev/null +++ b/test/features/thread/domain/usecases/get_emails_in_mailbox_interactor_test.dart @@ -0,0 +1,100 @@ +import 'dart:async'; + +import 'package:core/core.dart'; +import 'package:jmap_dart_client/jmap/mail/email/email_comparator.dart'; +import 'package:jmap_dart_client/jmap/mail/email/email_comparator_property.dart'; +import 'package:model/model.dart'; +import 'package:dartz/dartz.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:jmap_dart_client/jmap/core/state.dart' as jmap; +import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; +import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; +import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart'; +import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart'; +import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart'; +import 'package:tmail_ui_user/features/thread/domain/state/get_all_email_state.dart'; +import 'package:tmail_ui_user/features/thread/domain/usecases/get_emails_in_mailbox_interactor.dart'; + +import '../../../../fixtures/account_fixtures.dart'; +import '../../../../fixtures/email_fixtures.dart'; +import '../../../../fixtures/mailbox_fixtures.dart'; +import 'get_emails_in_mailbox_interactor_test.mocks.dart'; + +@GenerateMocks([ThreadRepository]) +void main() { + late ThreadRepository threadRepository; + late GetEmailsInMailboxInteractor getEmailsInMailboxInteractor; + + group('[GetEmailsInMailboxInteractor]', () { + + setUp(() { + threadRepository = MockThreadRepository(); + getEmailsInMailboxInteractor = GetEmailsInMailboxInteractor(threadRepository); + }); + + test('getEmailsInMailboxInteractor should execute to get all email from cache and network', () async { + when(threadRepository.getAllEmail( + AccountFixtures.aliceAccountId, + limit: UnsignedInt(20), + position: 0, + sort: Set()..add(EmailComparator(EmailComparatorProperty.sentAt)..setIsAscending(false)), + filter: EmailFilterCondition(inMailbox: MailboxFixtures.inboxMailbox.id), + propertiesCreated: ThreadConstants.propertiesDefault, + propertiesUpdated: ThreadConstants.propertiesUpdatedDefault, + inMailboxId: MailboxFixtures.inboxMailbox.id + )).thenAnswer((_) => Stream.fromIterable({ + EmailResponse( + emailList: { + EmailFixtures.email1, + EmailFixtures.email2 + }.toList(), + state: jmap.State('s1')), + EmailResponse( + emailList: { + EmailFixtures.email1, + EmailFixtures.email2, + EmailFixtures.email3, + EmailFixtures.email4, + EmailFixtures.email5, + }.toList(), + state: jmap.State('s1')) + })); + + final streamStates = getEmailsInMailboxInteractor.execute( + AccountFixtures.aliceAccountId, + limit: UnsignedInt(20), + position: 0, + sort: Set()..add(EmailComparator(EmailComparatorProperty.sentAt)..setIsAscending(false)), + filter: EmailFilterCondition(inMailbox: MailboxFixtures.inboxMailbox.id), + propertiesCreated: ThreadConstants.propertiesDefault, + propertiesUpdated: ThreadConstants.propertiesUpdatedDefault, + inMailboxId: MailboxFixtures.inboxMailbox.id); + + final states = await streamStates.toList(); + + expect(states.length, equals(3)); + expect(states, containsAllInOrder({ + Right(LoadingState()), + Right(GetAllEmailSuccess( + emailList: { + EmailFixtures.email1.toPresentationEmail(), + EmailFixtures.email2.toPresentationEmail() + }.toList(), + currentEmailState: jmap.State('s1')) + ), + Right(GetAllEmailSuccess( + emailList: { + EmailFixtures.email1.toPresentationEmail(), + EmailFixtures.email2.toPresentationEmail(), + EmailFixtures.email3.toPresentationEmail(), + EmailFixtures.email4.toPresentationEmail(), + EmailFixtures.email5.toPresentationEmail(), + }.toList(), + currentEmailState: jmap.State('s1')) + ) + })); + }); + }); +} \ No newline at end of file diff --git a/test/features/thread/domain/usecases/get_emails_in_mailbox_interactor_test.mocks.dart b/test/features/thread/domain/usecases/get_emails_in_mailbox_interactor_test.mocks.dart new file mode 100644 index 000000000..656d35736 --- /dev/null +++ b/test/features/thread/domain/usecases/get_emails_in_mailbox_interactor_test.mocks.dart @@ -0,0 +1,56 @@ +// Mocks generated by Mockito 5.0.10 from annotations +// in tmail_ui_user/test/features/thread/domain/usecases/get_emails_in_mailbox_interactor_test.dart. +// Do not manually edit this file. + +import 'dart:async' as _i3; + +import 'package:jmap_dart_client/jmap/account_id.dart' as _i5; +import 'package:jmap_dart_client/jmap/core/filter/filter.dart' as _i8; +import 'package:jmap_dart_client/jmap/core/properties/properties.dart' as _i9; +import 'package:jmap_dart_client/jmap/core/sort/comparator.dart' as _i7; +import 'package:jmap_dart_client/jmap/core/unsigned_int.dart' as _i6; +import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart' as _i10; +import 'package:mockito/mockito.dart' as _i1; +import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart' + as _i4; +import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart' + as _i2; + +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: comment_references +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis + +/// A class which mocks [ThreadRepository]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockThreadRepository extends _i1.Mock implements _i2.ThreadRepository { + MockThreadRepository() { + _i1.throwOnMissingStub(this); + } + + @override + _i3.Stream<_i4.EmailResponse> getAllEmail(_i5.AccountId? accountId, + {int? position, + _i6.UnsignedInt? limit, + Set<_i7.Comparator>? sort, + _i8.Filter? filter, + _i9.Properties? propertiesCreated, + _i9.Properties? propertiesUpdated, + _i10.MailboxId? inMailboxId}) => + (super.noSuchMethod( + Invocation.method(#getAllEmail, [ + accountId + ], { + #position: position, + #limit: limit, + #sort: sort, + #filter: filter, + #propertiesCreated: propertiesCreated, + #propertiesUpdated: propertiesUpdated, + #inMailboxId: inMailboxId + }), + returnValue: Stream<_i4.EmailResponse>.empty()) + as _i3.Stream<_i4.EmailResponse>); +} diff --git a/test/fixtures/email_fixtures.dart b/test/fixtures/email_fixtures.dart index b2f4b21af..1f537b014 100644 --- a/test/fixtures/email_fixtures.dart +++ b/test/fixtures/email_fixtures.dart @@ -4,6 +4,8 @@ import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart'; +import 'mailbox_fixtures.dart'; + class EmailFixtures { static final email1 = Email( EmailId(Id("382312d0-fa5c-11eb-b647-2fef1ee78d9e")), @@ -14,6 +16,7 @@ class EmailFixtures { sentAt: UTCDate(DateTime.parse("2021-08-11T04:25:34Z")), receivedAt: UTCDate(DateTime.parse("2021-08-11T04:25:55Z")), keywords: {KeyWordIdentifier.emailSeen : true}, + mailboxIds: {MailboxFixtures.inboxMailbox.id : true}, to: {EmailAddress("DatVu", "tdvu@linagora.com")}, ); @@ -24,7 +27,8 @@ class EmailFixtures { subject: "Notification: Noti check", from: {EmailAddress(null, "noreply@qa.open-paas.org")}, sentAt: UTCDate(DateTime.parse("2021-08-10T09:45:01Z")), - receivedAt: UTCDate(DateTime.parse("2021-08-11T04:00:59Z")), + receivedAt: UTCDate(DateTime.parse("2021-08-10T04:00:59Z")), + mailboxIds: {MailboxFixtures.inboxMailbox.id : true}, to: {EmailAddress("DatVu", "tdvu@facebook.com")}, ); @@ -34,9 +38,10 @@ class EmailFixtures { hasAttachment: false, subject: "Notification: Recurrencr", from: {EmailAddress(null, "noreply@qa.open-paas.org")}, - sentAt: UTCDate(DateTime.parse("2021-08-11T03:00:00Z")), - receivedAt: UTCDate(DateTime.parse("2021-08-11T04:00:55Z")), + sentAt: UTCDate(DateTime.parse("2021-08-09T03:00:00Z")), + receivedAt: UTCDate(DateTime.parse("2021-08-09T04:00:55Z")), keywords: {KeyWordIdentifier.emailFlagged : true}, + mailboxIds: {MailboxFixtures.inboxMailbox.id : true}, to: {EmailAddress("DatVu", "tdvu@gmail.com")}, ); @@ -46,9 +51,10 @@ class EmailFixtures { hasAttachment: true, subject: "test attachment", from: {EmailAddress("Haaheoo", "userc@qa.open-paas.org")}, - sentAt: UTCDate(DateTime.parse("2021-08-11T06:46:25Z")), - receivedAt: UTCDate(DateTime.parse("2021-08-11T06:46:26Z")), + sentAt: UTCDate(DateTime.parse("2021-08-08T06:46:25Z")), + receivedAt: UTCDate(DateTime.parse("2021-08-08T06:46:26Z")), keywords: {KeyWordIdentifier.emailFlagged : true}, + mailboxIds: {MailboxFixtures.inboxMailbox.id : true}, to: {EmailAddress("DatVu", "tdvu@icloud.com")}, ); @@ -58,9 +64,10 @@ class EmailFixtures { hasAttachment: false, subject: "test inline image", from: {EmailAddress("Haaheoo", "userc@qa.open-paas.org")}, - sentAt: UTCDate(DateTime.parse("2021-08-11T04:34:13Z")), - receivedAt: UTCDate(DateTime.parse("2021-08-11T04:34:17Z")), + sentAt: UTCDate(DateTime.parse("2021-08-07T04:34:13Z")), + receivedAt: UTCDate(DateTime.parse("2021-08-07T04:34:17Z")), keywords: {KeyWordIdentifier.emailSeen : true}, + mailboxIds: {MailboxFixtures.inboxMailbox.id : true}, to: {EmailAddress("DatVu", "tdvu@yahoo.com")}, ); } \ No newline at end of file