TF-2858 Implement store event attendance status on presentation layer

This commit is contained in:
dab246
2024-05-17 17:58:23 +07:00
committed by Dat H. Pham
parent 9ce2fa69db
commit 5bac79b97a
21 changed files with 295 additions and 107 deletions
@@ -4,6 +4,7 @@ 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/properties/event_id.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:tmail_ui_user/features/email/domain/exceptions/calendar_event_exceptions.dart';
@@ -19,6 +20,7 @@ void main() {
final acceptCalendarEventInteractor = AcceptCalendarEventInteractor(calendarEventRepository);
final accountId = AccountId(Id('123'));
final blobId = Id('123321');
final emailId = EmailId(Id('abcde'));
group('calendar event accept interactor test:', () {
test('should emit CalendarEventAccepted when repo return data', () {
@@ -32,10 +34,10 @@ void main() {
// assert
expect(
acceptCalendarEventInteractor.execute(accountId, {blobId}),
acceptCalendarEventInteractor.execute(accountId, {blobId}, emailId),
emitsInOrder([
Right(CalendarEventAccepting()),
Right(CalendarEventAccepted(calendarEventAcceptResponse))]));
Right(CalendarEventAccepted(calendarEventAcceptResponse, emailId))]));
});
test('should emit CalendarEventAcceptFailure when repo throw exception', () {
@@ -45,7 +47,7 @@ void main() {
// assert
expect(
acceptCalendarEventInteractor.execute(accountId, {blobId}),
acceptCalendarEventInteractor.execute(accountId, {blobId}, emailId),
emitsInOrder([
Right(CalendarEventAccepting()),
Left(CalendarEventAcceptFailure(exception: exception))]));
@@ -4,6 +4,7 @@ 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/properties/event_id.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/mockito.dart';
import 'package:tmail_ui_user/features/email/domain/exceptions/calendar_event_exceptions.dart';
import 'package:tmail_ui_user/features/email/domain/state/calendar_event_reject_state.dart';
@@ -16,6 +17,7 @@ void main() {
final rejectCalendarEventInteractor = RejectCalendarEventInteractor(calendarEventRepository);
final accountId = AccountId(Id('123'));
final blobId = Id('123321');
final emailId = EmailId(Id('abcde'));
group('calendar event reject interactor test:', () {
test('should emit CalendarEventRejected when repo return data', () {
@@ -29,10 +31,10 @@ void main() {
// assert
expect(
rejectCalendarEventInteractor.execute(accountId, {blobId}),
rejectCalendarEventInteractor.execute(accountId, {blobId}, emailId),
emitsInOrder([
Right(CalendarEventRejecting()),
Right(CalendarEventRejected(calendarEventRejectResponse))]));
Right(CalendarEventRejected(calendarEventRejectResponse, emailId))]));
});
test('should emit CalendarEventRejectFailure when repo throw exception', () {
@@ -42,7 +44,7 @@ void main() {
// assert
expect(
rejectCalendarEventInteractor.execute(accountId, {blobId}),
rejectCalendarEventInteractor.execute(accountId, {blobId}, emailId),
emitsInOrder([
Right(CalendarEventRejecting()),
Left(CalendarEventRejectFailure(exception: exception))]));
@@ -4,6 +4,7 @@ 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/properties/event_id.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/reply/calendar_event_maybe_response.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:mockito/mockito.dart';
import 'package:tmail_ui_user/features/email/domain/exceptions/calendar_event_exceptions.dart';
import 'package:tmail_ui_user/features/email/domain/state/calendar_event_maybe_state.dart';
@@ -16,6 +17,7 @@ void main() {
final maybeCalendarEventInteractor = MaybeCalendarEventInteractor(calendarEventRepository);
final accountId = AccountId(Id('123'));
final blobId = Id('123321');
final emailId = EmailId(Id('abcde'));
group('calendar event maybe interactor should emit expected states', () {
test('when repo return data', () {
@@ -29,10 +31,10 @@ void main() {
// assert
expect(
maybeCalendarEventInteractor.execute(accountId, {blobId}),
maybeCalendarEventInteractor.execute(accountId, {blobId}, emailId),
emitsInOrder([
Right(CalendarEventMaybeReplying()),
Right(CalendarEventMaybeSuccess(calendarEventMaybeResponse))]));
Right(CalendarEventMaybeSuccess(calendarEventMaybeResponse, emailId))]));
});
test('when repo throw exception', () {
@@ -42,7 +44,7 @@ void main() {
// assert
expect(
maybeCalendarEventInteractor.execute(accountId, {blobId}),
maybeCalendarEventInteractor.execute(accountId, {blobId}, emailId),
emitsInOrder([
Right(CalendarEventMaybeReplying()),
Left(CalendarEventMaybeFailure(exception: exception))]));
@@ -10,6 +10,7 @@ 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/email/email.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'package:model/model.dart';
@@ -28,6 +29,7 @@ import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_email_read_
import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_star_email_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/move_to_mailbox_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/domain/usecases/view_attachment_for_web_interactor.dart';
import 'package:tmail_ui_user/features/email/presentation/controller/email_supervisor_controller.dart';
@@ -81,6 +83,7 @@ const fallbackGenerators = {
MockSpec<AcceptCalendarEventInteractor>(),
MockSpec<MaybeCalendarEventInteractor>(),
MockSpec<RejectCalendarEventInteractor>(),
MockSpec<StoreEventAttendanceStatusInteractor>(),
])
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
@@ -112,6 +115,7 @@ void main() {
final responsiveUtils = MockResponsiveUtils();
final uuid = MockUuid();
final printEmailInteractor = MockPrintEmailInteractor();
final storeEventAttendanceStatusInteractor = MockStoreEventAttendanceStatusInteractor();
late SingleEmailController singleEmailController;
@@ -161,6 +165,7 @@ void main() {
storeOpenedEmailInteractor,
viewAttachmentForWebInteractor,
printEmailInteractor,
storeEventAttendanceStatusInteractor,
);
});
@@ -269,6 +274,7 @@ void main() {
group('calendar event reply test:', () {
final blobId = Id('abc123');
final emailId = EmailId(Id('xyz123'));
final calendarEvent = CalendarEvent();
group('accept test:', () {
@@ -290,11 +296,11 @@ void main() {
calendarEventList: [calendarEvent])]));
// act
singleEmailController.onCalendarEventReplyAction(EventActionType.yes);
await untilCalled(acceptCalendarEventInteractor.execute(any, any));
singleEmailController.onCalendarEventReplyAction(EventActionType.yes, emailId);
await untilCalled(acceptCalendarEventInteractor.execute(any, any, any));
// assert
verify(acceptCalendarEventInteractor.execute(testAccountId, {blobId})).called(1);
verify(acceptCalendarEventInteractor.execute(testAccountId, {blobId}, emailId)).called(1);
});
});
@@ -317,11 +323,11 @@ void main() {
calendarEventList: [calendarEvent])]));
// act
singleEmailController.onCalendarEventReplyAction(EventActionType.maybe);
await untilCalled(maybeCalendarEventInteractor.execute(any, any));
singleEmailController.onCalendarEventReplyAction(EventActionType.maybe, emailId);
await untilCalled(maybeCalendarEventInteractor.execute(any, any, any));
// assert
verify(maybeCalendarEventInteractor.execute(testAccountId, {blobId})).called(1);
verify(maybeCalendarEventInteractor.execute(testAccountId, {blobId}, emailId)).called(1);
});
});
@@ -344,11 +350,11 @@ void main() {
calendarEventList: [calendarEvent])]));
// act
singleEmailController.onCalendarEventReplyAction(EventActionType.no);
await untilCalled(rejectCalendarEventInteractor.execute(any, any));
singleEmailController.onCalendarEventReplyAction(EventActionType.no, emailId);
await untilCalled(rejectCalendarEventInteractor.execute(any, any, any));
// assert
verify(rejectCalendarEventInteractor.execute(testAccountId, {blobId})).called(1);
verify(rejectCalendarEventInteractor.execute(testAccountId, {blobId}, emailId)).called(1);
});
});
});