TF-145 Add unit-test for GetEmailsInMailboxInteractor
This commit is contained in:
@@ -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>);
|
||||
}
|
||||
Vendored
+14
-7
@@ -4,6 +4,8 @@ import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
|
||||
|
||||
import 'mailbox_fixtures.dart';
|
||||
|
||||
class EmailFixtures {
|
||||
static final email1 = Email(
|
||||
EmailId(Id("382312d0-fa5c-11eb-b647-2fef1ee78d9e")),
|
||||
@@ -14,6 +16,7 @@ class EmailFixtures {
|
||||
sentAt: UTCDate(DateTime.parse("2021-08-11T04:25:34Z")),
|
||||
receivedAt: UTCDate(DateTime.parse("2021-08-11T04:25:55Z")),
|
||||
keywords: {KeyWordIdentifier.emailSeen : true},
|
||||
mailboxIds: {MailboxFixtures.inboxMailbox.id : true},
|
||||
to: {EmailAddress("DatVu", "tdvu@linagora.com")},
|
||||
);
|
||||
|
||||
@@ -24,7 +27,8 @@ class EmailFixtures {
|
||||
subject: "Notification: Noti check",
|
||||
from: {EmailAddress(null, "noreply@qa.open-paas.org")},
|
||||
sentAt: UTCDate(DateTime.parse("2021-08-10T09:45:01Z")),
|
||||
receivedAt: UTCDate(DateTime.parse("2021-08-11T04:00:59Z")),
|
||||
receivedAt: UTCDate(DateTime.parse("2021-08-10T04:00:59Z")),
|
||||
mailboxIds: {MailboxFixtures.inboxMailbox.id : true},
|
||||
to: {EmailAddress("DatVu", "tdvu@facebook.com")},
|
||||
);
|
||||
|
||||
@@ -34,9 +38,10 @@ class EmailFixtures {
|
||||
hasAttachment: false,
|
||||
subject: "Notification: Recurrencr",
|
||||
from: {EmailAddress(null, "noreply@qa.open-paas.org")},
|
||||
sentAt: UTCDate(DateTime.parse("2021-08-11T03:00:00Z")),
|
||||
receivedAt: UTCDate(DateTime.parse("2021-08-11T04:00:55Z")),
|
||||
sentAt: UTCDate(DateTime.parse("2021-08-09T03:00:00Z")),
|
||||
receivedAt: UTCDate(DateTime.parse("2021-08-09T04:00:55Z")),
|
||||
keywords: {KeyWordIdentifier.emailFlagged : true},
|
||||
mailboxIds: {MailboxFixtures.inboxMailbox.id : true},
|
||||
to: {EmailAddress("DatVu", "tdvu@gmail.com")},
|
||||
);
|
||||
|
||||
@@ -46,9 +51,10 @@ class EmailFixtures {
|
||||
hasAttachment: true,
|
||||
subject: "test attachment",
|
||||
from: {EmailAddress("Haaheoo", "userc@qa.open-paas.org")},
|
||||
sentAt: UTCDate(DateTime.parse("2021-08-11T06:46:25Z")),
|
||||
receivedAt: UTCDate(DateTime.parse("2021-08-11T06:46:26Z")),
|
||||
sentAt: UTCDate(DateTime.parse("2021-08-08T06:46:25Z")),
|
||||
receivedAt: UTCDate(DateTime.parse("2021-08-08T06:46:26Z")),
|
||||
keywords: {KeyWordIdentifier.emailFlagged : true},
|
||||
mailboxIds: {MailboxFixtures.inboxMailbox.id : true},
|
||||
to: {EmailAddress("DatVu", "tdvu@icloud.com")},
|
||||
);
|
||||
|
||||
@@ -58,9 +64,10 @@ class EmailFixtures {
|
||||
hasAttachment: false,
|
||||
subject: "test inline image",
|
||||
from: {EmailAddress("Haaheoo", "userc@qa.open-paas.org")},
|
||||
sentAt: UTCDate(DateTime.parse("2021-08-11T04:34:13Z")),
|
||||
receivedAt: UTCDate(DateTime.parse("2021-08-11T04:34:17Z")),
|
||||
sentAt: UTCDate(DateTime.parse("2021-08-07T04:34:13Z")),
|
||||
receivedAt: UTCDate(DateTime.parse("2021-08-07T04:34:17Z")),
|
||||
keywords: {KeyWordIdentifier.emailSeen : true},
|
||||
mailboxIds: {MailboxFixtures.inboxMailbox.id : true},
|
||||
to: {EmailAddress("DatVu", "tdvu@yahoo.com")},
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user