fixup! TF-3332 Prevent refresh when switching mailbox
This commit is contained in:
@@ -0,0 +1,129 @@
|
|||||||
|
import 'package:core/data/model/source_type/data_source_type.dart';
|
||||||
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/state.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
|
import 'package:mockito/annotations.dart';
|
||||||
|
import 'package:mockito/mockito.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox/data/datasource/state_datasource.dart';
|
||||||
|
import 'package:tmail_ui_user/features/thread/data/datasource/thread_datasource.dart';
|
||||||
|
import 'package:tmail_ui_user/features/thread/data/model/email_change_response.dart';
|
||||||
|
import 'package:tmail_ui_user/features/thread/data/repository/thread_repository_impl.dart';
|
||||||
|
|
||||||
|
import '../../../../fixtures/account_fixtures.dart';
|
||||||
|
import '../../../../fixtures/session_fixtures.dart';
|
||||||
|
import 'thread_repository_impl_test.mocks.dart';
|
||||||
|
|
||||||
|
@GenerateNiceMocks([
|
||||||
|
MockSpec<ThreadDataSource>(),
|
||||||
|
MockSpec<StateDataSource>(),
|
||||||
|
])
|
||||||
|
void main() {
|
||||||
|
final threadDataSource = MockThreadDataSource();
|
||||||
|
final stateDataSource = MockStateDataSource();
|
||||||
|
final threadRepository = ThreadRepositoryImpl(
|
||||||
|
{
|
||||||
|
DataSourceType.network: threadDataSource,
|
||||||
|
DataSourceType.local: threadDataSource,
|
||||||
|
},
|
||||||
|
stateDataSource,
|
||||||
|
);
|
||||||
|
|
||||||
|
group('thread repository impl test:', () {
|
||||||
|
test(
|
||||||
|
'should not call threadDatasource.getChanges '
|
||||||
|
'when getAllEmail is called '
|
||||||
|
'and getLatestChanges is false',
|
||||||
|
() async {
|
||||||
|
// arrange
|
||||||
|
when(threadDataSource.getAllEmailCache(
|
||||||
|
any,
|
||||||
|
any,
|
||||||
|
filterOption: anyNamed('filterOption'),
|
||||||
|
inMailboxId: anyNamed('inMailboxId'),
|
||||||
|
limit: anyNamed('limit'),
|
||||||
|
sort: anyNamed('sort'),
|
||||||
|
)).thenAnswer(
|
||||||
|
(_) => Future.value(List.generate(30, (index) => Email(id: EmailId(Id('$index'))))),
|
||||||
|
);
|
||||||
|
when(stateDataSource.getState(
|
||||||
|
any,
|
||||||
|
any,
|
||||||
|
any,
|
||||||
|
)).thenAnswer((_) => Future.value(State('some-state')));
|
||||||
|
when(threadDataSource.getChanges(
|
||||||
|
any,
|
||||||
|
any,
|
||||||
|
any,
|
||||||
|
propertiesCreated: anyNamed('propertiesCreated'),
|
||||||
|
propertiesUpdated: anyNamed('propertiesUpdated'),
|
||||||
|
)).thenAnswer(
|
||||||
|
(_) => Future.value(EmailChangeResponse(hasMoreChanges: false)),
|
||||||
|
);
|
||||||
|
|
||||||
|
// act
|
||||||
|
await threadRepository.getAllEmail(
|
||||||
|
SessionFixtures.aliceSession,
|
||||||
|
AccountFixtures.aliceAccountId,
|
||||||
|
getLatestChanges: false,
|
||||||
|
).last;
|
||||||
|
|
||||||
|
// assert
|
||||||
|
verifyNever(threadDataSource.getChanges(
|
||||||
|
any,
|
||||||
|
any,
|
||||||
|
any,
|
||||||
|
propertiesCreated: anyNamed('propertiesCreated'),
|
||||||
|
propertiesUpdated: anyNamed('propertiesUpdated'),
|
||||||
|
));
|
||||||
|
});
|
||||||
|
|
||||||
|
test(
|
||||||
|
'should call threadDatasource.getChanges '
|
||||||
|
'when getAllEmail is called '
|
||||||
|
'and getLatestChanges is true',
|
||||||
|
() async {
|
||||||
|
// arrange
|
||||||
|
when(threadDataSource.getAllEmailCache(
|
||||||
|
any,
|
||||||
|
any,
|
||||||
|
filterOption: anyNamed('filterOption'),
|
||||||
|
inMailboxId: anyNamed('inMailboxId'),
|
||||||
|
limit: anyNamed('limit'),
|
||||||
|
sort: anyNamed('sort'),
|
||||||
|
)).thenAnswer(
|
||||||
|
(_) => Future.value(List.generate(30, (index) => Email(id: EmailId(Id('$index'))))),
|
||||||
|
);
|
||||||
|
when(stateDataSource.getState(
|
||||||
|
any,
|
||||||
|
any,
|
||||||
|
any,
|
||||||
|
)).thenAnswer((_) => Future.value(State('some-state')));
|
||||||
|
when(threadDataSource.getChanges(
|
||||||
|
any,
|
||||||
|
any,
|
||||||
|
any,
|
||||||
|
propertiesCreated: anyNamed('propertiesCreated'),
|
||||||
|
propertiesUpdated: anyNamed('propertiesUpdated'),
|
||||||
|
)).thenAnswer(
|
||||||
|
(_) => Future.value(EmailChangeResponse(hasMoreChanges: false)),
|
||||||
|
);
|
||||||
|
|
||||||
|
// act
|
||||||
|
await threadRepository.getAllEmail(
|
||||||
|
SessionFixtures.aliceSession,
|
||||||
|
AccountFixtures.aliceAccountId,
|
||||||
|
getLatestChanges: true,
|
||||||
|
).last;
|
||||||
|
|
||||||
|
// assert
|
||||||
|
verify(threadDataSource.getChanges(
|
||||||
|
any,
|
||||||
|
any,
|
||||||
|
any,
|
||||||
|
propertiesCreated: anyNamed('propertiesCreated'),
|
||||||
|
propertiesUpdated: anyNamed('propertiesUpdated'),
|
||||||
|
));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -43,6 +43,7 @@ import 'package:tmail_ui_user/features/thread/domain/usecases/refresh_changes_em
|
|||||||
import 'package:tmail_ui_user/features/thread/domain/usecases/search_email_interactor.dart';
|
import 'package:tmail_ui_user/features/thread/domain/usecases/search_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/usecases/search_more_email_interactor.dart';
|
import 'package:tmail_ui_user/features/thread/domain/usecases/search_more_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/model/search_state.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/model/search_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/thread/presentation/model/search_status.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/thread_controller.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/thread_controller.dart';
|
||||||
import 'package:tmail_ui_user/main/bindings/network/binding_tag.dart';
|
import 'package:tmail_ui_user/main/bindings/network/binding_tag.dart';
|
||||||
import 'package:tmail_ui_user/main/utils/toast_manager.dart';
|
import 'package:tmail_ui_user/main/utils/toast_manager.dart';
|
||||||
@@ -413,5 +414,55 @@ void main() {
|
|||||||
expect(mockMailboxDashBoardController.emailsInCurrentMailbox.length, equals(0));
|
expect(mockMailboxDashBoardController.emailsInCurrentMailbox.length, equals(0));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
group('_registerObxStreamListener test:', () {
|
||||||
|
test(
|
||||||
|
'should call _getEmailsInMailboxInteractor.execute with getLatestChanges is false '
|
||||||
|
'when mailboxDashBoardController.selectedMailbox updated',
|
||||||
|
() async {
|
||||||
|
// arrange
|
||||||
|
final mailboxBefore = PresentationMailbox(MailboxId(Id('mailbox-before-id')));
|
||||||
|
final mailboxAfter = PresentationMailbox(MailboxId(Id('mailbox-after-id')));
|
||||||
|
final selectedMailbox = Rxn(mailboxBefore);
|
||||||
|
when(mockMailboxDashBoardController.sessionCurrent).thenReturn(SessionFixtures.aliceSession);
|
||||||
|
when(mockMailboxDashBoardController.accountId).thenReturn(Rxn(AccountFixtures.aliceAccountId));
|
||||||
|
when(mockMailboxDashBoardController.selectedMailbox).thenReturn(selectedMailbox);
|
||||||
|
when(mockMailboxDashBoardController.searchController).thenReturn(mockSearchController);
|
||||||
|
when(mockMailboxDashBoardController.dashBoardAction).thenReturn(Rxn());
|
||||||
|
when(mockMailboxDashBoardController.emailUIAction).thenReturn(Rxn());
|
||||||
|
when(mockMailboxDashBoardController.viewState).thenReturn(Rx(Right(UIState.idle)));
|
||||||
|
when(mockMailboxDashBoardController.emailsInCurrentMailbox).thenReturn(RxList());
|
||||||
|
when(mockMailboxDashBoardController.listEmailSelected).thenReturn(RxList());
|
||||||
|
when(mockMailboxDashBoardController.currentSelectMode).thenReturn(Rx(SelectMode.INACTIVE));
|
||||||
|
when(mockMailboxDashBoardController.filterMessageOption).thenReturn(Rx(FilterMessageOption.all));
|
||||||
|
when(mockSearchController.searchState).thenReturn(SearchState(SearchStatus.INACTIVE).obs);
|
||||||
|
|
||||||
|
// act
|
||||||
|
threadController.onInit();
|
||||||
|
mockMailboxDashBoardController.selectedMailbox.value = mailboxAfter;
|
||||||
|
await untilCalled(mockGetEmailsInMailboxInteractor.execute(
|
||||||
|
any,
|
||||||
|
any,
|
||||||
|
limit: anyNamed('limit'),
|
||||||
|
sort: anyNamed('sort'),
|
||||||
|
emailFilter: anyNamed('emailFilter'),
|
||||||
|
propertiesCreated: anyNamed('propertiesCreated'),
|
||||||
|
propertiesUpdated: anyNamed('propertiesUpdated'),
|
||||||
|
getLatestChanges: anyNamed('getLatestChanges'),
|
||||||
|
));
|
||||||
|
|
||||||
|
// assert
|
||||||
|
verify(mockGetEmailsInMailboxInteractor.execute(
|
||||||
|
any,
|
||||||
|
any,
|
||||||
|
limit: anyNamed('limit'),
|
||||||
|
sort: anyNamed('sort'),
|
||||||
|
emailFilter: anyNamed('emailFilter'),
|
||||||
|
propertiesCreated: anyNamed('propertiesCreated'),
|
||||||
|
propertiesUpdated: anyNamed('propertiesUpdated'),
|
||||||
|
getLatestChanges: false,
|
||||||
|
));
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user