add network folder and test
This commit is contained in:
@@ -74,6 +74,9 @@ workflows:
|
||||
cd ../contact
|
||||
flutter pub get && flutter pub run build_runner build --delete-conflicting-outputs
|
||||
|
||||
cd ../rule_filter
|
||||
flutter pub get && flutter pub run build_runner build --delete-conflicting-outputs
|
||||
|
||||
cd ..
|
||||
flutter pub get && flutter pub run build_runner build --delete-conflicting-outputs
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
.buildlog/
|
||||
.history
|
||||
.svn/
|
||||
migrate_working_dir/
|
||||
|
||||
# IntelliJ related
|
||||
*.iml
|
||||
@@ -28,3 +27,7 @@ migrate_working_dir/
|
||||
.dart_tool/
|
||||
.packages
|
||||
build/
|
||||
|
||||
#generated file
|
||||
*.g.dart
|
||||
*.mocks.dart
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:rule_filter/rule_filter/tmail_rule.dart';
|
||||
|
||||
abstract class RuleFilterDataSource {
|
||||
Future<List<TMailRule>> getListTMailRule(AccountId accountId);
|
||||
|
||||
Future<void> updateListTMailRule(
|
||||
List<TMailRule> listTMailRuleKeep,
|
||||
List<TMailRule> listTMailRuleUpdate,
|
||||
AccountId accountId,
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:rule_filter/data/datasource/rule_filter_datasource.dart';
|
||||
import 'package:rule_filter/data/network/rule_filter_api.dart';
|
||||
import 'package:rule_filter/rule_filter/tmail_rule.dart';
|
||||
|
||||
class RuleFilterDataSourceImpl extends RuleFilterDataSource {
|
||||
final RuleFilterAPI _ruleFilterAPI;
|
||||
|
||||
RuleFilterDataSourceImpl(this._ruleFilterAPI);
|
||||
|
||||
@override
|
||||
Future<List<TMailRule>> getListTMailRule(AccountId accountId) {
|
||||
return Future.sync(() async {
|
||||
final listTMailRules = await _ruleFilterAPI.getListTMailRule(accountId);
|
||||
return listTMailRules;
|
||||
}).catchError((error) {
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> updateListTMailRule(
|
||||
List<TMailRule> listTMailRuleKeep,
|
||||
List<TMailRule> listTMailRuleUpdate,
|
||||
AccountId accountId,
|
||||
) {
|
||||
final List<TMailRule> listTMailRule = List.empty(growable: true);
|
||||
listTMailRule.addAll(listTMailRuleUpdate);
|
||||
for (var itemTMailRuleKeep in listTMailRuleKeep) {
|
||||
if (listTMailRuleUpdate
|
||||
.where((itemTMailRuleUpdate) =>
|
||||
itemTMailRuleKeep == itemTMailRuleUpdate)
|
||||
.isNotEmpty) {
|
||||
listTMailRuleKeep.remove(itemTMailRuleKeep);
|
||||
}
|
||||
}
|
||||
listTMailRule.addAll(listTMailRuleKeep);
|
||||
|
||||
return Future.sync(() async {
|
||||
await _ruleFilterAPI.updateListTMailRule(listTMailRule, accountId);
|
||||
}).catchError((error) {
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
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:rule_filter/rule_filter/get/get_rule_filter_method.dart';
|
||||
import 'package:rule_filter/rule_filter/get/get_rule_filter_response.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_filter_id.dart';
|
||||
import 'package:rule_filter/rule_filter/set/set_rule_filter_method.dart';
|
||||
import 'package:rule_filter/rule_filter/set/set_rule_filter_response.dart';
|
||||
import 'package:rule_filter/rule_filter/tmail_rule.dart';
|
||||
|
||||
class RuleFilterAPI {
|
||||
final HttpClient _httpClient;
|
||||
|
||||
RuleFilterAPI(this._httpClient);
|
||||
|
||||
Future<List<TMailRule>> getListTMailRule(AccountId accountId) async {
|
||||
final processingInvocation = ProcessingInvocation();
|
||||
final requestBuilder =
|
||||
JmapRequestBuilder(_httpClient, processingInvocation);
|
||||
|
||||
final getRuleFilterMethod = GetRuleFilterMethod(
|
||||
accountId,
|
||||
);
|
||||
|
||||
final getRuleFilterInvocation =
|
||||
requestBuilder.invocation(getRuleFilterMethod);
|
||||
final response = await (requestBuilder
|
||||
..usings(getRuleFilterMethod.requiredCapabilities))
|
||||
.build()
|
||||
.execute();
|
||||
|
||||
final result = response.parse<GetRuleFilterResponse>(
|
||||
getRuleFilterInvocation.methodCallId,
|
||||
GetRuleFilterResponse.deserialize);
|
||||
|
||||
if (result?.list.isEmpty == true) {
|
||||
return <TMailRule>[];
|
||||
}
|
||||
|
||||
return result?.list.first.rules ?? <TMailRule>[];
|
||||
}
|
||||
|
||||
Future<SetRuleFilterResponse?> updateListTMailRule(
|
||||
List<TMailRule> listTMailRule, AccountId accountId) async {
|
||||
final processingInvocation = ProcessingInvocation();
|
||||
final requestBuilder =
|
||||
JmapRequestBuilder(_httpClient, processingInvocation);
|
||||
|
||||
final setRuleFilterMethod = SetRuleFilterMethod(accountId)
|
||||
..addUpdateRuleFilter(
|
||||
{Id(RuleFilterIdType.singleton.value): listTMailRule},
|
||||
);
|
||||
|
||||
final setRuleFilterInvocation =
|
||||
requestBuilder.invocation(setRuleFilterMethod);
|
||||
final response = await (requestBuilder
|
||||
..usings(setRuleFilterMethod.requiredCapabilities))
|
||||
.build()
|
||||
.execute();
|
||||
|
||||
final result = response.parse<SetRuleFilterResponse>(
|
||||
setRuleFilterInvocation.methodCallId,
|
||||
SetRuleFilterResponse.deserialize);
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:rule_filter/rule_filter_id.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_filter_id.dart';
|
||||
|
||||
class RuleFilterIdConverter implements JsonConverter<RuleFilterId, String> {
|
||||
const RuleFilterIdConverter();
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:rule_filter/rule_id.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_id.dart';
|
||||
|
||||
class RuleIdConverter implements JsonConverter<RuleId, String> {
|
||||
const RuleIdConverter();
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
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';
|
||||
import 'package:rule_filter/rule_filter/rule_id.dart';
|
||||
|
||||
class RuleIdNullableConverter implements JsonConverter<RuleId?, String?> {
|
||||
const RuleIdNullableConverter();
|
||||
+3
-3
@@ -7,9 +7,9 @@ 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/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';
|
||||
import 'package:rule_filter/rule_filter/capability_rule_filter.dart';
|
||||
import 'package:rule_filter/rule_filter/converter/rule_id_converter.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_id.dart';
|
||||
|
||||
part 'get_rule_filter_method.g.dart';
|
||||
|
||||
+2
-2
@@ -6,8 +6,8 @@ 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';
|
||||
import 'package:rule_filter/rule_filter/rule_filter.dart';
|
||||
import 'package:rule_filter/rule_filter/tmail_rule.dart';
|
||||
|
||||
part 'get_rule_filter_response.g.dart';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:rule_filter/rule_append_in.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_append_in.dart';
|
||||
|
||||
part 'rule_action.g.dart';
|
||||
|
||||
+3
-1
@@ -1,12 +1,14 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:jmap_dart_client/http/converter/mailbox_id_converter.dart';
|
||||
import 'package:jmap_dart_client/http/converter/mailbox_id_nullable_converter.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'rule_append_in.g.dart';
|
||||
|
||||
@MailboxIdConverter()
|
||||
@JsonSerializable()
|
||||
@MailboxIdNullableConverter()
|
||||
@JsonSerializable(explicitToJson: true)
|
||||
class RuleAppendIn with EquatableMixin {
|
||||
final List<MailboxId> mailboxIds;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import 'package:jmap_dart_client/jmap/core/filter/filter.dart';
|
||||
import 'package:json_annotation/json_annotation.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';
|
||||
import 'package:rule_filter/rule_filter/converter/rule_filter_id_coverter.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_filter_id.dart';
|
||||
import 'package:rule_filter/rule_filter/tmail_rule.dart';
|
||||
|
||||
part 'rule_filter.g.dart';
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@ 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';
|
||||
import 'package:rule_filter/rule_filter/converter/rule_filter_id_coverter.dart';
|
||||
|
||||
enum RuleFilterIdType {
|
||||
singleton('singleton');
|
||||
+2
-2
@@ -6,8 +6,8 @@ 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';
|
||||
import 'package:rule_filter/rule_filter/capability_rule_filter.dart';
|
||||
import 'package:rule_filter/rule_filter/tmail_rule.dart';
|
||||
|
||||
class SetRuleFilterMethod extends SetMethod<List<TMailRule>> with OptionalUpdateRuleFilter<List<TMailRule>>{
|
||||
SetRuleFilterMethod(AccountId accountId) : super(accountId);
|
||||
+1
-1
@@ -7,7 +7,7 @@ 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/method/response/set_response.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart';
|
||||
import 'package:rule_filter/tmail_rule.dart';
|
||||
import 'package:rule_filter/rule_filter/tmail_rule.dart';
|
||||
|
||||
class SetRuleFilterResponse extends SetResponse<TMailRule> {
|
||||
SetRuleFilterResponse(
|
||||
@@ -1,11 +1,10 @@
|
||||
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';
|
||||
import 'package:rule_filter/rule_id.dart';
|
||||
import 'package:rule_filter/rule_filter/converter/rule_id_nullable_converter.dart';
|
||||
import 'package:rule_filter/rule_filter/rule.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_action.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_condition.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_id.dart';
|
||||
|
||||
part 'tmail_rule.g.dart';
|
||||
|
||||
@@ -32,7 +31,6 @@ class TMailRule extends Rule {
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
id,
|
||||
name,
|
||||
condition,
|
||||
action,
|
||||
@@ -0,0 +1,61 @@
|
||||
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/mailbox/mailbox.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
import 'package:mockito/annotations.dart';
|
||||
import 'package:rule_filter/data/datasource_impl/rule_filter_datasource_impl.dart';
|
||||
import 'package:rule_filter/data/network/rule_filter_api.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_action.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_append_in.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_condition.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_filter.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_filter_id.dart';
|
||||
import 'package:rule_filter/rule_filter/tmail_rule.dart';
|
||||
|
||||
import 'rule_filter_datasource_impl_test.mocks.dart';
|
||||
|
||||
@GenerateMocks([RuleFilterAPI])
|
||||
void main() {
|
||||
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')),
|
||||
],
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
|
||||
|
||||
group('rule_filter_datasource_impl_test', () {
|
||||
late RuleFilterAPI _ruleFilterAPI;
|
||||
late RuleFilterDataSourceImpl _ruleFilterDataSourceImpl;
|
||||
|
||||
setUp(() {
|
||||
_ruleFilterAPI = MockRuleFilterAPI();
|
||||
_ruleFilterDataSourceImpl = RuleFilterDataSourceImpl(_ruleFilterAPI);
|
||||
});
|
||||
|
||||
test('getListTMailRule should return success with valid data', () async {
|
||||
when(_ruleFilterAPI.getListTMailRule(AccountId(Id(
|
||||
'0eacc7a5c74b27ab36a823bc5c34da36e16c093705f241d6ed5f48ee73a4ecfb'))))
|
||||
.thenAnswer((_) async => expectRuleFilter1.rules);
|
||||
|
||||
final result = await _ruleFilterDataSourceImpl.getListTMailRule(AccountId(Id(
|
||||
'0eacc7a5c74b27ab36a823bc5c34da36e16c093705f241d6ed5f48ee73a4ecfb')));
|
||||
expect(result, expectRuleFilter1.rules);
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -6,14 +6,14 @@ 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';
|
||||
import 'package:rule_filter/rule_filter/get/get_rule_filter_method.dart';
|
||||
import 'package:rule_filter/rule_filter/get/get_rule_filter_response.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_action.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_append_in.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_condition.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_filter.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_filter_id.dart';
|
||||
import 'package:rule_filter/rule_filter/tmail_rule.dart';
|
||||
|
||||
void main() {
|
||||
group('test to json get rule filter method', () {
|
||||
|
||||
@@ -4,19 +4,16 @@ 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';
|
||||
import 'package:rule_filter/rule_filter/rule_action.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_append_in.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_condition.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_filter_id.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_id.dart';
|
||||
import 'package:rule_filter/rule_filter/set/set_rule_filter_method.dart';
|
||||
import 'package:rule_filter/rule_filter/set/set_rule_filter_response.dart';
|
||||
import 'package:rule_filter/rule_filter/tmail_rule.dart';
|
||||
|
||||
void main() {
|
||||
group('test to json set identity method', () {
|
||||
@@ -114,7 +111,7 @@ void main() {
|
||||
final setRuleFilterMethod = SetRuleFilterMethod(AccountId(Id(
|
||||
'29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6')))
|
||||
..addUpdateRuleFilter({
|
||||
Id('singleton'): [
|
||||
Id(RuleFilterIdType.singleton.value): [
|
||||
TMailRule(
|
||||
id: RuleId(id: Id('1')),
|
||||
name: 'My first rule',
|
||||
|
||||
Reference in New Issue
Block a user