From 77b13ee2a273c43dc14e710eb48c41afc0106dfe Mon Sep 17 00:00:00 2001 From: DatDang Date: Mon, 15 Apr 2024 11:19:26 +0700 Subject: [PATCH] TF-2800 Calendar event accept - repo implementation --- .../calendar_event_repository_impl.dart | 6 +++ .../calendar_event_repository_impl_test.dart | 53 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 test/features/email/data/repository/calendar_event_repository_impl_test.dart diff --git a/lib/features/email/data/repository/calendar_event_repository_impl.dart b/lib/features/email/data/repository/calendar_event_repository_impl.dart index 877b2dbfd..c62384f4f 100644 --- a/lib/features/email/data/repository/calendar_event_repository_impl.dart +++ b/lib/features/email/data/repository/calendar_event_repository_impl.dart @@ -3,6 +3,7 @@ import 'package:core/data/model/source_type/data_source_type.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/calendar_event.dart'; +import 'package:jmap_dart_client/jmap/mail/calendar/reply/calendar_event_accept_response.dart'; import 'package:tmail_ui_user/features/email/data/datasource/calendar_event_datasource.dart'; import 'package:tmail_ui_user/features/email/domain/model/event_action.dart'; import 'package:tmail_ui_user/features/email/domain/repository/calendar_event_repository.dart'; @@ -22,4 +23,9 @@ class CalendarEventRepositoryImpl extends CalendarEventRepository { Future> getListEventAction(String emailContents) { return _calendarEventDataSource[DataSourceType.local]!.getListEventAction(emailContents); } + + @override + Future acceptEventInvitation(AccountId accountId, Set blobIds) { + return _calendarEventDataSource[DataSourceType.network]!.acceptEventInvitation(accountId, blobIds); + } } \ No newline at end of file diff --git a/test/features/email/data/repository/calendar_event_repository_impl_test.dart b/test/features/email/data/repository/calendar_event_repository_impl_test.dart new file mode 100644 index 000000000..09b12d205 --- /dev/null +++ b/test/features/email/data/repository/calendar_event_repository_impl_test.dart @@ -0,0 +1,53 @@ +import 'package:core/data/model/source_type/data_source_type.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: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:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; +import 'package:tmail_ui_user/features/email/data/datasource/calendar_event_datasource.dart'; +import 'package:tmail_ui_user/features/email/data/repository/calendar_event_repository_impl.dart'; +import 'package:tmail_ui_user/features/email/domain/exceptions/calendar_event_exceptions.dart'; + +import 'calendar_event_repository_impl_test.mocks.dart'; + +@GenerateNiceMocks([MockSpec()]) +void main() { + final calendarEventNetworkDataSource = MockCalendarEventDataSource(); + final calendarEventDataSource = { + DataSourceType.network: calendarEventNetworkDataSource}; + final calendarEventRepository = CalendarEventRepositoryImpl(calendarEventDataSource); + final accountId = AccountId(Id('123')); + final blobId = Id('blobId'); + + group('calendar event repository test:', () { + final calendarEventAcceptResponseresponse = CalendarEventAcceptResponse( + accountId, + null, + accepted: [EventId(blobId.value)]); + + test('should return response when data source return response', () async { + // arrange + when(calendarEventNetworkDataSource.acceptEventInvitation(any, any)) + .thenAnswer((_) async => calendarEventAcceptResponseresponse); + + // act + final response = await calendarEventRepository.acceptEventInvitation(accountId, {blobId}); + + // assert + expect(response, calendarEventAcceptResponseresponse); + }); + + test('should throw exception when data source throw exception', () { + // arrange + when(calendarEventNetworkDataSource.acceptEventInvitation(any, any)) + .thenThrow(NotAcceptableCalendarEventException()); + + // assert + expect( + () => calendarEventRepository.acceptEventInvitation(accountId, {blobId}), + throwsA(isA())); + }); + }); +} \ No newline at end of file