1+ import 'package:dartz/dartz.dart' ;
2+ import 'package:flutter_test/flutter_test.dart' ;
3+ import 'package:mockito/annotations.dart' ;
4+ import 'package:mockito/mockito.dart' ;
5+ import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_response.dart' ;
6+ import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart' ;
7+ import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
8+ import 'package:tmail_ui_user/features/mailbox/domain/state/delete_multiple_mailbox_state.dart' ;
9+ import 'package:tmail_ui_user/features/mailbox/domain/usecases/delete_multiple_mailbox_interactor.dart' ;
10+ import '../../../../fixtures/account_fixtures.dart' ;
11+ import '../../../../fixtures/mailbox_fixtures.dart' ;
12+ import '../../../../fixtures/session_fixtures.dart' ;
13+ import 'delete_multiple_mailbox_interactor_test.mocks.dart' ;
14+
15+ @GenerateMocks ([MailboxRepository ])
16+
17+ void main () {
18+ late MailboxRepository mailboxRepository;
19+ late DeleteMultipleMailboxInteractor deleteMultipleMailboxInteractor;
20+
21+ group ('[DeleteMultipleMailboxInteractor]' , () {
22+ setUp (() {
23+ mailboxRepository = MockMailboxRepository ();
24+ deleteMultipleMailboxInteractor = DeleteMultipleMailboxInteractor (mailboxRepository);
25+ });
26+
27+ test ('deleteMultipleMailboxInteractor should execute to delete selected mailbox an all its children included hidden mailbox' , () {
28+ final state = jmap.State ('s1' );
29+
30+ when (
31+ mailboxRepository.getMailboxState (
32+ SessionFixtures .aliceSession,
33+ AccountFixtures .aliceAccountId
34+ )
35+ ).thenAnswer ((_) => Future .value (state));
36+
37+ when (
38+ mailboxRepository.getAllMailbox (
39+ SessionFixtures .aliceSession,
40+ AccountFixtures .aliceAccountId
41+ )
42+ ).thenAnswer ((_) => Stream .fromIterable ({
43+ MailboxResponse (
44+ mailboxes: [
45+ MailboxFixtures .inboxMailbox,
46+ MailboxFixtures .sentMailbox,
47+ MailboxFixtures .selectedFolderToDelete,
48+ MailboxFixtures .selectedFolderToDelete_1,
49+ MailboxFixtures .selectedFolderToDelete_2,
50+ ],
51+ state: state,
52+ ),
53+ MailboxResponse (
54+ mailboxes: [
55+ MailboxFixtures .inboxMailbox,
56+ MailboxFixtures .sentMailbox,
57+ MailboxFixtures .selectedFolderToDelete,
58+ MailboxFixtures .selectedFolderToDelete_1,
59+ MailboxFixtures .selectedFolderToDelete_2,
60+ MailboxFixtures .selectedFolderToDelete_3,
61+ MailboxFixtures .selectedFolderToDelete_4,
62+ MailboxFixtures .selectedFolderToDelete_5,
63+ MailboxFixtures .selectedFolderToDelete_6,
64+ MailboxFixtures .selectedFolderToDelete_7,
65+ MailboxFixtures .selectedFolderToDelete_8,
66+ MailboxFixtures .selectedFolderToDelete_9,
67+ MailboxFixtures .selectedFolderToDelete_10,
68+ ],
69+ state: state,
70+ ),
71+ }));
72+
73+ when (
74+ mailboxRepository.deleteMultipleMailbox (
75+ SessionFixtures .aliceSession,
76+ AccountFixtures .aliceAccountId,
77+ MailboxFixtures .listDescendantMailboxForSelectedFolder,
78+ )
79+ ).thenAnswer ((_) => Future .value ({}));
80+
81+ when (
82+ mailboxRepository.deleteMultipleMailbox (
83+ SessionFixtures .aliceSession,
84+ AccountFixtures .aliceAccountId,
85+ MailboxFixtures .listDescendantMailboxForSelectedFolder2,
86+ )
87+ ).thenAnswer ((_) => Future .value ({}));
88+
89+ final result = deleteMultipleMailboxInteractor.execute (
90+ SessionFixtures .aliceSession,
91+ AccountFixtures .aliceAccountId,
92+ MailboxFixtures .mapMailboxIdToDelete,
93+ MailboxFixtures .listMailboxIdToDelete
94+ );
95+
96+ expect (result, emitsInOrder ([
97+ Right (LoadingDeleteMultipleMailboxAll ()),
98+ Right (DeleteMultipleMailboxAllSuccess (
99+ MailboxFixtures .listMailboxIdToDelete,
100+ currentMailboxState: state
101+ )),
102+ ]));
103+ });
104+ });
105+ }
0 commit comments