TF-2100 Add email_recovery module in dependencies of app

(cherry picked from commit 55757848cc25ebbe00e4d50bc3a33e35450efb07)
This commit is contained in:
hieubt
2023-12-10 21:59:04 +07:00
committed by Dat H. Pham
parent 76ed6a0cb3
commit 409742e6ab
15 changed files with 135 additions and 83 deletions
+1
View File
@@ -21,6 +21,7 @@ jobs:
- forward - forward
- rule_filter - rule_filter
- fcm - fcm
- email_recovery
fail-fast: false fail-fast: false
steps: steps:
@@ -1,13 +0,0 @@
import 'package:email_recovery/email_recovery/email_recovery_action_id.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:json_annotation/json_annotation.dart';
class EmailRecoveryActionIdConverter implements JsonConverter<EmailRecoveryActionId, String> {
const EmailRecoveryActionIdConverter();
@override
EmailRecoveryActionId fromJson(String json) => EmailRecoveryActionId(Id(json));
@override
String toJson(EmailRecoveryActionId object) => object.id.value;
}
@@ -0,0 +1,13 @@
import 'package:email_recovery/email_recovery/email_recovery_action_id.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:json_annotation/json_annotation.dart';
class EmailRecoveryActionIdNullableConverter implements JsonConverter<EmailRecoveryActionId?, String?> {
const EmailRecoveryActionIdNullableConverter();
@override
EmailRecoveryActionId? fromJson(String? json) => json != null ? EmailRecoveryActionId(Id(json)) : null;
@override
String? toJson(EmailRecoveryActionId? object) => object?.id.value;
}
@@ -1,12 +0,0 @@
import 'package:email_recovery/email_recovery/status.dart';
import 'package:json_annotation/json_annotation.dart';
class StatusConverter implements JsonConverter<Status, String> {
const StatusConverter();
@override
Status fromJson(String json) => Status(json);
@override
String toJson(Status object) => object.value;
}
@@ -1,9 +1,8 @@
import 'package:email_recovery/email_recovery/converter/status_converter.dart';
import 'package:email_recovery/email_recovery/email_recovery_action_id.dart'; import 'package:email_recovery/email_recovery/email_recovery_action_id.dart';
import 'package:email_recovery/email_recovery/status.dart'; import 'package:email_recovery/email_recovery/email_recovery_status.dart.dart';
import 'package:equatable/equatable.dart'; import 'package:equatable/equatable.dart';
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
import 'package:email_recovery/email_recovery/converter/email_recovery_action_id_converter.dart'; import 'package:email_recovery/email_recovery/converter/email_recovery_action_id_nullable_converter.dart';
import 'package:json_annotation/json_annotation.dart'; import 'package:json_annotation/json_annotation.dart';
import 'package:jmap_dart_client/jmap/core/utc_date.dart'; import 'package:jmap_dart_client/jmap/core/utc_date.dart';
import 'package:jmap_dart_client/http/converter/utc_date_nullable_converter.dart'; import 'package:jmap_dart_client/http/converter/utc_date_nullable_converter.dart';
@@ -11,10 +10,9 @@ import 'package:jmap_dart_client/http/converter/unsigned_int_nullable_converter.
part 'email_recovery_action.g.dart'; part 'email_recovery_action.g.dart';
@EmailRecoveryActionIdConverter() @EmailRecoveryActionIdNullableConverter()
@UTCDateNullableConverter() @UTCDateNullableConverter()
@UnsignedIntNullableConverter() @UnsignedIntNullableConverter()
@StatusConverter()
@JsonSerializable(explicitToJson: true, includeIfNull: false) @JsonSerializable(explicitToJson: true, includeIfNull: false)
class EmailRecoveryAction with EquatableMixin { class EmailRecoveryAction with EquatableMixin {
final EmailRecoveryActionId? id; final EmailRecoveryActionId? id;
@@ -28,7 +26,7 @@ class EmailRecoveryAction with EquatableMixin {
final List<String>? recipients; final List<String>? recipients;
final UnsignedInt? successfulRestoreCount; final UnsignedInt? successfulRestoreCount;
final UnsignedInt? errorRestoreCount; final UnsignedInt? errorRestoreCount;
final Status? status; final EmailRecoveryStatus? status;
EmailRecoveryAction({ EmailRecoveryAction({
this.id, this.id,
@@ -50,36 +48,7 @@ class EmailRecoveryAction with EquatableMixin {
Map<String, dynamic> toJson() => _$EmailRecoveryActionToJson(this); Map<String, dynamic> toJson() => _$EmailRecoveryActionToJson(this);
EmailRecoveryAction copyWith({ @override
EmailRecoveryActionId? id,
UTCDate? deletedBefore,
UTCDate? deletedAfter,
UTCDate? receivedBefore,
UTCDate? receivedAfter,
bool? hasAttachment,
String? subject,
String? sender,
List<String>? recipients,
UnsignedInt? successfulRestoreCount,
UnsignedInt? errorRestoreCount,
Status? status,
}) {
return EmailRecoveryAction(
id: id ?? this.id,
deletedBefore: deletedBefore ?? this.deletedBefore,
deletedAfter: deletedAfter ?? this.deletedAfter,
receivedBefore: receivedBefore ?? this.receivedBefore,
receivedAfter: receivedAfter ?? this.receivedAfter,
hasAttachment: hasAttachment ?? this.hasAttachment,
subject: subject ?? this.subject,
sender: sender ?? this.sender,
recipients: recipients ?? this.recipients,
successfulRestoreCount: successfulRestoreCount ?? this.successfulRestoreCount,
errorRestoreCount: errorRestoreCount ?? this.errorRestoreCount,
status: status ?? this.status,
);
}
List<Object?> get props => [ List<Object?> get props => [
id, id,
deletedBefore, deletedBefore,
@@ -1,9 +1,7 @@
import 'package:email_recovery/email_recovery/converter/email_recovery_action_id_converter.dart';
import 'package:equatable/equatable.dart'; import 'package:equatable/equatable.dart';
import 'package:jmap_dart_client/http/converter/id_converter.dart'; import 'package:jmap_dart_client/http/converter/id_converter.dart';
import 'package:jmap_dart_client/jmap/core/id.dart'; import 'package:jmap_dart_client/jmap/core/id.dart';
@EmailRecoveryActionIdConverter()
@IdConverter() @IdConverter()
class EmailRecoveryActionId with EquatableMixin { class EmailRecoveryActionId with EquatableMixin {
final Id id; final Id id;
@@ -0,0 +1,7 @@
enum EmailRecoveryStatus {
waiting,
inProgress,
completed,
failed,
canceled,
}
@@ -4,7 +4,6 @@ import 'package:jmap_dart_client/jmap/core/method/response/get_response.dart';
import 'package:jmap_dart_client/http/converter/id_converter.dart'; import 'package:jmap_dart_client/http/converter/id_converter.dart';
import 'package:json_annotation/json_annotation.dart'; import 'package:json_annotation/json_annotation.dart';
part 'get_email_recovery_action_response.g.dart'; part 'get_email_recovery_action_response.g.dart';
@IdConverter() @IdConverter()
@@ -6,7 +6,7 @@ import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart
import 'package:jmap_dart_client/jmap/core/method/request/set_method.dart'; import 'package:jmap_dart_client/jmap/core/method/request/set_method.dart';
import 'package:jmap_dart_client/jmap/core/request/request_invocation.dart'; import 'package:jmap_dart_client/jmap/core/request/request_invocation.dart';
class SetEmailRecoveryActionMethod extends SetMethodNoNeedAccountId<EmailRecoveryAction> with OptionalCreate<EmailRecoveryAction> { class SetEmailRecoveryActionMethod extends SetMethodNoNeedAccountId<EmailRecoveryAction> {
SetEmailRecoveryActionMethod() : super(); SetEmailRecoveryActionMethod() : super();
@override @override
@@ -1,16 +0,0 @@
import 'package:equatable/equatable.dart';
class Status with EquatableMixin {
static final waiting = Status('waiting');
static final inProgress = Status('inProgress');
static final completed = Status('completed');
static final failed = Status('failed');
static final canceled = Status('canceled');
final String value;
Status(this.value);
@override
List<Object?> get props => [value];
}
@@ -1,9 +1,9 @@
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:email_recovery/email_recovery/email_recovery_action.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/email_recovery_action_id.dart';
import 'package:email_recovery/email_recovery/email_recovery_status.dart.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_method.dart';
import 'package:email_recovery/email_recovery/get/get_email_recovery_action_response.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:flutter_test/flutter_test.dart';
import 'package:jmap_dart_client/jmap/core/id.dart'; import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:http_mock_adapter/src/adapters/dio_adapter.dart'; import 'package:http_mock_adapter/src/adapters/dio_adapter.dart';
@@ -14,7 +14,7 @@ void main() {
group('test to json email recovery action get method', () { group('test to json email recovery action get method', () {
final expectEmailRecoveryAction = EmailRecoveryAction( final expectEmailRecoveryAction = EmailRecoveryAction(
id: EmailRecoveryActionId(Id('2034-495-05857-57abcd-0876664')), id: EmailRecoveryActionId(Id('2034-495-05857-57abcd-0876664')),
status: Status.inProgress status: EmailRecoveryStatus.inProgress,
); );
test('email recovery action get method and response parsing', () async { test('email recovery action get method and response parsing', () async {
@@ -1,12 +1,15 @@
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:email_recovery/email_recovery/email_recovery_action.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/email_recovery_action_id.dart';
import 'package:email_recovery/email_recovery/email_recovery_status.dart.dart';
import 'package:email_recovery/email_recovery/set/set_email_recovery_action_method.dart'; import 'package:email_recovery/email_recovery/set/set_email_recovery_action_method.dart';
import 'package:email_recovery/email_recovery/set/set_email_recovery_action_response.dart'; import 'package:email_recovery/email_recovery/set/set_email_recovery_action_response.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:http_mock_adapter/http_mock_adapter.dart'; import 'package:http_mock_adapter/http_mock_adapter.dart';
import 'package:jmap_dart_client/http/http_client.dart'; import 'package:jmap_dart_client/http/http_client.dart';
import 'package:jmap_dart_client/jmap/core/error/set_error.dart';
import 'package:jmap_dart_client/jmap/core/id.dart'; import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/core/patch_object.dart';
import 'package:jmap_dart_client/jmap/core/utc_date.dart'; import 'package:jmap_dart_client/jmap/core/utc_date.dart';
import 'package:jmap_dart_client/jmap/jmap_request.dart'; import 'package:jmap_dart_client/jmap/jmap_request.dart';
@@ -106,4 +109,94 @@ void main() {
); );
}); });
}); });
group('test to json email recovery action set method not updated error', () {
final updateRequestTaskId = Id('2034-495-05857-57abcd-0876664');
final notUpdatedError = SetError(
SetError.notFound,
description: 'Task not found'
);
final expectNotUpdatedError = {updateRequestTaskId: notUpdatedError};
test('email recovery action set 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/set",
{
"notUpdated": {
"2034-495-05857-57abcd-0876664": {
"type": "notFound",
"description": "Task not found"
}
}
},
"c0"
]
]
}),
data: {
"using": [
"urn:ietf:params:jmap:core",
"com:linagora:params:jmap:messages:vault"
],
"methodCalls": [
[
"EmailRecoveryAction/set",
{
"update": {
"2034-495-05857-57abcd-0876664": {
"status": "canceled"
}
}
},
"c0"
]
]
},
headers: {
"accept": "application/json;jmapVersion=rfc-8621",
"content-length": 256
}
);
final pathObjectEmailRecoveryAction = PatchObject(
EmailRecoveryAction(
status: EmailRecoveryStatus.canceled
).toJson()
);
final emailRecoveryActionSetMethod = SetEmailRecoveryActionMethod()
..addUpdates({updateRequestTaskId: pathObjectEmailRecoveryAction});
final httpClient = HttpClient(dio);
final requestBuilder = JmapRequestBuilder(httpClient, ProcessingInvocation());
final emailRecoveryActionSetInvocation = requestBuilder.invocation(emailRecoveryActionSetMethod);
final response = await (requestBuilder
..usings(emailRecoveryActionSetMethod.requiredCapabilities))
.build()
.execute();
final emailRecoveryActionSetResponse = response.parse<SetEmailRecoveryActionResponse>(
emailRecoveryActionSetInvocation.methodCallId,
SetEmailRecoveryActionResponse.deserialize
);
expect(
emailRecoveryActionSetResponse!.notUpdated![updateRequestTaskId]!.type,
equals(expectNotUpdatedError[updateRequestTaskId]!.type)
);
expect(
emailRecoveryActionSetResponse.notUpdated![updateRequestTaskId]!.description,
equals(expectNotUpdatedError[updateRequestTaskId]!.description)
);
});
});
} }
+3
View File
@@ -26,6 +26,9 @@ flutter pub get && dart run build_runner build --delete-conflicting-outputs
cd ../fcm cd ../fcm
flutter pub get && dart run build_runner build --delete-conflicting-outputs flutter pub get && dart run build_runner build --delete-conflicting-outputs
cd ../email_recovery
flutter pub get && dart run build_runner build --delete-conflicting-outputs
cd .. cd ..
flutter pub get \ flutter pub get \
&& dart run build_runner build --delete-conflicting-outputs \ && dart run build_runner build --delete-conflicting-outputs \
+7
View File
@@ -393,6 +393,13 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.0" version: "2.0.0"
email_recovery:
dependency: "direct main"
description:
path: email_recovery
relative: true
source: path
version: "1.0.0+1"
enough_html_editor: enough_html_editor:
dependency: transitive dependency: transitive
description: description:
+3
View File
@@ -45,6 +45,9 @@ dependencies:
fcm: fcm:
path: fcm path: fcm
email_recovery:
path: email_recovery
### Dependencies from git ### ### Dependencies from git ###
rich_text_composer: rich_text_composer:
git: git: