Skip to content

Commit

Permalink
TF-3035 Unit test draft with identity
Browse files Browse the repository at this point in the history
  • Loading branch information
tddang-linagora committed Sep 16, 2024
1 parent a4caf48 commit 7a5d228
Show file tree
Hide file tree
Showing 3 changed files with 242 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -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);
});
});
}
Original file line number Diff line number Diff line change
@@ -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);
});
});
}
Original file line number Diff line number Diff line change
@@ -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);
});
});
}

0 comments on commit 7a5d228

Please sign in to comment.