diff --git a/test/features/mailbox/domain/usecases/refresh_all_mailbox_interactor_test.dart b/test/features/mailbox/domain/usecases/refresh_all_mailbox_interactor_test.dart index e0df6e18f..af385500a 100644 --- a/test/features/mailbox/domain/usecases/refresh_all_mailbox_interactor_test.dart +++ b/test/features/mailbox/domain/usecases/refresh_all_mailbox_interactor_test.dart @@ -1,6 +1,5 @@ import 'dart:async'; -import 'package:core/core.dart'; import 'package:dartz/dartz.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:jmap_dart_client/jmap/core/state.dart' as jmap; @@ -46,9 +45,8 @@ void main() { final states = await streamStates.toList(); - expect(states.length, equals(2)); + expect(states.length, equals(1)); expect(states, containsAllInOrder({ - Right(LoadingState()), Right(GetAllMailboxSuccess( defaultMailboxList: { MailboxFixtures.inboxMailbox.toPresentationMailbox(), 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 index 656d35736..c94bffcdf 100644 --- 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 @@ -8,6 +8,7 @@ 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/state.dart' as _i11; 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; @@ -53,4 +54,23 @@ class MockThreadRepository extends _i1.Mock implements _i2.ThreadRepository { }), returnValue: Stream<_i4.EmailResponse>.empty()) as _i3.Stream<_i4.EmailResponse>); + @override + _i3.Stream<_i4.EmailResponse> refreshChanges( + _i5.AccountId? accountId, _i11.State? currentState, + {Set<_i7.Comparator>? sort, + _i9.Properties? propertiesCreated, + _i9.Properties? propertiesUpdated, + _i10.MailboxId? inMailboxId}) => + (super.noSuchMethod( + Invocation.method(#refreshChanges, [ + accountId, + currentState + ], { + #sort: sort, + #propertiesCreated: propertiesCreated, + #propertiesUpdated: propertiesUpdated, + #inMailboxId: inMailboxId + }), + returnValue: Stream<_i4.EmailResponse>.empty()) + as _i3.Stream<_i4.EmailResponse>); } diff --git a/test/features/thread/domain/usecases/refresh_changes_emails_in_mailbox_interactor_test.dart b/test/features/thread/domain/usecases/refresh_changes_emails_in_mailbox_interactor_test.dart new file mode 100644 index 000000000..8a3d1a8b3 --- /dev/null +++ b/test/features/thread/domain/usecases/refresh_changes_emails_in_mailbox_interactor_test.dart @@ -0,0 +1,80 @@ +import 'dart:async'; + +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: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/refresh_changes_emails_in_mailbox_interactor.dart'; + +import '../../../../fixtures/account_fixtures.dart'; +import '../../../../fixtures/email_fixtures.dart'; +import '../../../../fixtures/mailbox_fixtures.dart'; +import '../../../../fixtures/state_fixtures.dart'; +import 'refresh_changes_emails_in_mailbox_interactor_test.mocks.dart'; + +@GenerateMocks([ThreadRepository]) +void main() { + late ThreadRepository threadRepository; + late RefreshChangesEmailsInMailboxInteractor refreshChangesEmailsInMailboxInteractor; + + group('[RefreshChangesEmailsInMailboxInteractor]', () { + + setUp(() { + threadRepository = MockThreadRepository(); + refreshChangesEmailsInMailboxInteractor = RefreshChangesEmailsInMailboxInteractor(threadRepository); + }); + + test('refreshChangesEmailsInMailboxInteractor should execute to get changes email from cache and network', () async { + when(threadRepository.refreshChanges( + AccountFixtures.aliceAccountId, + StateFixtures.currentEmailState, + sort: Set()..add(EmailComparator(EmailComparatorProperty.sentAt)..setIsAscending(false)), + propertiesCreated: ThreadConstants.propertiesDefault, + propertiesUpdated: ThreadConstants.propertiesUpdatedDefault, + inMailboxId: MailboxFixtures.inboxMailbox.id + )).thenAnswer((_) => Stream.fromIterable({ + EmailResponse( + emailList: { + EmailFixtures.email1, + EmailFixtures.email2, + EmailFixtures.email3, + EmailFixtures.email4, + EmailFixtures.email5, + }.toList(), + state: jmap.State('s1')) + })); + + final streamStates = refreshChangesEmailsInMailboxInteractor.execute( + AccountFixtures.aliceAccountId, + StateFixtures.currentEmailState, + sort: Set()..add(EmailComparator(EmailComparatorProperty.sentAt)..setIsAscending(false)), + propertiesCreated: ThreadConstants.propertiesDefault, + propertiesUpdated: ThreadConstants.propertiesUpdatedDefault, + inMailboxId: MailboxFixtures.inboxMailbox.id); + + final states = await streamStates.toList(); + + expect(states.length, equals(1)); + expect(states, containsAllInOrder({ + 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/refresh_changes_emails_in_mailbox_interactor_test.mocks.dart b/test/features/thread/domain/usecases/refresh_changes_emails_in_mailbox_interactor_test.mocks.dart new file mode 100644 index 000000000..6dcad9870 --- /dev/null +++ b/test/features/thread/domain/usecases/refresh_changes_emails_in_mailbox_interactor_test.mocks.dart @@ -0,0 +1,76 @@ +// Mocks generated by Mockito 5.0.10 from annotations +// in tmail_ui_user/test/features/thread/domain/usecases/refresh_changes_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/state.dart' as _i11; +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>); + @override + _i3.Stream<_i4.EmailResponse> refreshChanges( + _i5.AccountId? accountId, _i11.State? currentState, + {Set<_i7.Comparator>? sort, + _i9.Properties? propertiesCreated, + _i9.Properties? propertiesUpdated, + _i10.MailboxId? inMailboxId}) => + (super.noSuchMethod( + Invocation.method(#refreshChanges, [ + accountId, + currentState + ], { + #sort: sort, + #propertiesCreated: propertiesCreated, + #propertiesUpdated: propertiesUpdated, + #inMailboxId: inMailboxId + }), + returnValue: Stream<_i4.EmailResponse>.empty()) + as _i3.Stream<_i4.EmailResponse>); +} diff --git a/test/fixtures/state_fixtures.dart b/test/fixtures/state_fixtures.dart index 19a6e1004..df5eb6981 100644 --- a/test/fixtures/state_fixtures.dart +++ b/test/fixtures/state_fixtures.dart @@ -3,4 +3,5 @@ import 'package:jmap_dart_client/jmap/core/state.dart'; class StateFixtures { static final currentMailboxState = State('a1234'); -} \ No newline at end of file + static final currentEmailState = State('e1234'); +} \ No newline at end of file