TF-3035 Unit test draft with identity

This commit is contained in:
DatDang
2024-09-09 11:24:48 +07:00
committed by Dat H. Pham
parent 7faa9c791c
commit b407257e65
3 changed files with 242 additions and 0 deletions
@@ -0,0 +1,114 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'package:model/email/email_action_type.dart';
import 'package:tmail_ui_user/features/composer/domain/repository/composer_repository.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/create_new_and_save_email_to_drafts_interactor.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/create_email_request.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart';
import '../../../../fixtures/account_fixtures.dart';
import '../../../../fixtures/session_fixtures.dart';
import 'create_new_and_save_email_to_drafts_interactor_test.mocks.dart';
@GenerateNiceMocks([
MockSpec<EmailRepository>(),
MockSpec<MailboxRepository>(),
MockSpec<ComposerRepository>(),
])
void main() {
late MockEmailRepository emailRepository;
late MockMailboxRepository mailboxRepository;
late MockComposerRepository composerRepository;
late CreateNewAndSaveEmailToDraftsInteractor createNewAndSaveEmailToDraftsInteractor;
setUp(() {
emailRepository = MockEmailRepository();
mailboxRepository = MockMailboxRepository();
composerRepository = MockComposerRepository();
createNewAndSaveEmailToDraftsInteractor = CreateNewAndSaveEmailToDraftsInteractor(
emailRepository,
mailboxRepository,
composerRepository);
});
group('create new and save email to drafts interactor test:', () {
test(
'should call generateEmail from composerRepository with withIdentityHeader is true '
'when execute is called '
'and draftsEmailId != null',
() async {
// arrange
final createEmailRequest = CreateEmailRequest(
session: SessionFixtures.aliceSession,
accountId: AccountFixtures.aliceAccountId,
emailActionType: EmailActionType.editDraft,
subject: 'subject',
emailContent: 'emailContent',
fromSender: {},
toRecipients: {},
ccRecipients: {},
bccRecipients: {},
draftsEmailId: EmailId(Id('some-id'))
);
when(composerRepository.generateEmail(any, withIdentityHeader: anyNamed('withIdentityHeader')))
.thenAnswer((_) async => Email());
when(emailRepository.updateEmailDrafts(any, any, any, any))
.thenAnswer((_) async => Email());
// act
createNewAndSaveEmailToDraftsInteractor
.execute(createEmailRequest: createEmailRequest)
.last;
await untilCalled(composerRepository.generateEmail(
any,
withIdentityHeader: anyNamed('withIdentityHeader')));
// assert
verify(composerRepository.generateEmail(
createEmailRequest,
withIdentityHeader: true)
).called(1);
});
test(
'should call generateEmail from composerRepository with withIdentityHeader is true '
'when execute is called '
'and draftsEmailId == null',
() async {
// arrange
final createEmailRequest = CreateEmailRequest(
session: SessionFixtures.aliceSession,
accountId: AccountFixtures.aliceAccountId,
emailActionType: EmailActionType.editDraft,
subject: 'subject',
emailContent: 'emailContent',
fromSender: {},
toRecipients: {},
ccRecipients: {},
bccRecipients: {},
);
when(composerRepository.generateEmail(any, withIdentityHeader: anyNamed('withIdentityHeader')))
.thenAnswer((_) async => Email());
when(emailRepository.saveEmailAsDrafts(any, any, any))
.thenAnswer((_) async => Email());
// act
createNewAndSaveEmailToDraftsInteractor
.execute(createEmailRequest: createEmailRequest)
.last;
await untilCalled(composerRepository.generateEmail(
any,
withIdentityHeader: anyNamed('withIdentityHeader')));
// assert
verify(composerRepository.generateEmail(
createEmailRequest,
withIdentityHeader: true)
).called(1);
});
});
}
@@ -0,0 +1,64 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'package:model/email/email_action_type.dart';
import 'package:tmail_ui_user/features/composer/domain/repository/composer_repository.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/create_new_and_send_email_interactor.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/create_email_request.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart';
import '../../../../fixtures/account_fixtures.dart';
import '../../../../fixtures/session_fixtures.dart';
import 'create_new_and_send_email_interactor_test.mocks.dart';
@GenerateNiceMocks([
MockSpec<EmailRepository>(),
MockSpec<MailboxRepository>(),
MockSpec<ComposerRepository>(),
])
void main() {
final emailRepository = MockEmailRepository();
final mailboxRepository = MockMailboxRepository();
final composerRepository = MockComposerRepository();
final createNewAndSendEmailInteractor = CreateNewAndSendEmailInteractor(
emailRepository,
mailboxRepository,
composerRepository);
group('create new and send email interactor test:', () {
test(
'should call generateEmail from composerRepository with withIdentityHeader is false '
'when execute is called',
() async {
// arrange
final createEmailRequest = CreateEmailRequest(
session: SessionFixtures.aliceSession,
accountId: AccountFixtures.aliceAccountId,
emailActionType: EmailActionType.editDraft,
subject: 'subject',
emailContent: 'emailContent',
fromSender: {},
toRecipients: {},
ccRecipients: {},
bccRecipients: {},
);
when(composerRepository.generateEmail(any, withIdentityHeader: anyNamed('withIdentityHeader')))
.thenAnswer((_) async => Email());
// act
createNewAndSendEmailInteractor
.execute(createEmailRequest: createEmailRequest)
.last;
await untilCalled(composerRepository.generateEmail(
any,
withIdentityHeader: anyNamed('withIdentityHeader')));
// assert
verify(composerRepository.generateEmail(
createEmailRequest,
withIdentityHeader: false)
).called(1);
});
});
}
@@ -0,0 +1,64 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_body_part.dart';
import 'package:jmap_dart_client/jmap/mail/email/individual_header_identifier.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/composer/presentation/extensions/create_email_request_extension.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/create_email_request.dart';
import '../../../../fixtures/account_fixtures.dart';
import '../../../../fixtures/session_fixtures.dart';
void main() {
final createEmailRequest = CreateEmailRequest(
session: SessionFixtures.aliceSession,
accountId: AccountFixtures.aliceAccountId,
emailActionType: EmailActionType.editDraft,
subject: 'subject',
emailContent: 'emailContent',
fromSender: {},
toRecipients: {},
ccRecipients: {},
bccRecipients: {},
);
group('create email request extension test:', () {
test(
'should return email with identity header '
'when generateEmail is called '
'and withIdentityHeader is true',
() {
// act
final result = createEmailRequest.generateEmail(
newEmailContent: 'newEmailContent',
newEmailAttachments: {},
userAgent: 'userAgent',
partId: PartId('value'),
withIdentityHeader: true
);
// assert
expect(
result.identityHeader?.containsKey(
IndividualHeaderIdentifier.identityHeader),
isTrue);
});
test(
'should return email without identity header '
'when generateEmail is called '
'and withIdentityHeader is false',
() {
// act
final result = createEmailRequest.generateEmail(
newEmailContent: 'newEmailContent',
newEmailAttachments: {},
userAgent: 'userAgent',
partId: PartId('value'),
withIdentityHeader: false
);
// assert
expect(result.identityHeader, isNull);
});
});
}