diff --git a/lib/features/mailbox/domain/usecases/get_all_mailbox_interactor.dart b/lib/features/mailbox/domain/usecases/get_all_mailbox_interactor.dart index 4900d81a5..8262a5d68 100644 --- a/lib/features/mailbox/domain/usecases/get_all_mailbox_interactor.dart +++ b/lib/features/mailbox/domain/usecases/get_all_mailbox_interactor.dart @@ -2,11 +2,11 @@ import 'package:core/core.dart'; import 'package:dartz/dartz.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/properties/properties.dart'; +import 'package:model/model.dart'; import 'package:tmail_ui_user/features/mailbox/data/model/mailbox_response.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/extensions/list_mailbox_extension.dart'; import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/get_all_mailboxes_state.dart'; -import 'package:tmail_ui_user/features/mailbox/domain/extensions/list_mailbox_extension.dart'; -import 'package:model/model.dart'; class GetAllMailboxInteractor { final MailboxRepository _mailboxRepository; @@ -32,6 +32,7 @@ class GetAllMailboxInteractor { return Right(GetAllMailboxSuccess( defaultMailboxList: tupleList.value1, folderMailboxList: tupleList.value2, - currentMailboxState: mailboxResponse.state)); + currentMailboxState: mailboxResponse.state) + ); } } \ No newline at end of file diff --git a/test/features/mailbox/domain/usecases/get_all_mailbox_interactor_test.dart b/test/features/mailbox/domain/usecases/get_all_mailbox_interactor_test.dart new file mode 100644 index 000000000..65846ce0c --- /dev/null +++ b/test/features/mailbox/domain/usecases/get_all_mailbox_interactor_test.dart @@ -0,0 +1,79 @@ +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; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; +import 'package:model/extensions/mailbox_extension.dart'; +import 'package:tmail_ui_user/features/mailbox/data/model/mailbox_response.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/state/get_all_mailboxes_state.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/usecases/get_all_mailbox_interactor.dart'; + +import '../../../../fixtures/account_fixtures.dart'; +import '../../../../fixtures/mailbox_fixtures.dart'; +import 'get_all_mailbox_interactor_test.mocks.dart'; + +@GenerateMocks([MailboxRepository]) +void main() { + late MailboxRepository mailboxRepository; + late GetAllMailboxInteractor getAllMailboxInteractor; + + group('[GetAllMailboxInteractor]', () { + + setUp(() { + mailboxRepository = MockMailboxRepository(); + getAllMailboxInteractor = GetAllMailboxInteractor(mailboxRepository); + }); + + test('getAllMailboxInteractor should execute to get all mailbox from cache and network', () async { + when(mailboxRepository.getAllMailbox(AccountFixtures.aliceAccountId)) + .thenAnswer((_) => Stream.fromIterable({ + MailboxResponse( + mailboxes: { + MailboxFixtures.inboxMailbox, + MailboxFixtures.sentMailbox + }.toList(), + state: jmap.State('s1')), + MailboxResponse( + mailboxes: { + MailboxFixtures.inboxMailbox, + MailboxFixtures.sentMailbox, + MailboxFixtures.folder1, + MailboxFixtures.folder1_1 + }.toList(), + state: jmap.State('s1')) + })); + + final streamStates = getAllMailboxInteractor.execute(AccountFixtures.aliceAccountId); + + final states = await streamStates.toList(); + + expect(states.length, equals(3)); + expect(states, containsAllInOrder({ + Right(LoadingState()), + Right(GetAllMailboxSuccess( + defaultMailboxList: { + MailboxFixtures.inboxMailbox.toPresentationMailbox(), + MailboxFixtures.sentMailbox.toPresentationMailbox() + }.toList(), + folderMailboxList: List.empty(), + currentMailboxState: jmap.State('s1')) + ), + Right(GetAllMailboxSuccess( + defaultMailboxList: { + MailboxFixtures.inboxMailbox.toPresentationMailbox(), + MailboxFixtures.sentMailbox.toPresentationMailbox() + }.toList(), + folderMailboxList: { + MailboxFixtures.folder1.toPresentationMailbox(), + MailboxFixtures.folder1_1.toPresentationMailbox() + }.toList(), + currentMailboxState: jmap.State('s1')) + ) + })); + }); + }); +} \ No newline at end of file diff --git a/test/features/mailbox/domain/usecases/get_all_mailbox_interactor_test.mocks.dart b/test/features/mailbox/domain/usecases/get_all_mailbox_interactor_test.mocks.dart new file mode 100644 index 000000000..acf93b957 --- /dev/null +++ b/test/features/mailbox/domain/usecases/get_all_mailbox_interactor_test.mocks.dart @@ -0,0 +1,45 @@ +// Mocks generated by Mockito 5.0.10 from annotations +// in tmail_ui_user/test/features/mailbox/domain/usecases/get_all_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/properties/properties.dart' as _i6; +import 'package:jmap_dart_client/jmap/core/state.dart' as _i7; +import 'package:mockito/mockito.dart' as _i1; +import 'package:tmail_ui_user/features/mailbox/data/model/mailbox_response.dart' + as _i4; +import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_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 [MailboxRepository]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockMailboxRepository extends _i1.Mock implements _i2.MailboxRepository { + MockMailboxRepository() { + _i1.throwOnMissingStub(this); + } + + @override + _i3.Stream<_i4.MailboxResponse> getAllMailbox(_i5.AccountId? accountId, + {_i6.Properties? properties}) => + (super.noSuchMethod( + Invocation.method( + #getAllMailbox, [accountId], {#properties: properties}), + returnValue: Stream<_i4.MailboxResponse>.empty()) + as _i3.Stream<_i4.MailboxResponse>); + @override + _i3.Stream<_i4.MailboxResponse> refresh( + _i5.AccountId? accountId, _i7.State? currentState) => + (super.noSuchMethod( + Invocation.method(#refresh, [accountId, currentState]), + returnValue: Stream<_i4.MailboxResponse>.empty()) + as _i3.Stream<_i4.MailboxResponse>); +} diff --git a/test/fixtures/account_fixtures.dart b/test/fixtures/account_fixtures.dart index 90dda2517..1d435333b 100644 --- a/test/fixtures/account_fixtures.dart +++ b/test/fixtures/account_fixtures.dart @@ -3,4 +3,4 @@ import 'package:jmap_dart_client/jmap/core/id.dart'; class AccountFixtures { static final aliceAccountId = AccountId(Id('411ce')); -} \ No newline at end of file +} \ No newline at end of file