TF-2764 Remove ViewAttachmentForWebInteractor

This commit is contained in:
dab246
2024-05-17 02:19:22 +07:00
committed by Dat H. Pham
parent 7524a97bc8
commit 450e0eb2ab
7 changed files with 52 additions and 483 deletions
@@ -1,255 +0,0 @@
import 'dart:async';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'package:model/download/download_task_id.dart';
import 'package:model/email/attachment.dart';
import 'package:tmail_ui_user/features/email/domain/state/download_attachment_for_web_state.dart';
import 'package:tmail_ui_user/features/email/domain/state/view_attachment_for_web_state.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/download_attachment_for_web_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/view_attachment_for_web_interactor.dart';
import 'view_attachment_for_web_interactor_test.mocks.dart';
@GenerateNiceMocks([
MockSpec<DownloadAttachmentForWebInteractor>(),
MockSpec<Failure>(),
MockSpec<Success>(),
])
void main() {
final testDownloadAttachmentForWebInteractor =
MockDownloadAttachmentForWebInteractor();
final viewAttachmentForWebInteractor =
ViewAttachmentForWebInteractor(testDownloadAttachmentForWebInteractor);
final testDownloadTaskId = DownloadTaskId('123');
final testAttachment = Attachment();
final testAccountId = AccountId(Id('id'));
final testException = TimeoutException('321');
const testBaseDownloadUrl = 'base_download_url';
final testReceiveController = StreamController<Either<Failure, Success>>();
final testFailure = MockFailure();
final testSuccess = MockSuccess();
final testBytes = Uint8List(12);
group('View attachment for web interactor', () {
test(
'should yield ViewAttachmentForWebFailure '
'when downloadAttachmentForWebInteractor yield DownloadAttachmentForWebFailure',
() {
// arrange
when(testDownloadAttachmentForWebInteractor.execute(
testDownloadTaskId,
testAttachment,
testAccountId,
testBaseDownloadUrl,
testReceiveController,
)).thenAnswer(
(_) => Stream.value(
Left(
DownloadAttachmentForWebFailure(
attachment: testAttachment,
taskId: testDownloadTaskId,
exception: testException,
),
),
),
);
// assert
expect(
viewAttachmentForWebInteractor.execute(
testDownloadTaskId,
testAttachment,
testAccountId,
testBaseDownloadUrl,
testReceiveController,
),
emitsInOrder([
Left(
ViewAttachmentForWebFailure(
attachment: testAttachment,
taskId: testDownloadTaskId,
exception: testException,
),
)
]),
);
},
);
test(
'should yield Failure '
'when downloadAttachmentForWebInteractor doesn\'t yield DownloadAttachmentForWebFailure',
() {
// arrange
when(testDownloadAttachmentForWebInteractor.execute(
testDownloadTaskId,
testAttachment,
testAccountId,
testBaseDownloadUrl,
testReceiveController,
)).thenAnswer((_) => Stream.value(Left(testFailure)));
// assert
expect(
viewAttachmentForWebInteractor.execute(
testDownloadTaskId,
testAttachment,
testAccountId,
testBaseDownloadUrl,
testReceiveController,
),
emitsInOrder([Left(testFailure)]),
);
},
);
test(
'should yield StartViewAttachmentForWeb '
'when downloadAttachmentForWebInteractor yield StartDownloadAttachmentForWeb',
() {
// arrange
when(testDownloadAttachmentForWebInteractor.execute(
testDownloadTaskId,
testAttachment,
testAccountId,
testBaseDownloadUrl,
testReceiveController,
)).thenAnswer((_) => Stream.value(
Right(StartDownloadAttachmentForWeb(
testDownloadTaskId,
testAttachment,
)),
));
// assert
expect(
viewAttachmentForWebInteractor.execute(
testDownloadTaskId,
testAttachment,
testAccountId,
testBaseDownloadUrl,
testReceiveController,
),
emitsInOrder([
Right(StartViewAttachmentForWeb(
testDownloadTaskId,
testAttachment,
))
]),
);
},
);
test(
'should yield ViewingAttachmentForWeb '
'when downloadAttachmentForWebInteractor yield DownloadingAttachmentForWeb',
() {
// arrange
when(testDownloadAttachmentForWebInteractor.execute(
testDownloadTaskId,
testAttachment,
testAccountId,
testBaseDownloadUrl,
testReceiveController,
)).thenAnswer(
(_) => Stream.fromIterable([
Right(DownloadingAttachmentForWeb(testDownloadTaskId, testAttachment, 0.5, 1, 2)),
Right(DownloadingAttachmentForWeb(testDownloadTaskId, testAttachment, 1, 1, 2)),
Right(DownloadingAttachmentForWeb(testDownloadTaskId, testAttachment, 1, 2, 2)),
]),
);
// assert
expect(
viewAttachmentForWebInteractor.execute(
testDownloadTaskId,
testAttachment,
testAccountId,
testBaseDownloadUrl,
testReceiveController,
),
emitsInOrder([
Right(ViewingAttachmentForWeb(testDownloadTaskId, testAttachment, 0.5, 1, 2)),
Right(ViewingAttachmentForWeb(testDownloadTaskId, testAttachment, 1, 1, 2)),
Right(ViewingAttachmentForWeb(testDownloadTaskId, testAttachment, 1, 2, 2)),
]),
);
},
);
test(
'should yield ViewAttachmentForWebSuccess '
'when downloadAttachmentForWebInteractor yield DownloadAttachmentForWebSuccess',
() {
// arrange
when(testDownloadAttachmentForWebInteractor.execute(
testDownloadTaskId,
testAttachment,
testAccountId,
testBaseDownloadUrl,
testReceiveController,
)).thenAnswer((_) => Stream.value(
Right(DownloadAttachmentForWebSuccess(
testDownloadTaskId,
testAttachment,
testBytes,
)),
));
// assert
expect(
viewAttachmentForWebInteractor.execute(
testDownloadTaskId,
testAttachment,
testAccountId,
testBaseDownloadUrl,
testReceiveController,
),
emitsInOrder([
Right(ViewAttachmentForWebSuccess(
testDownloadTaskId,
testAttachment,
testBytes,
)),
]),
);
},
);
test(
'should yield Success '
'when downloadAttachmentForWebInteractor yield state doesn\'t match any of the above',
() {
// arrange
when(testDownloadAttachmentForWebInteractor.execute(
testDownloadTaskId,
testAttachment,
testAccountId,
testBaseDownloadUrl,
testReceiveController,
)).thenAnswer((_) => Stream.value(Right(testSuccess)));
// assert
expect(
viewAttachmentForWebInteractor.execute(
testDownloadTaskId,
testAttachment,
testAccountId,
testBaseDownloadUrl,
testReceiveController,
),
emitsInOrder([Right(testSuccess)]),
);
},
);
});
}
@@ -2,28 +2,21 @@ import 'dart:ui';
import 'package:core/core.dart';
import 'package:dartz/dartz.dart' hide State;
import 'package:flutter/foundation.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:get/get.dart';
import 'package:http_parser/http_parser.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/capability/calendar_event_capability.dart';
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/core/state.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/calendar_event.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/reply/calendar_event_accept_response.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/caching/caching_manager.dart';
import 'package:tmail_ui_user/features/email/domain/model/event_action.dart';
import 'package:tmail_ui_user/features/email/domain/state/calendar_event_accept_state.dart';
import 'package:tmail_ui_user/features/email/domain/state/parse_calendar_event_state.dart';
import 'package:tmail_ui_user/features/email/domain/state/view_attachment_for_web_state.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/calendar_event_accept_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/maybe_calendar_event_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/calendar_event_reject_interactor.dart';
@@ -37,7 +30,6 @@ import 'package:tmail_ui_user/features/email/domain/usecases/move_to_mailbox_int
import 'package:tmail_ui_user/features/email/domain/usecases/print_email_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/store_event_attendance_status_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/store_opened_email_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/view_attachment_for_web_interactor.dart';
import 'package:tmail_ui_user/features/email/presentation/controller/email_supervisor_controller.dart';
import 'package:tmail_ui_user/features/email/presentation/controller/single_email_controller.dart';
import 'package:tmail_ui_user/features/email/presentation/model/blob_calendar_event.dart';
@@ -71,7 +63,6 @@ const fallbackGenerators = {
MockSpec<DownloadAttachmentForWebInteractor>(),
MockSpec<GetAllIdentitiesInteractor>(),
MockSpec<StoreOpenedEmailInteractor>(),
MockSpec<ViewAttachmentForWebInteractor>(),
MockSpec<MailboxDashBoardController>(fallbackGenerators: fallbackGenerators),
MockSpec<EmailSupervisorController>(fallbackGenerators: fallbackGenerators),
MockSpec<DownloadManager>(fallbackGenerators: fallbackGenerators),
@@ -91,6 +82,7 @@ const fallbackGenerators = {
MockSpec<MaybeCalendarEventInteractor>(),
MockSpec<RejectCalendarEventInteractor>(),
MockSpec<StoreEventAttendanceStatusInteractor>(),
MockSpec<PrintUtils>(),
])
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
@@ -106,7 +98,6 @@ void main() {
MockDownloadAttachmentForWebInteractor();
final getAllIdentitiesInteractor = MockGetAllIdentitiesInteractor();
final storeOpenedEmailInteractor = MockStoreOpenedEmailInteractor();
final viewAttachmentForWebInteractor = MockViewAttachmentForWebInteractor();
final mailboxDashboardController = MockMailboxDashBoardController();
final emailSupervisorController = MockEmailSupervisorController();
final downloadManager = MockDownloadManager();
@@ -123,6 +114,7 @@ void main() {
final uuid = MockUuid();
final printEmailInteractor = MockPrintEmailInteractor();
final storeEventAttendanceStatusInteractor = MockStoreEventAttendanceStatusInteractor();
final printUtils = MockPrintUtils();
late SingleEmailController singleEmailController;
@@ -135,8 +127,6 @@ void main() {
),
}, {}, {}, UserName('data'), google, google, google, google, State('1'));
const testTaskId = 'taskId';
final testDownloadTaskId = DownloadTaskId(testTaskId);
final testBytes = Uint8List(123);
setUpAll(() {
Get.put<MailboxDashBoardController>(mailboxDashboardController);
@@ -157,6 +147,7 @@ void main() {
Get.put<ImagePaths>(imagePaths);
Get.put<ResponsiveUtils>(responsiveUtils);
Get.put<Uuid>(uuid);
Get.put<PrintUtils>(printUtils);
when(mailboxDashboardController.accountId).thenReturn(Rxn(testAccountId));
when(uuid.v4()).thenReturn(testTaskId);
@@ -174,115 +165,11 @@ void main() {
downloadAttachmentForWebInteractor,
getAllIdentitiesInteractor,
storeOpenedEmailInteractor,
viewAttachmentForWebInteractor,
printEmailInteractor,
storeEventAttendanceStatusInteractor,
);
});
group('single email controller', () {
test(
'should call execute on ViewAttachmentForWebInteractor '
'when viewAttachmentForWeb is called',
() {
// arrange
when(mailboxDashboardController.sessionCurrent).thenReturn(testSession);
final testAttachment = Attachment();
// act
singleEmailController.viewAttachmentForWeb(testAttachment);
// assert
verify(viewAttachmentForWebInteractor.execute(
any,
testAttachment,
testAccountId,
any,
any,
)).called(1);
},
);
test(
'should trigger mailboxDashBoardController.deleteDownloadTask & downloadManager.openDownloadedFileWeb'
'when attachment mime type is pdf',
() async {
// arrange
const attachmentName = 'test_name.pdf';
final testAttachment = Attachment(
type: MediaType('application', 'pdf'),
name: attachmentName);
when(mailboxDashboardController.sessionCurrent).thenReturn(testSession);
when(viewAttachmentForWebInteractor.execute(
testDownloadTaskId,
testAttachment,
testAccountId,
any,
any,
)).thenAnswer((_) => Stream.value(
right(ViewAttachmentForWebSuccess(
testDownloadTaskId,
testAttachment,
testBytes,
)),
));
// act
singleEmailController.viewAttachmentForWeb(testAttachment);
// assert
await untilCalled(mailboxDashboardController.deleteDownloadTask(any));
verify(mailboxDashboardController.deleteDownloadTask(testDownloadTaskId))
.called(1);
await untilCalled(downloadManager.openDownloadedFileWeb(any, any, any));
verify(downloadManager.openDownloadedFileWeb(
testBytes,
Constant.pdfMimeType,
attachmentName,
)).called(1);
},
);
test(
'should trigger mailboxDashBoardController.deleteDownloadTask & downloadManager.createAnchorElementDownloadFileWeb'
'when attachment mime type is not pdf',
() async {
// arrange
const testFileName = 'test_file.txt';
final testAttachment = Attachment(name: testFileName);
when(mailboxDashboardController.sessionCurrent).thenReturn(testSession);
when(viewAttachmentForWebInteractor.execute(
testDownloadTaskId,
testAttachment,
testAccountId,
any,
any,
)).thenAnswer((_) => Stream.value(
right(ViewAttachmentForWebSuccess(
testDownloadTaskId,
testAttachment,
testBytes,
)),
));
// act
singleEmailController.viewAttachmentForWeb(testAttachment);
// assert
await untilCalled(mailboxDashboardController.deleteDownloadTask(any));
verify(mailboxDashboardController.deleteDownloadTask(testDownloadTaskId))
.called(1);
await untilCalled(
downloadManager.createAnchorElementDownloadFileWeb(any, any),
);
verify(downloadManager.createAnchorElementDownloadFileWeb(
testBytes,
testFileName,
)).called(1);
},
);
});
group('calendar event reply test:', () {
final blobId = Id('abc123');
final emailId = EmailId(Id('xyz123'));