add network folder and test

This commit is contained in:
ManhNTX
2022-08-07 20:44:09 +07:00
committed by Dat H. Pham
parent 34b6446ee1
commit 871b40a968
24 changed files with 234 additions and 45 deletions
+3
View File
@@ -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
+4 -1
View File
@@ -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,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,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,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();
@@ -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';
@@ -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';
@@ -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';
@@ -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');
@@ -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);
@@ -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',