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();
|
const RuleIdConverter();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
RuleId fromJson(String json) => RuleId(Id(json));
|
RuleId fromJson(String json) => RuleId(id: Id(json));
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toJson(RuleId object) => object.id.value;
|
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:jmap_dart_client/jmap/core/request/result_reference.dart';
|
||||||
import 'package:json_annotation/json_annotation.dart';
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
import 'package:rule_filter/capability_rule_filter.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';
|
part 'get_rule_filter_method.g.dart';
|
||||||
|
|
||||||
@IdConverter()
|
@IdConverter()
|
||||||
|
@RuleIdConverter()
|
||||||
@AccountIdConverter()
|
@AccountIdConverter()
|
||||||
@PropertiesConverter()
|
@PropertiesConverter()
|
||||||
@JsonSerializable(explicitToJson: true)
|
@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/method/response/get_response.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/state.dart';
|
import 'package:jmap_dart_client/jmap/core/state.dart';
|
||||||
import 'package:json_annotation/json_annotation.dart';
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
import 'package:rule_filter/rule_filter.dart';
|
||||||
import 'package:rule_filter/tmail_rule.dart';
|
import 'package:rule_filter/tmail_rule.dart';
|
||||||
|
|
||||||
part 'get_rule_filter_response.g.dart';
|
part 'get_rule_filter_response.g.dart';
|
||||||
@@ -14,8 +15,8 @@ part 'get_rule_filter_response.g.dart';
|
|||||||
@AccountIdConverter()
|
@AccountIdConverter()
|
||||||
@IdConverter()
|
@IdConverter()
|
||||||
@JsonSerializable()
|
@JsonSerializable()
|
||||||
class GetRuleFilterResponse extends GetResponse<TMailRule> {
|
class GetRuleFilterResponse extends GetResponse<RuleFilter> {
|
||||||
GetRuleFilterResponse(AccountId accountId, State state, List<TMailRule> list, List<Id>? notFound) : super(accountId, state, list, notFound);
|
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);
|
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';
|
part 'rule_action.g.dart';
|
||||||
|
|
||||||
@JsonSerializable()
|
@JsonSerializable(explicitToJson: true)
|
||||||
class RuleAction with EquatableMixin {
|
class RuleAction with EquatableMixin {
|
||||||
final RuleAppendIn appendIn;
|
final RuleAppendIn appendIn;
|
||||||
|
|
||||||
RuleAction(this.appendIn);
|
RuleAction({
|
||||||
|
required this.appendIn,
|
||||||
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [
|
List<Object?> get props => [
|
||||||
|
|||||||
@@ -10,7 +10,9 @@ part 'rule_append_in.g.dart';
|
|||||||
class RuleAppendIn with EquatableMixin {
|
class RuleAppendIn with EquatableMixin {
|
||||||
final List<MailboxId> mailboxIds;
|
final List<MailboxId> mailboxIds;
|
||||||
|
|
||||||
RuleAppendIn(this.mailboxIds);
|
RuleAppendIn({
|
||||||
|
required this.mailboxIds,
|
||||||
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [
|
List<Object?> get props => [
|
||||||
@@ -21,5 +23,4 @@ class RuleAppendIn with EquatableMixin {
|
|||||||
_$RuleAppendInFromJson(json);
|
_$RuleAppendInFromJson(json);
|
||||||
|
|
||||||
Map<String, dynamic> toJson() => _$RuleAppendInToJson(this);
|
Map<String, dynamic> toJson() => _$RuleAppendInToJson(this);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import 'package:json_annotation/json_annotation.dart';
|
|||||||
|
|
||||||
part 'rule_condition.g.dart';
|
part 'rule_condition.g.dart';
|
||||||
|
|
||||||
@JsonEnum()
|
|
||||||
enum Field {
|
enum Field {
|
||||||
@JsonValue('from')
|
@JsonValue('from')
|
||||||
from,
|
from,
|
||||||
@@ -17,7 +16,6 @@ enum Field {
|
|||||||
subject,
|
subject,
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsonEnum()
|
|
||||||
enum Comparator {
|
enum Comparator {
|
||||||
@JsonValue('contains')
|
@JsonValue('contains')
|
||||||
contains,
|
contains,
|
||||||
@@ -37,11 +35,11 @@ class RuleCondition extends FilterCondition {
|
|||||||
|
|
||||||
final String value;
|
final String value;
|
||||||
|
|
||||||
RuleCondition(
|
RuleCondition({
|
||||||
this.field,
|
required this.field,
|
||||||
this.comparator,
|
required this.comparator,
|
||||||
this.value,
|
required this.value,
|
||||||
);
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [
|
List<Object?> get props => [
|
||||||
@@ -55,5 +53,4 @@ class RuleCondition extends FilterCondition {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Map<String, dynamic> toJson() => _$RuleConditionToJson(this);
|
Map<String, dynamic> toJson() => _$RuleConditionToJson(this);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,21 @@
|
|||||||
import 'package:jmap_dart_client/jmap/core/filter/filter.dart';
|
import 'package:jmap_dart_client/jmap/core/filter/filter.dart';
|
||||||
import 'package:json_annotation/json_annotation.dart';
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
import 'package:rule_filter/converter/rule_id_converter.dart';
|
import 'package:rule_filter/converter/rule_filter_id_coverter.dart';
|
||||||
import 'package:rule_filter/rule_id.dart';
|
import 'package:rule_filter/rule_filter_id.dart';
|
||||||
|
import 'package:rule_filter/tmail_rule.dart';
|
||||||
|
|
||||||
part 'rule_filter.g.dart';
|
part 'rule_filter.g.dart';
|
||||||
|
|
||||||
@RuleIdConverter()
|
@RuleFilterIdConverter()
|
||||||
@JsonSerializable()
|
@JsonSerializable()
|
||||||
class RuleFilter extends Filter {
|
class RuleFilter extends Filter {
|
||||||
|
final RuleFilterId id;
|
||||||
|
final List<TMailRule> rules;
|
||||||
|
|
||||||
final RuleId id;
|
RuleFilter({
|
||||||
|
required this.id,
|
||||||
RuleFilter(this.id);
|
required this.rules,
|
||||||
|
});
|
||||||
|
|
||||||
factory RuleFilter.fromJson(Map<String, dynamic> json) =>
|
factory RuleFilter.fromJson(Map<String, dynamic> json) =>
|
||||||
_$RuleFilterFromJson(json);
|
_$RuleFilterFromJson(json);
|
||||||
@@ -20,5 +24,8 @@ class RuleFilter extends Filter {
|
|||||||
Map<String, dynamic> toJson() => _$RuleFilterToJson(this);
|
Map<String, dynamic> toJson() => _$RuleFilterToJson(this);
|
||||||
|
|
||||||
@override
|
@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:jmap_dart_client/jmap/core/id.dart';
|
||||||
import 'package:json_annotation/json_annotation.dart';
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
enum RuleIdType {
|
|
||||||
singleton('singleton');
|
|
||||||
const RuleIdType(this.value);
|
|
||||||
final String value;
|
|
||||||
}
|
|
||||||
|
|
||||||
@JsonSerializable()
|
@JsonSerializable()
|
||||||
@IdConverter()
|
@IdConverter()
|
||||||
class RuleId with EquatableMixin {
|
class RuleId with EquatableMixin {
|
||||||
final Id id;
|
final Id id;
|
||||||
|
|
||||||
RuleId(this.id);
|
RuleId({
|
||||||
|
required this.id,
|
||||||
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [id];
|
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/http/converter/set/set_method_properties_converter.dart';
|
||||||
import 'package:jmap_dart_client/jmap/account_id.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/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/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';
|
||||||
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
import 'package:rule_filter/capability_rule_filter.dart';
|
import 'package:rule_filter/capability_rule_filter.dart';
|
||||||
import 'package:rule_filter/tmail_rule.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);
|
SetRuleFilterMethod(AccountId accountId) : super(accountId);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -15,8 +17,8 @@ class SetRuleFilterMethod extends SetMethod<TMailRule> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Set<CapabilityIdentifier> get requiredCapabilities => {
|
Set<CapabilityIdentifier> get requiredCapabilities => {
|
||||||
capabilityRuleFilter,
|
capabilityRuleFilter,
|
||||||
};
|
};
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Map<String, dynamic> toJson() {
|
Map<String, dynamic> toJson() {
|
||||||
@@ -31,12 +33,31 @@ class SetRuleFilterMethod extends SetMethod<TMailRule> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
writeNotNull('ifInState', ifInState?.value);
|
writeNotNull('ifInState', ifInState?.value);
|
||||||
writeNotNull('update', update
|
writeNotNull(
|
||||||
?.map((id, update) => SetMethodPropertiesConverter().fromMapIdToJson(id, update.toJson())));
|
'update',
|
||||||
|
updateRuleFilter?.map((id, update) {
|
||||||
|
final listJsonUpdatesRuleFilter = update.map((e) => e.toJson()).toList();
|
||||||
|
return SetMethodPropertiesConverter()
|
||||||
|
.fromMapIdToJson(id, listJsonUpdatesRuleFilter);
|
||||||
|
}));
|
||||||
|
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@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:json_annotation/json_annotation.dart';
|
||||||
import 'package:rule_filter/converter/rule_id_converter.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.dart';
|
||||||
import 'package:rule_filter/rule_action.dart';
|
import 'package:rule_filter/rule_action.dart';
|
||||||
import 'package:rule_filter/rule_condition.dart';
|
import 'package:rule_filter/rule_condition.dart';
|
||||||
@@ -7,21 +9,21 @@ import 'package:rule_filter/rule_id.dart';
|
|||||||
|
|
||||||
part 'tmail_rule.g.dart';
|
part 'tmail_rule.g.dart';
|
||||||
|
|
||||||
@JsonSerializable()
|
@RuleIdNullableConverter()
|
||||||
@RuleIdConverter()
|
@IdConverter()
|
||||||
|
@JsonSerializable(explicitToJson: true)
|
||||||
class TMailRule extends Rule {
|
class TMailRule extends Rule {
|
||||||
|
final RuleId? id;
|
||||||
final RuleId id;
|
|
||||||
final String name;
|
final String name;
|
||||||
final RuleCondition condition;
|
final RuleCondition condition;
|
||||||
final RuleAction action;
|
final RuleAction action;
|
||||||
|
|
||||||
TMailRule(
|
TMailRule({
|
||||||
this.id,
|
this.id,
|
||||||
this.name,
|
required this.name,
|
||||||
this.condition,
|
required this.condition,
|
||||||
this.action,
|
required this.action,
|
||||||
);
|
});
|
||||||
|
|
||||||
factory TMailRule.fromJson(Map<String, dynamic> json) =>
|
factory TMailRule.fromJson(Map<String, dynamic> json) =>
|
||||||
_$TMailRuleFromJson(json);
|
_$TMailRuleFromJson(json);
|
||||||
@@ -30,9 +32,9 @@ class TMailRule extends Rule {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [
|
List<Object?> get props => [
|
||||||
id,
|
id,
|
||||||
name,
|
name,
|
||||||
condition,
|
condition,
|
||||||
action,
|
action,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
name: rule_filter
|
name: rule_filter
|
||||||
description: rule_filter for tmail
|
description: TMail rule_filter extension
|
||||||
version: 0.0.1
|
publish_to: 'none'
|
||||||
publish_to: none
|
|
||||||
|
version: 1.0.0+1
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=2.17.6 <3.0.0"
|
sdk: ">=2.17.0 <3.0.0"
|
||||||
flutter: ">=1.17.0"
|
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
flutter:
|
flutter:
|
||||||
@@ -35,13 +35,13 @@ dev_dependencies:
|
|||||||
json_serializable: 6.2.0
|
json_serializable: 6.2.0
|
||||||
|
|
||||||
mockito: 5.2.0
|
mockito: 5.2.0
|
||||||
|
|
||||||
# For information on the generic Dart part of this file, see the
|
# For information on the generic Dart part of this file, see the
|
||||||
# following page: https://dart.dev/tools/pub/pubspec
|
# following page: https://dart.dev/tools/pub/pubspec
|
||||||
|
|
||||||
# The following section is specific to Flutter packages.
|
# The following section is specific to Flutter.
|
||||||
flutter:
|
flutter:
|
||||||
|
|
||||||
|
uses-material-design: true
|
||||||
# To add assets to your package, add an assets section, like this:
|
# To add assets to your package, add an assets section, like this:
|
||||||
# assets:
|
# assets:
|
||||||
# - images/a_dot_burr.jpeg
|
# - images/a_dot_burr.jpeg
|
||||||
@@ -51,7 +51,7 @@ flutter:
|
|||||||
# https://flutter.dev/assets-and-images/#from-packages
|
# https://flutter.dev/assets-and-images/#from-packages
|
||||||
#
|
#
|
||||||
# An image asset can refer to one or more resolution-specific "variants", see
|
# 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,
|
# To add custom fonts to your package, add a fonts section here,
|
||||||
# in this "flutter" section. Each entry in this list should have a
|
# 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