TF-3589 Calendar event attendance status
This commit is contained in:
-93
@@ -1,93 +0,0 @@
|
||||
import 'package:dartz/dartz.dart' hide State;
|
||||
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:tmail_ui_user/features/email/domain/model/event_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/store_event_attendance_status_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/store_event_attendance_status_interactor.dart';
|
||||
|
||||
import '../../../../fixtures/account_fixtures.dart';
|
||||
import '../../../../fixtures/email_fixtures.dart';
|
||||
import '../../../../fixtures/session_fixtures.dart';
|
||||
|
||||
import 'store_event_attendance_status_interactor_test.mocks.dart';
|
||||
|
||||
@GenerateNiceMocks([
|
||||
MockSpec<EmailRepository>()
|
||||
])
|
||||
void main() {
|
||||
group('StoreEventAttendanceStatusInteractor test', () {
|
||||
late MockEmailRepository mockEmailRepository;
|
||||
late StoreEventAttendanceStatusInteractor storeEventAttendanceStatusInteractor;
|
||||
|
||||
setUp(() {
|
||||
mockEmailRepository = MockEmailRepository();
|
||||
storeEventAttendanceStatusInteractor = StoreEventAttendanceStatusInteractor(mockEmailRepository);
|
||||
});
|
||||
|
||||
final sessionFixture = SessionFixtures.aliceSession;
|
||||
final accountIdFixture = AccountFixtures.aliceAccountId;
|
||||
final emailIdFixture = EmailFixtures.emailId;
|
||||
const eventActionType = EventActionType.yes;
|
||||
|
||||
test('SHOULD emit loading and success states when storeEventAttendanceStatus is successful', () async {
|
||||
final updatedEmail = Email(id: emailIdFixture);
|
||||
|
||||
when(mockEmailRepository.storeEventAttendanceStatus(
|
||||
sessionFixture,
|
||||
accountIdFixture,
|
||||
emailIdFixture,
|
||||
eventActionType
|
||||
)).thenAnswer((_) async => updatedEmail);
|
||||
|
||||
final result = storeEventAttendanceStatusInteractor.execute(
|
||||
sessionFixture,
|
||||
accountIdFixture,
|
||||
emailIdFixture,
|
||||
eventActionType);
|
||||
|
||||
await expectLater(
|
||||
result,
|
||||
emitsInOrder([
|
||||
Right(StoreEventAttendanceStatusLoading()),
|
||||
Right(StoreEventAttendanceStatusSuccess(eventActionType)),
|
||||
]),
|
||||
);
|
||||
|
||||
verify(mockEmailRepository.storeEventAttendanceStatus(
|
||||
sessionFixture,
|
||||
accountIdFixture,
|
||||
emailIdFixture,
|
||||
eventActionType
|
||||
)).called(1);
|
||||
verifyNoMoreInteractions(mockEmailRepository);
|
||||
});
|
||||
|
||||
test('SHOULD emit loading and failure states when storeEventAttendanceStatus throws an exception', () async {
|
||||
final exception = Exception();
|
||||
|
||||
when(mockEmailRepository.storeEventAttendanceStatus(
|
||||
sessionFixture,
|
||||
accountIdFixture,
|
||||
emailIdFixture,
|
||||
eventActionType,
|
||||
)).thenThrow(exception);
|
||||
|
||||
final result = storeEventAttendanceStatusInteractor.execute(
|
||||
sessionFixture,
|
||||
accountIdFixture,
|
||||
emailIdFixture,
|
||||
eventActionType);
|
||||
|
||||
await expectLater(
|
||||
result,
|
||||
emitsInOrder([
|
||||
Right(StoreEventAttendanceStatusLoading()),
|
||||
Left(StoreEventAttendanceStatusFailure(exception: exception)),
|
||||
]),
|
||||
);
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -14,7 +14,6 @@ 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';
|
||||
@@ -25,7 +24,6 @@ import 'package:tmail_ui_user/features/email/data/datasource_impl/html_datasourc
|
||||
import 'package:tmail_ui_user/features/email/data/local/html_analyzer.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/repository/calendar_event_repository_impl.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/usecases/calendar_event_accept_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/download_all_attachments_for_web_interactor.dart';
|
||||
@@ -44,7 +42,6 @@ import 'package:tmail_ui_user/features/email/domain/usecases/parse_calendar_even
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/parse_email_by_blob_id_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/preview_email_from_eml_file_interactor.dart';
|
||||
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/presentation/action/email_ui_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/controller/email_supervisor_controller.dart';
|
||||
@@ -65,7 +62,6 @@ import 'package:tmail_ui_user/main/utils/twake_app_manager.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
|
||||
import '../../../../fixtures/account_fixtures.dart';
|
||||
import '../../../../fixtures/email_fixtures.dart';
|
||||
import 'single_email_controller_test.mocks.dart';
|
||||
|
||||
mockControllerCallback() => InternalFinalCallback<void>(callback: () {});
|
||||
@@ -103,7 +99,6 @@ const fallbackGenerators = {
|
||||
MockSpec<AcceptCalendarEventInteractor>(),
|
||||
MockSpec<MaybeCalendarEventInteractor>(),
|
||||
MockSpec<RejectCalendarEventInteractor>(),
|
||||
MockSpec<StoreEventAttendanceStatusInteractor>(),
|
||||
MockSpec<ParseEmailByBlobIdInteractor>(),
|
||||
MockSpec<PreviewEmailFromEmlFileInteractor>(),
|
||||
MockSpec<PrintUtils>(),
|
||||
@@ -146,7 +141,6 @@ void main() {
|
||||
final responsiveUtils = MockResponsiveUtils();
|
||||
final uuid = MockUuid();
|
||||
final printEmailInteractor = MockPrintEmailInteractor();
|
||||
final storeEventAttendanceStatusInteractor = MockStoreEventAttendanceStatusInteractor();
|
||||
final parseEmailByBlobIdInteractor = MockParseEmailByBlobIdInteractor();
|
||||
final previewEmailFromEmlFileInteractor = MockPreviewEmailFromEmlFileInteractor();
|
||||
final printUtils = MockPrintUtils();
|
||||
@@ -211,7 +205,6 @@ void main() {
|
||||
getAllIdentitiesInteractor,
|
||||
storeOpenedEmailInteractor,
|
||||
printEmailInteractor,
|
||||
storeEventAttendanceStatusInteractor,
|
||||
parseEmailByBlobIdInteractor,
|
||||
previewEmailFromEmlFileInteractor,
|
||||
getHtmlContentFromAttachmentInteractor,
|
||||
@@ -320,88 +313,6 @@ void main() {
|
||||
});
|
||||
});
|
||||
|
||||
group('StoreEventAttendanceStatusInteractor test', () {
|
||||
|
||||
setUp(() {
|
||||
debugDefaultTargetPlatformOverride = TargetPlatform.macOS;
|
||||
});
|
||||
|
||||
group('calendarEventSuccess method test', () {
|
||||
test(
|
||||
'SHOULD call execute on StoreEventAttendanceStatusInteractor\n'
|
||||
'WHEN calendarEventSuccess method is called',
|
||||
() {
|
||||
when(mailboxDashboardController.sessionCurrent).thenReturn(testSession);
|
||||
|
||||
final eventAcceptedSuccess = CalendarEventAccepted(
|
||||
CalendarEventAcceptResponse(testAccountId, null),
|
||||
EmailFixtures.emailId);
|
||||
|
||||
singleEmailController.calendarEventSuccess(eventAcceptedSuccess);
|
||||
|
||||
verify(storeEventAttendanceStatusInteractor.execute(
|
||||
testSession,
|
||||
testAccountId,
|
||||
EmailFixtures.emailId,
|
||||
EventActionType.yes,
|
||||
)).called(1);
|
||||
});
|
||||
});
|
||||
|
||||
group('onCalendarEventReplyAction method test', () {
|
||||
test(
|
||||
'SHOULD call execute on StoreEventAttendanceStatusInteractor\n'
|
||||
'WHEN onCalendarEventReplyAction is called on EventActionType.yes\n'
|
||||
'AND return success',
|
||||
() async {
|
||||
final acceptCalendarEventInteractor = MockAcceptCalendarEventInteractor();
|
||||
final blobId = Id('abc123');
|
||||
final emailId = EmailId(Id('xyz123'));
|
||||
final calendarEvent = CalendarEvent();
|
||||
|
||||
when(mailboxDashboardController.sessionCurrent).thenReturn(testSession);
|
||||
when(mailboxDashboardController.selectedEmail).thenReturn(Rxn(null));
|
||||
when(mailboxDashboardController.emailUIAction).thenReturn(Rxn(null));
|
||||
when(mailboxDashboardController.viewState).thenReturn(Rx(Right(UIState.idle)));
|
||||
|
||||
singleEmailController.onInit();
|
||||
|
||||
Get.put<AcceptCalendarEventInteractor>(acceptCalendarEventInteractor);
|
||||
|
||||
mailboxDashboardController.accountId.refresh();
|
||||
|
||||
singleEmailController.handleSuccessViewState(
|
||||
ParseCalendarEventSuccess([
|
||||
BlobCalendarEvent(
|
||||
blobId: blobId,
|
||||
calendarEventList: [calendarEvent]
|
||||
)
|
||||
])
|
||||
);
|
||||
|
||||
singleEmailController.onCalendarEventReplyAction(EventActionType.yes, emailId);
|
||||
|
||||
singleEmailController.calendarEventSuccess(CalendarEventAccepted(
|
||||
CalendarEventAcceptResponse(testAccountId, null),
|
||||
emailId
|
||||
));
|
||||
|
||||
await untilCalled(storeEventAttendanceStatusInteractor.execute(any, any, any, any));
|
||||
|
||||
verify(storeEventAttendanceStatusInteractor.execute(
|
||||
testSession,
|
||||
testAccountId,
|
||||
emailId,
|
||||
EventActionType.yes,
|
||||
)).called(1);
|
||||
});
|
||||
});
|
||||
|
||||
tearDown(() {
|
||||
debugDefaultTargetPlatformOverride = null;
|
||||
});
|
||||
});
|
||||
|
||||
group('_parseCalendarEventAction method test:', () {
|
||||
final calendarEventDataSource = MockCalendarEventDataSource();
|
||||
final calendarEventRepository = CalendarEventRepositoryImpl(
|
||||
|
||||
+141
@@ -0,0 +1,141 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/calendar/attendance/calendar_event_attendance.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/calendar/reply/calendar_event_accept_response.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/calendar/reply/calendar_event_maybe_response.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/calendar/reply/calendar_event_reject_response.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:mockito/annotations.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/calendar_event_accept_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/calendar_event_maybe_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/calendar_event_reject_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/parse_calendar_event_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/controller/single_email_controller.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/extensions/update_attendance_status_extension.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/blob_calendar_event.dart';
|
||||
|
||||
import 'update_attendance_status_extension_test.mocks.dart';
|
||||
|
||||
@GenerateNiceMocks([
|
||||
MockSpec<SingleEmailController>(),
|
||||
])
|
||||
void main() {
|
||||
final controller = MockSingleEmailController();
|
||||
group('update attendance status extension test', () {
|
||||
test(
|
||||
'should update attendance status '
|
||||
'when viewState is ParseCalendarEventSuccess',
|
||||
() {
|
||||
// Arrange
|
||||
when(controller.attendanceStatus).thenReturn(
|
||||
Rxn(AttendanceStatus.accepted),
|
||||
);
|
||||
final viewState = ParseCalendarEventSuccess([
|
||||
BlobCalendarEvent(
|
||||
blobId: Id('1'),
|
||||
calendarEventList: [],
|
||||
attendanceStatus: AttendanceStatus.accepted,
|
||||
),
|
||||
]);
|
||||
|
||||
// Act
|
||||
controller.updateAttendanceStatus(viewState);
|
||||
|
||||
// Assert
|
||||
expect(
|
||||
controller.attendanceStatus.value,
|
||||
viewState.blobCalendarEventList.firstOrNull?.attendanceStatus,
|
||||
);
|
||||
});
|
||||
test(
|
||||
'should return current attendance status '
|
||||
'when viewState is CalendarEventAccepted',
|
||||
() {
|
||||
// Arrange
|
||||
when(controller.attendanceStatus).thenReturn(Rxn());
|
||||
final viewState = CalendarEventAccepted(
|
||||
CalendarEventAcceptResponse(
|
||||
AccountId(Id('1')),
|
||||
[Id('1')],
|
||||
),
|
||||
EmailId(Id('1')),
|
||||
);
|
||||
|
||||
// Act
|
||||
controller.updateAttendanceStatus(viewState);
|
||||
|
||||
// Assert
|
||||
expect(
|
||||
controller.attendanceStatus.value,
|
||||
AttendanceStatus.accepted,
|
||||
);
|
||||
});
|
||||
test(
|
||||
'should return current attendance status '
|
||||
'when viewState is CalendarEventMaybeSuccess',
|
||||
() {
|
||||
// Arrange
|
||||
when(controller.attendanceStatus).thenReturn(Rxn());
|
||||
final viewState = CalendarEventMaybeSuccess(
|
||||
CalendarEventMaybeResponse(
|
||||
AccountId(Id('1')),
|
||||
[Id('1')],
|
||||
),
|
||||
EmailId(Id('1')),
|
||||
);
|
||||
|
||||
// Act
|
||||
controller.updateAttendanceStatus(viewState);
|
||||
|
||||
// Assert
|
||||
expect(
|
||||
controller.attendanceStatus.value,
|
||||
AttendanceStatus.tentativelyAccepted,
|
||||
);
|
||||
});
|
||||
test(
|
||||
'should return current attendance status '
|
||||
'when viewState is CalendarEventRejected',
|
||||
() {
|
||||
// Arrange
|
||||
when(controller.attendanceStatus).thenReturn(Rxn());
|
||||
final viewState = CalendarEventRejected(
|
||||
CalendarEventRejectResponse(
|
||||
AccountId(Id('1')),
|
||||
[Id('1')],
|
||||
),
|
||||
EmailId(Id('1')),
|
||||
);
|
||||
|
||||
// Act
|
||||
controller.updateAttendanceStatus(viewState);
|
||||
|
||||
// Assert
|
||||
expect(
|
||||
controller.attendanceStatus.value,
|
||||
AttendanceStatus.rejected,
|
||||
);
|
||||
});
|
||||
test(
|
||||
'should keep current attendance status '
|
||||
'when viewState is other',
|
||||
() {
|
||||
// Arrange
|
||||
const currentStatus = AttendanceStatus.accepted;
|
||||
when(controller.attendanceStatus).thenReturn(Rxn(currentStatus));
|
||||
final viewState = ParseCalendarEventLoading();
|
||||
|
||||
// Act
|
||||
controller.updateAttendanceStatus(viewState);
|
||||
|
||||
// Assert
|
||||
expect(
|
||||
controller.attendanceStatus.value,
|
||||
currentStatus,
|
||||
);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user