change model and write unit test
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:rule_filter/rule_filter_id.dart';
|
||||
|
||||
class RuleFilterIdConverter implements JsonConverter<RuleFilterId, String> {
|
||||
const RuleFilterIdConverter();
|
||||
|
||||
@override
|
||||
RuleFilterId fromJson(String json) => RuleFilterId(id: Id(json));
|
||||
|
||||
@override
|
||||
String toJson(RuleFilterId object) => object.id.value;
|
||||
}
|
||||
@@ -6,8 +6,8 @@ class RuleIdConverter implements JsonConverter<RuleId, String> {
|
||||
const RuleIdConverter();
|
||||
|
||||
@override
|
||||
RuleId fromJson(String json) => RuleId(Id(json));
|
||||
RuleId fromJson(String json) => RuleId(id: Id(json));
|
||||
|
||||
@override
|
||||
String toJson(RuleId object) => object.id.value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:rule_filter/rule_id.dart';
|
||||
|
||||
class RuleIdNullableConverter implements JsonConverter<RuleId?, String?> {
|
||||
const RuleIdNullableConverter();
|
||||
|
||||
@override
|
||||
RuleId? fromJson(String? json) => json != null ? RuleId(id: Id(json)) : null;
|
||||
|
||||
@override
|
||||
String? toJson(RuleId? object) => object?.id.value;
|
||||
}
|
||||
@@ -8,10 +8,13 @@ import 'package:jmap_dart_client/jmap/core/request/request_invocation.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/request/result_reference.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:rule_filter/capability_rule_filter.dart';
|
||||
import 'package:rule_filter/converter/rule_id_converter.dart';
|
||||
import 'package:rule_filter/rule_id.dart';
|
||||
|
||||
part 'get_rule_filter_method.g.dart';
|
||||
|
||||
@IdConverter()
|
||||
@RuleIdConverter()
|
||||
@AccountIdConverter()
|
||||
@PropertiesConverter()
|
||||
@JsonSerializable(explicitToJson: true)
|
||||
|
||||
@@ -6,6 +6,7 @@ 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/jmap/core/state.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:rule_filter/rule_filter.dart';
|
||||
import 'package:rule_filter/tmail_rule.dart';
|
||||
|
||||
part 'get_rule_filter_response.g.dart';
|
||||
@@ -14,8 +15,8 @@ part 'get_rule_filter_response.g.dart';
|
||||
@AccountIdConverter()
|
||||
@IdConverter()
|
||||
@JsonSerializable()
|
||||
class GetRuleFilterResponse extends GetResponse<TMailRule> {
|
||||
GetRuleFilterResponse(AccountId accountId, State state, List<TMailRule> list, List<Id>? notFound) : super(accountId, state, list, notFound);
|
||||
class GetRuleFilterResponse extends GetResponse<RuleFilter> {
|
||||
GetRuleFilterResponse(AccountId accountId, State state, List<RuleFilter> list, List<Id>? notFound) : super(accountId, state, list, notFound);
|
||||
|
||||
factory GetRuleFilterResponse.fromJson(Map<String, dynamic> json) => _$GetRuleFilterResponseFromJson(json);
|
||||
|
||||
|
||||
@@ -4,11 +4,13 @@ import 'package:rule_filter/rule_append_in.dart';
|
||||
|
||||
part 'rule_action.g.dart';
|
||||
|
||||
@JsonSerializable()
|
||||
@JsonSerializable(explicitToJson: true)
|
||||
class RuleAction with EquatableMixin {
|
||||
final RuleAppendIn appendIn;
|
||||
|
||||
RuleAction(this.appendIn);
|
||||
RuleAction({
|
||||
required this.appendIn,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
|
||||
@@ -10,7 +10,9 @@ part 'rule_append_in.g.dart';
|
||||
class RuleAppendIn with EquatableMixin {
|
||||
final List<MailboxId> mailboxIds;
|
||||
|
||||
RuleAppendIn(this.mailboxIds);
|
||||
RuleAppendIn({
|
||||
required this.mailboxIds,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
@@ -21,5 +23,4 @@ class RuleAppendIn with EquatableMixin {
|
||||
_$RuleAppendInFromJson(json);
|
||||
|
||||
Map<String, dynamic> toJson() => _$RuleAppendInToJson(this);
|
||||
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'rule_condition.g.dart';
|
||||
|
||||
@JsonEnum()
|
||||
enum Field {
|
||||
@JsonValue('from')
|
||||
from,
|
||||
@@ -17,7 +16,6 @@ enum Field {
|
||||
subject,
|
||||
}
|
||||
|
||||
@JsonEnum()
|
||||
enum Comparator {
|
||||
@JsonValue('contains')
|
||||
contains,
|
||||
@@ -37,11 +35,11 @@ class RuleCondition extends FilterCondition {
|
||||
|
||||
final String value;
|
||||
|
||||
RuleCondition(
|
||||
this.field,
|
||||
this.comparator,
|
||||
this.value,
|
||||
);
|
||||
RuleCondition({
|
||||
required this.field,
|
||||
required this.comparator,
|
||||
required this.value,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
@@ -55,5 +53,4 @@ class RuleCondition extends FilterCondition {
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() => _$RuleConditionToJson(this);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,17 +1,21 @@
|
||||
import 'package:jmap_dart_client/jmap/core/filter/filter.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:rule_filter/converter/rule_id_converter.dart';
|
||||
import 'package:rule_filter/rule_id.dart';
|
||||
import 'package:rule_filter/converter/rule_filter_id_coverter.dart';
|
||||
import 'package:rule_filter/rule_filter_id.dart';
|
||||
import 'package:rule_filter/tmail_rule.dart';
|
||||
|
||||
part 'rule_filter.g.dart';
|
||||
|
||||
@RuleIdConverter()
|
||||
@RuleFilterIdConverter()
|
||||
@JsonSerializable()
|
||||
class RuleFilter extends Filter {
|
||||
final RuleFilterId id;
|
||||
final List<TMailRule> rules;
|
||||
|
||||
final RuleId id;
|
||||
|
||||
RuleFilter(this.id);
|
||||
RuleFilter({
|
||||
required this.id,
|
||||
required this.rules,
|
||||
});
|
||||
|
||||
factory RuleFilter.fromJson(Map<String, dynamic> json) =>
|
||||
_$RuleFilterFromJson(json);
|
||||
@@ -20,5 +24,8 @@ class RuleFilter extends Filter {
|
||||
Map<String, dynamic> toJson() => _$RuleFilterToJson(this);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [id];
|
||||
}
|
||||
List<Object?> get props => [
|
||||
id,
|
||||
rules,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:jmap_dart_client/http/converter/id_converter.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:rule_filter/converter/rule_filter_id_coverter.dart';
|
||||
|
||||
enum RuleFilterIdType {
|
||||
singleton('singleton');
|
||||
|
||||
const RuleFilterIdType(this.value);
|
||||
|
||||
final String value;
|
||||
}
|
||||
|
||||
@RuleFilterIdConverter()
|
||||
@IdConverter()
|
||||
@JsonSerializable()
|
||||
class RuleFilterId with EquatableMixin {
|
||||
final Id id;
|
||||
|
||||
RuleFilterId({
|
||||
required this.id,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [id];
|
||||
}
|
||||
|
||||
extension RuleFilterIdSingleton on RuleFilterId {
|
||||
static RuleFilterId get ruleFilterIdSingleton => RuleFilterId(id: Id(RuleFilterIdType.singleton.value));
|
||||
}
|
||||
@@ -3,23 +3,15 @@ import 'package:jmap_dart_client/http/converter/id_converter.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
enum RuleIdType {
|
||||
singleton('singleton');
|
||||
const RuleIdType(this.value);
|
||||
final String value;
|
||||
}
|
||||
|
||||
@JsonSerializable()
|
||||
@IdConverter()
|
||||
class RuleId with EquatableMixin {
|
||||
final Id id;
|
||||
|
||||
RuleId(this.id);
|
||||
RuleId({
|
||||
required this.id,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [id];
|
||||
}
|
||||
|
||||
extension RuleIdSingleton on RuleId {
|
||||
static get ruleIdSingleton => RuleId(Id(RuleIdType.singleton.value));
|
||||
}
|
||||
@@ -2,12 +2,14 @@ import 'package:jmap_dart_client/http/converter/account_id_converter.dart';
|
||||
import 'package:jmap_dart_client/http/converter/set/set_method_properties_converter.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/id.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:json_annotation/json_annotation.dart';
|
||||
import 'package:rule_filter/capability_rule_filter.dart';
|
||||
import 'package:rule_filter/tmail_rule.dart';
|
||||
|
||||
class SetRuleFilterMethod extends SetMethod<TMailRule> {
|
||||
class SetRuleFilterMethod extends SetMethod<List<TMailRule>> with OptionalUpdateRuleFilter<List<TMailRule>>{
|
||||
SetRuleFilterMethod(AccountId accountId) : super(accountId);
|
||||
|
||||
@override
|
||||
@@ -15,8 +17,8 @@ class SetRuleFilterMethod extends SetMethod<TMailRule> {
|
||||
|
||||
@override
|
||||
Set<CapabilityIdentifier> get requiredCapabilities => {
|
||||
capabilityRuleFilter,
|
||||
};
|
||||
capabilityRuleFilter,
|
||||
};
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() {
|
||||
@@ -31,12 +33,31 @@ class SetRuleFilterMethod extends SetMethod<TMailRule> {
|
||||
}
|
||||
|
||||
writeNotNull('ifInState', ifInState?.value);
|
||||
writeNotNull('update', update
|
||||
?.map((id, update) => SetMethodPropertiesConverter().fromMapIdToJson(id, update.toJson())));
|
||||
writeNotNull(
|
||||
'update',
|
||||
updateRuleFilter?.map((id, update) {
|
||||
final listJsonUpdatesRuleFilter = update.map((e) => e.toJson()).toList();
|
||||
return SetMethodPropertiesConverter()
|
||||
.fromMapIdToJson(id, listJsonUpdatesRuleFilter);
|
||||
}));
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
@override
|
||||
List<Object?> get props => [accountId, ifInState, update,];
|
||||
}
|
||||
List<Object?> get props => [
|
||||
accountId,
|
||||
ifInState,
|
||||
update,
|
||||
];
|
||||
}
|
||||
|
||||
mixin OptionalUpdateRuleFilter<T> {
|
||||
@JsonKey(includeIfNull: false)
|
||||
Map<Id, T>? updateRuleFilter;
|
||||
|
||||
void addUpdateRuleFilter(Map<Id, T> updatesRuleFilter) {
|
||||
updateRuleFilter ??= <Id, T>{};
|
||||
updateRuleFilter?.addAll(updatesRuleFilter);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
import 'package:jmap_dart_client/http/converter/id_converter.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:rule_filter/converter/rule_id_converter.dart';
|
||||
import 'package:rule_filter/converter/rule_id_nullable_converter.dart';
|
||||
import 'package:rule_filter/rule.dart';
|
||||
import 'package:rule_filter/rule_action.dart';
|
||||
import 'package:rule_filter/rule_condition.dart';
|
||||
@@ -7,21 +9,21 @@ import 'package:rule_filter/rule_id.dart';
|
||||
|
||||
part 'tmail_rule.g.dart';
|
||||
|
||||
@JsonSerializable()
|
||||
@RuleIdConverter()
|
||||
@RuleIdNullableConverter()
|
||||
@IdConverter()
|
||||
@JsonSerializable(explicitToJson: true)
|
||||
class TMailRule extends Rule {
|
||||
|
||||
final RuleId id;
|
||||
final RuleId? id;
|
||||
final String name;
|
||||
final RuleCondition condition;
|
||||
final RuleAction action;
|
||||
|
||||
TMailRule(
|
||||
this.id,
|
||||
this.name,
|
||||
this.condition,
|
||||
this.action,
|
||||
);
|
||||
TMailRule({
|
||||
this.id,
|
||||
required this.name,
|
||||
required this.condition,
|
||||
required this.action,
|
||||
});
|
||||
|
||||
factory TMailRule.fromJson(Map<String, dynamic> json) =>
|
||||
_$TMailRuleFromJson(json);
|
||||
@@ -30,9 +32,9 @@ class TMailRule extends Rule {
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
id,
|
||||
name,
|
||||
condition,
|
||||
action,
|
||||
];
|
||||
}
|
||||
id,
|
||||
name,
|
||||
condition,
|
||||
action,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
name: rule_filter
|
||||
description: rule_filter for tmail
|
||||
version: 0.0.1
|
||||
publish_to: none
|
||||
description: TMail rule_filter extension
|
||||
publish_to: 'none'
|
||||
|
||||
version: 1.0.0+1
|
||||
|
||||
environment:
|
||||
sdk: ">=2.17.6 <3.0.0"
|
||||
flutter: ">=1.17.0"
|
||||
sdk: ">=2.17.0 <3.0.0"
|
||||
|
||||
dependencies:
|
||||
flutter:
|
||||
@@ -35,13 +35,13 @@ dev_dependencies:
|
||||
json_serializable: 6.2.0
|
||||
|
||||
mockito: 5.2.0
|
||||
|
||||
# For information on the generic Dart part of this file, see the
|
||||
# following page: https://dart.dev/tools/pub/pubspec
|
||||
|
||||
# The following section is specific to Flutter packages.
|
||||
# The following section is specific to Flutter.
|
||||
flutter:
|
||||
|
||||
uses-material-design: true
|
||||
# To add assets to your package, add an assets section, like this:
|
||||
# assets:
|
||||
# - images/a_dot_burr.jpeg
|
||||
@@ -51,7 +51,7 @@ flutter:
|
||||
# https://flutter.dev/assets-and-images/#from-packages
|
||||
#
|
||||
# An image asset can refer to one or more resolution-specific "variants", see
|
||||
# https://flutter.dev/assets-and-images/#resolution-aware
|
||||
# https://flutter.dev/assets-and-images/#resolution-aware.
|
||||
|
||||
# To add custom fonts to your package, add a fonts section here,
|
||||
# in this "flutter" section. Each entry in this list should have a
|
||||
|
||||
@@ -0,0 +1,126 @@
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:http_mock_adapter/http_mock_adapter.dart';
|
||||
import 'package:jmap_dart_client/http/http_client.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/jmap_request.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:rule_filter/get/get_rule_filter_method.dart';
|
||||
import 'package:rule_filter/get/get_rule_filter_response.dart';
|
||||
import 'package:rule_filter/rule_action.dart';
|
||||
import 'package:rule_filter/rule_append_in.dart';
|
||||
import 'package:rule_filter/rule_condition.dart';
|
||||
import 'package:rule_filter/rule_filter.dart';
|
||||
import 'package:rule_filter/rule_filter_id.dart';
|
||||
import 'package:rule_filter/tmail_rule.dart';
|
||||
|
||||
void main() {
|
||||
group('test to json get rule filter method', () {
|
||||
final expectRuleFilter1 = RuleFilter(
|
||||
id: RuleFilterIdSingleton.ruleFilterIdSingleton,
|
||||
rules: [
|
||||
TMailRule(
|
||||
name: 'My first rule',
|
||||
condition: RuleCondition(
|
||||
value: 'question',
|
||||
comparator: Comparator.contains,
|
||||
field: Field.subject,
|
||||
),
|
||||
action: RuleAction(
|
||||
appendIn: RuleAppendIn(
|
||||
mailboxIds: [
|
||||
MailboxId(Id('42')),
|
||||
],
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
|
||||
test('get rule_filter method and response parsing', () async {
|
||||
final baseOption = BaseOptions(method: 'POST');
|
||||
final dio = Dio(baseOption)..options.baseUrl = 'http://domain.com';
|
||||
final dioAdapter = DioAdapter(dio: dio);
|
||||
dioAdapter.onPost(
|
||||
'/jmap',
|
||||
(server) => server.reply(200, {
|
||||
"sessionState": "2c9f1b12-b35a-43e6-9af2-0106fb53a943",
|
||||
"methodResponses": [
|
||||
[
|
||||
"Filter/get",
|
||||
{
|
||||
"accountId":
|
||||
"29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
|
||||
"state": "0",
|
||||
"list": [
|
||||
{
|
||||
"id": "singleton",
|
||||
"rules": [
|
||||
{
|
||||
"name": "My first rule",
|
||||
"condition": {
|
||||
"field": "subject",
|
||||
"comparator": "contains",
|
||||
"value": "question"
|
||||
},
|
||||
"action": {
|
||||
"appendIn": {
|
||||
"mailboxIds": ["42"]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"notFound": []
|
||||
},
|
||||
"c0"
|
||||
]
|
||||
]
|
||||
}),
|
||||
data: {
|
||||
"using": ["com:linagora:params:jmap:filter"],
|
||||
"methodCalls": [
|
||||
[
|
||||
"Filter/get",
|
||||
{
|
||||
"accountId":
|
||||
"29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
|
||||
"ids": ["singleton"]
|
||||
},
|
||||
"c0"
|
||||
]
|
||||
]
|
||||
},
|
||||
headers: {
|
||||
"accept": "application/json;jmapVersion=rfc-8621",
|
||||
"content-type": "application/json; charset=utf-8",
|
||||
"content-length": 182
|
||||
});
|
||||
|
||||
final httpClient = HttpClient(dio);
|
||||
final processingInvocation = ProcessingInvocation();
|
||||
final requestBuilder =
|
||||
JmapRequestBuilder(httpClient, processingInvocation);
|
||||
final accountId = AccountId(Id(
|
||||
'29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6'));
|
||||
|
||||
final getRuleFilterMethod = GetRuleFilterMethod(accountId)
|
||||
..addIds({RuleFilterIdSingleton.ruleFilterIdSingleton.id});
|
||||
final getRuleFilterInvocation =
|
||||
requestBuilder.invocation(getRuleFilterMethod);
|
||||
final response = await (requestBuilder
|
||||
..usings(getRuleFilterMethod.requiredCapabilities))
|
||||
.build()
|
||||
.execute();
|
||||
|
||||
final resultList = response.parse<GetRuleFilterResponse>(
|
||||
getRuleFilterInvocation.methodCallId,
|
||||
GetRuleFilterResponse.deserialize);
|
||||
|
||||
expect(resultList?.list.length, equals(1));
|
||||
expect(resultList?.list, containsAll({expectRuleFilter1}));
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,154 @@
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:http_mock_adapter/http_mock_adapter.dart';
|
||||
import 'package:jmap_dart_client/http/http_client.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/identities/identity.dart';
|
||||
import 'package:jmap_dart_client/jmap/identities/set/set_identity_method.dart';
|
||||
import 'package:jmap_dart_client/jmap/identities/set/set_identity_response.dart';
|
||||
import 'package:jmap_dart_client/jmap/jmap_request.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:rule_filter/rule_action.dart';
|
||||
import 'package:rule_filter/rule_append_in.dart';
|
||||
import 'package:rule_filter/rule_condition.dart';
|
||||
import 'package:rule_filter/rule_filter.dart';
|
||||
import 'package:rule_filter/rule_id.dart';
|
||||
import 'package:rule_filter/set/set_rule_filter_method.dart';
|
||||
import 'package:rule_filter/set/set_rule_filter_response.dart';
|
||||
import 'package:rule_filter/tmail_rule.dart';
|
||||
|
||||
void main() {
|
||||
group('test to json set identity method', () {
|
||||
final expectedUpdated = TMailRule(
|
||||
id: RuleId(id: Id('1')),
|
||||
name: 'My first rule',
|
||||
condition: RuleCondition(
|
||||
value: 'question',
|
||||
comparator: Comparator.contains,
|
||||
field: Field.subject,
|
||||
),
|
||||
action: RuleAction(
|
||||
appendIn: RuleAppendIn(
|
||||
mailboxIds: [
|
||||
MailboxId(Id('42')),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
test('set rule_filter method and response parsing', () async {
|
||||
final baseOption = BaseOptions(method: 'POST');
|
||||
final dio = Dio(baseOption)..options.baseUrl = 'http://domain.com';
|
||||
final dioAdapter = DioAdapter(dio: dio);
|
||||
dioAdapter.onPost(
|
||||
'/jmap',
|
||||
(server) => server.reply(200, {
|
||||
"sessionState": "2c9f1b12-b35a-43e6-9af2-0106fb53a943",
|
||||
"methodResponses": [
|
||||
[
|
||||
"Filter/set",
|
||||
{
|
||||
"accountId":
|
||||
"29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
|
||||
"oldState": "-1",
|
||||
"newState": "0",
|
||||
"updated": {
|
||||
"singleton": {
|
||||
"id": "1",
|
||||
"name": "My first rule",
|
||||
"condition": {
|
||||
"field": "subject",
|
||||
"comparator": "contains",
|
||||
"value": "question"
|
||||
},
|
||||
"action": {
|
||||
"appendIn": {
|
||||
"mailboxIds": ["42"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"c0"
|
||||
],
|
||||
]
|
||||
}),
|
||||
data: {
|
||||
"using": ["com:linagora:params:jmap:filter"],
|
||||
"methodCalls": [
|
||||
[
|
||||
"Filter/set",
|
||||
{
|
||||
"accountId":
|
||||
"29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
|
||||
"update": {
|
||||
"singleton": [
|
||||
{
|
||||
"id": "1",
|
||||
"name": "My first rule",
|
||||
"condition": {
|
||||
"field": "subject",
|
||||
"comparator": "contains",
|
||||
"value": "question"
|
||||
},
|
||||
"action": {
|
||||
"appendIn": {
|
||||
"mailboxIds": ["42"]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"c0"
|
||||
],
|
||||
]
|
||||
},
|
||||
headers: {
|
||||
"accept": "application/json;jmapVersion=rfc-8621",
|
||||
"content-type": "application/json; charset=utf-8",
|
||||
"content-length": 340
|
||||
});
|
||||
|
||||
final setRuleFilterMethod = SetRuleFilterMethod(AccountId(Id(
|
||||
'29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6')))
|
||||
..addUpdateRuleFilter({
|
||||
Id('singleton'): [
|
||||
TMailRule(
|
||||
id: RuleId(id: Id('1')),
|
||||
name: 'My first rule',
|
||||
condition: RuleCondition(
|
||||
value: 'question',
|
||||
comparator: Comparator.contains,
|
||||
field: Field.subject,
|
||||
),
|
||||
action: RuleAction(
|
||||
appendIn: RuleAppendIn(
|
||||
mailboxIds: [
|
||||
MailboxId(Id('42')),
|
||||
],
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
});
|
||||
|
||||
final httpClient = HttpClient(dio);
|
||||
final requestBuilder =
|
||||
JmapRequestBuilder(httpClient, ProcessingInvocation());
|
||||
final setRuleFilterInvocation =
|
||||
requestBuilder.invocation(setRuleFilterMethod);
|
||||
final response = await (requestBuilder
|
||||
..usings(setRuleFilterMethod.requiredCapabilities))
|
||||
.build()
|
||||
.execute();
|
||||
|
||||
final setRuleFilterResponse = response.parse<SetRuleFilterResponse>(
|
||||
setRuleFilterInvocation.methodCallId,
|
||||
SetRuleFilterResponse.deserialize);
|
||||
expect(setRuleFilterResponse!.updated?.values,
|
||||
contains(expectedUpdated));
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
import 'package:rule_filter/rule_filter.dart';
|
||||
|
||||
void main() {
|
||||
test('adds one to input values', () {
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user