TF-145 Add unit-test for GetEmailsInMailboxInteractor

This commit is contained in:
dab246
2021-10-07 15:27:19 +07:00
committed by Dat H. Pham
parent a313ec72ed
commit aa8ab28b2e
3 changed files with 170 additions and 7 deletions
@@ -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'))
)
}));
});
});
}
@@ -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>);
}