diff --git a/email_recovery/lib/email_recovery/get/get_email_recovery_action_method.dart b/email_recovery/lib/email_recovery/get/get_email_recovery_action_method.dart new file mode 100644 index 000000000..5ada885a5 --- /dev/null +++ b/email_recovery/lib/email_recovery/get/get_email_recovery_action_method.dart @@ -0,0 +1,34 @@ +import 'package:email_recovery/email_recovery/capability_deleted_messages_vault.dart'; +import 'package:jmap_dart_client/http/converter/id_converter.dart'; +import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart'; +import 'package:jmap_dart_client/jmap/core/method/request/get_method.dart'; +import 'package:jmap_dart_client/jmap/core/request/request_invocation.dart'; +import 'package:jmap_dart_client/http/converter/properties_converter.dart'; +import 'package:json_annotation/json_annotation.dart'; +import 'package:jmap_dart_client/jmap/core/request/result_reference.dart'; + +part 'get_email_recovery_action_method.g.dart'; + +@IdConverter() +@PropertiesConverter() +@JsonSerializable(explicitToJson: true) +class GetEmailRecoveryActionMethod extends GetMethodNoNeedAccountId { + GetEmailRecoveryActionMethod() : super(); + + @override + MethodName get methodName => MethodName('EmailRecoveryAction/get'); + + @override + Set get requiredCapabilities => { + CapabilityIdentifier.jmapCore, + capabilityDeletedMessagesVault + }; + + @override + List get props => [methodName, ids, properties, requiredCapabilities]; + + factory GetEmailRecoveryActionMethod.fromJson(Map json) => _$GetEmailRecoveryActionMethodFromJson(json); + + @override + Map toJson() => _$GetEmailRecoveryActionMethodToJson(this); +} \ No newline at end of file diff --git a/email_recovery/lib/email_recovery/get/get_email_recovery_action_response.dart b/email_recovery/lib/email_recovery/get/get_email_recovery_action_response.dart new file mode 100644 index 000000000..2a6bad130 --- /dev/null +++ b/email_recovery/lib/email_recovery/get/get_email_recovery_action_response.dart @@ -0,0 +1,28 @@ +import 'package:email_recovery/email_recovery/email_recovery_action.dart'; +import 'package:jmap_dart_client/jmap/core/id.dart'; +import 'package:jmap_dart_client/jmap/core/method/response/get_response.dart'; +import 'package:jmap_dart_client/http/converter/id_converter.dart'; +import 'package:json_annotation/json_annotation.dart'; + + +part 'get_email_recovery_action_response.g.dart'; + +@IdConverter() +@JsonSerializable() +class GetEmailRecoveryActionResponse extends GetResponseNoAccountId { + GetEmailRecoveryActionResponse( + List list, + List? notFound + ) : super(list, notFound); + + factory GetEmailRecoveryActionResponse.fromJson(Map json) => _$GetEmailRecoveryActionResponseFromJson(json); + + static GetEmailRecoveryActionResponse deserialize(Map json) { + return GetEmailRecoveryActionResponse.fromJson(json); + } + + Map toJson() => _$GetEmailRecoveryActionResponseToJson(this); + + @override + List get props => [list, notFound]; +} \ No newline at end of file diff --git a/email_recovery/test/method/get_email_recovery_action_method_test.dart b/email_recovery/test/method/get_email_recovery_action_method_test.dart new file mode 100644 index 000000000..d7e725128 --- /dev/null +++ b/email_recovery/test/method/get_email_recovery_action_method_test.dart @@ -0,0 +1,83 @@ +import 'package:dio/dio.dart'; +import 'package:email_recovery/email_recovery/email_recovery_action.dart'; +import 'package:email_recovery/email_recovery/email_recovery_action_id.dart'; +import 'package:email_recovery/email_recovery/get/get_email_recovery_action_method.dart'; +import 'package:email_recovery/email_recovery/get/get_email_recovery_action_response.dart'; +import 'package:email_recovery/email_recovery/status.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:jmap_dart_client/jmap/core/id.dart'; +import 'package:http_mock_adapter/src/adapters/dio_adapter.dart'; +import 'package:jmap_dart_client/http/http_client.dart'; +import 'package:jmap_dart_client/jmap/jmap_request.dart'; + +void main() { + group('test to json email recovery action get method', () { + final expectEmailRecoveryAction = EmailRecoveryAction( + id: EmailRecoveryActionId(Id('2034-495-05857-57abcd-0876664')), + status: Status.inProgress + ); + + test('email recovery action get method and response parsing', () async { + final baseOption = BaseOptions(method: 'POST'); + final dio = Dio(baseOption)..options.baseUrl = 'http://domain.com/jmap'; + final dioAdapter = DioAdapter(dio: dio); + dioAdapter.onPost( + '', + (server) => server.reply(200, { + "sessionState": "2c9f1b12-b35a-43e6-9af2-0106fb53a943", + "methodResponses": [ + [ + "EmailRecoveryAction/get", + { + "notFound": [], + "list": [ + { + "id": "2034-495-05857-57abcd-0876664", + "status": "inProgress" + } + ] + }, + "c0" + ] + ] + }), + data: { + "using": [ + "urn:ietf:params:jmap:core", + "com:linagora:params:jmap:messages:vault" + ], + "methodCalls": [ + [ + "EmailRecoveryAction/get", + {}, + "c0" + ] + ] + }, + headers: { + "accept": "application/json;jmapVersion=rfc-8621", + "content-length": 162 + } + ); + + final httpClient = HttpClient(dio); + final processingInvocation = ProcessingInvocation(); + final requestBuilder = JmapRequestBuilder(httpClient, processingInvocation); + + final getEmailRecoveryActionMethod = GetEmailRecoveryActionMethod(); + final getEmailRecoveryActionInvocation = requestBuilder.invocation(getEmailRecoveryActionMethod); + final response = await (requestBuilder + ..usings(getEmailRecoveryActionMethod.requiredCapabilities)) + .build() + .execute(); + + final resultList = response.parse( + getEmailRecoveryActionInvocation.methodCallId, + GetEmailRecoveryActionResponse.deserialize + ); + + expect(resultList?.list.length, equals(1)); + expect(resultList?.list, contains(expectEmailRecoveryAction)); + }); + }); +}