Skip to content

Commit 7a23921

Browse files
committed
add unit-test for get/set identity contains sortOrder
1 parent bbd598a commit 7a23921

File tree

3 files changed

+221
-0
lines changed

3 files changed

+221
-0
lines changed

lib/jmap/identities/get/get_identity_method.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ class GetIdentityMethod extends GetMethod {
2626
CapabilityIdentifier.jmapSubmission
2727
};
2828

29+
Set<CapabilityIdentifier> get requiredCapabilitiesSupportSortOrder => {
30+
CapabilityIdentifier.jmapCore,
31+
CapabilityIdentifier.jmapSubmission,
32+
CapabilityIdentifier.jmapSortOrder
33+
};
34+
2935
@override
3036
List<Object?> get props => [methodName, accountId, ids, properties, requiredCapabilities];
3137

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
import 'package:dio/dio.dart';
2+
import 'package:flutter_test/flutter_test.dart';
3+
import 'package:http_mock_adapter/http_mock_adapter.dart';
4+
import 'package:jmap_dart_client/http/http_client.dart';
5+
import 'package:jmap_dart_client/jmap/account_id.dart';
6+
import 'package:jmap_dart_client/jmap/core/id.dart';
7+
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
8+
import 'package:jmap_dart_client/jmap/identities/identity.dart';
9+
import 'package:jmap_dart_client/jmap/identities/set/set_identity_method.dart';
10+
import 'package:jmap_dart_client/jmap/identities/set/set_identity_response.dart';
11+
import 'package:jmap_dart_client/jmap/jmap_request.dart';
12+
13+
void main() {
14+
group('test to json set identity method', () {
15+
final expectedCreated = Identity(
16+
id: IdentityId(Id('5ccf6d7b-77e8-467a-9064-9f7ccfb19e86')),
17+
sortOrder: UnsignedInt(99999),
18+
);
19+
20+
test('create new identity with sort order method and response parsing', () async {
21+
final baseOption = BaseOptions(method: 'POST');
22+
final dio = Dio(baseOption)
23+
..options.baseUrl = 'http://domain.com/jmap';
24+
final dioAdapter = DioAdapter(dio: dio);
25+
dioAdapter.onPost(
26+
'',
27+
(server) => server.reply(200, {
28+
"sessionState": "2c9f1b12-b35a-43e6-9af2-0106fb53a943",
29+
"methodResponses": [
30+
[
31+
"Identity/set",
32+
{
33+
"accountId": "4603645929458bf671aca134b890cbb8ac4a0d297640fsdefe9230ea28daa0b1",
34+
"newState": "2c9f1b12-b35a-43e6-9af2-0106fb53a943",
35+
"created": {
36+
"dab246": {
37+
"id": "5ccf6d7b-77e8-467a-9064-9f7ccfb19e86",
38+
"mayDelete": true
39+
}
40+
}
41+
},
42+
"c0"
43+
]
44+
]
45+
}),
46+
data: {
47+
"using": [
48+
"urn:ietf:params:jmap:core",
49+
"urn:ietf:params:jmap:submission"
50+
],
51+
"methodCalls": [
52+
[
53+
"Identity/set",
54+
{
55+
"accountId": "4603645929458bf671aca134b890cbb8ac4a0d297640fsdefe9230ea28daa0b1",
56+
"create": {
57+
"dab246": {
58+
"name": "User B23",
59+
"email": "[email protected]",
60+
"textSignature": "",
61+
"htmlSignature": "<body><div>Dat T. Vu <br>Mobile Engineer <br>LINAGORA VIETNAM <br>A: 8th Floor (Toong VPBank Tower, No. 5 Dien Bien Phu Str., Ba Dinh Dist., Ha Noi <br>P: (+84) 366-769-439<br>E: [email protected]</div></body>",
62+
"sortOrder": 99999
63+
}
64+
}
65+
},
66+
"c0"
67+
]
68+
]
69+
},
70+
headers: {
71+
"accept": "application/json;jmapVersion=rfc-8621",
72+
"content-type": "application/json; charset=utf-8",
73+
"content-length": 522
74+
}
75+
);
76+
77+
final setIdentityMethod = SetIdentityMethod(AccountId(Id('4603645929458bf671aca134b890cbb8ac4a0d297640fsdefe9230ea28daa0b1')))
78+
..addCreate(Id('dab246'),
79+
Identity(
80+
name: 'User B23',
81+
82+
textSignature: Signature(''),
83+
htmlSignature: Signature('<body><div>Dat T. Vu <br>Mobile Engineer <br>LINAGORA VIETNAM <br>A: 8th Floor (Toong VPBank Tower, No. 5 Dien Bien Phu Str., Ba Dinh Dist., Ha Noi <br>P: (+84) 366-769-439<br>E: [email protected]</div></body>'),
84+
sortOrder: UnsignedInt(99999),
85+
)
86+
);
87+
88+
final httpClient = HttpClient(dio);
89+
final requestBuilder = JmapRequestBuilder(httpClient, ProcessingInvocation());
90+
final setIdentityInvocation = requestBuilder.invocation(setIdentityMethod);
91+
final response = await (requestBuilder
92+
..usings(setIdentityMethod.requiredCapabilities))
93+
.build()
94+
.execute();
95+
96+
final setIdentityResponse = response.parse<SetIdentityResponse>(
97+
setIdentityInvocation.methodCallId,
98+
SetIdentityResponse.deserialize);
99+
100+
expect(setIdentityResponse!.created![Id('dab246')]!.id, equals(expectedCreated.id));
101+
});
102+
});
103+
}
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
import 'package:dio/dio.dart';
2+
import 'package:flutter_test/flutter_test.dart';
3+
import 'package:http_mock_adapter/http_mock_adapter.dart';
4+
import 'package:jmap_dart_client/http/http_client.dart';
5+
import 'package:jmap_dart_client/jmap/account_id.dart';
6+
import 'package:jmap_dart_client/jmap/core/id.dart';
7+
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
8+
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
9+
import 'package:jmap_dart_client/jmap/identities/get/get_identity_method.dart';
10+
import 'package:jmap_dart_client/jmap/identities/get/get_identity_response.dart';
11+
import 'package:jmap_dart_client/jmap/identities/identity.dart';
12+
import 'package:jmap_dart_client/jmap/jmap_request.dart';
13+
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
14+
15+
void main() {
16+
group('test to json get identity method', () {
17+
final expectIdentity1 = Identity(
18+
id: IdentityId(Id('ac8f94d7-c548-4697-aea5-c4821ba07538')),
19+
20+
bcc: {},
21+
sortOrder: UnsignedInt(10000),
22+
);
23+
24+
final expectIdentity2 = Identity(
25+
id: IdentityId(Id('f1e627f0-e21b-371a-9c03-ac74d06353fd')),
26+
27+
sortOrder: UnsignedInt(1000),
28+
bcc: {EmailAddress(null, "[email protected]")}
29+
);
30+
31+
test('get identity method and response parsing', () async {
32+
final baseOption = BaseOptions(method: 'POST');
33+
final dio = Dio(baseOption)
34+
..options.baseUrl = 'http://domain.com/jmap';
35+
final dioAdapter = DioAdapter(dio: dio);
36+
dioAdapter.onPost('', (server) => server.reply(200, {
37+
"sessionState": "2c9f1b12-b35a-43e6-9af2-0106fb53a943",
38+
"methodResponses": [
39+
[
40+
"Identity/get",
41+
{
42+
"accountId": "4603645929458bf671aca134b890cbb8ac4a0d297640f7eefe9f30ea28daa0b1",
43+
"state": "2c9f1b12-b35a-43e6-9af2-0106fb53a943",
44+
"list": [
45+
{
46+
"email": "[email protected]",
47+
"id": "ac8f94d7-c548-4697-aea5-c4821ba07538",
48+
"sortOrder": 10000,
49+
"bcc": []
50+
},
51+
{
52+
"email": "[email protected]",
53+
"id": "f1e627f0-e21b-371a-9c03-ac74d06353fd",
54+
"sortOrder": 1000,
55+
"bcc": [
56+
{
57+
"email": "[email protected]"
58+
}
59+
]
60+
}
61+
]
62+
},
63+
"c0"
64+
]
65+
]
66+
}),
67+
data: {
68+
"using": [
69+
"urn:ietf:params:jmap:core",
70+
"urn:ietf:params:jmap:submission",
71+
"urn:apache:james:params:jmap:mail:identity:sortorder"
72+
],
73+
"methodCalls": [
74+
[
75+
"Identity/get",
76+
{
77+
"accountId": "4603645929458bf671aca134b890cbb8ac4a0d297640f7eefe9f30ea28daa0b1",
78+
"properties": ["email", "bcc", "sortOrder"]
79+
},
80+
"c0"
81+
]
82+
]
83+
},
84+
headers: {
85+
"accept": "application/json;jmapVersion=rfc-8621",
86+
"content-type": "application/json; charset=utf-8",
87+
"content-length": 288
88+
}
89+
);
90+
91+
final httpClient = HttpClient(dio);
92+
final processingInvocation = ProcessingInvocation();
93+
final requestBuilder = JmapRequestBuilder(httpClient, processingInvocation);
94+
final accountId = AccountId(Id('4603645929458bf671aca134b890cbb8ac4a0d297640f7eefe9f30ea28daa0b1'));
95+
96+
final getIdentityMethod = GetIdentityMethod(accountId)
97+
..addProperties(Properties({"email", "bcc", "sortOrder"}));
98+
final getIdentityInvocation = requestBuilder.invocation(getIdentityMethod);
99+
final response = await (requestBuilder
100+
..usings(getIdentityMethod.requiredCapabilitiesSupportSortOrder))
101+
.build()
102+
.execute();
103+
104+
final resultList = response.parse<GetIdentityResponse>(
105+
getIdentityInvocation.methodCallId,
106+
GetIdentityResponse.deserialize);
107+
108+
expect(resultList?.list.length, equals(2));
109+
expect(resultList?.list, containsAll({expectIdentity1, expectIdentity2}));
110+
});
111+
});
112+
}

0 commit comments

Comments
 (0)