Skip to content

Commit 345f21b

Browse files
dab246hoangdat
authored andcommitted
Add unit-test for parsing session from CYRUS
1 parent c116d2e commit 345f21b

File tree

3 files changed

+276
-0
lines changed

3 files changed

+276
-0
lines changed

lib/jmap/core/capability/mail_capability.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,20 @@ class MailCapability extends CapabilityProperties with EquatableMixin {
1313
final UnsignedInt? maxMailboxesPerEmail;
1414
final UnsignedInt? maxMailboxDepth;
1515
final UnsignedInt? maxSizeMailboxName;
16+
final UnsignedInt? maxKeywordsPerEmail;
1617
final UnsignedInt? maxSizeAttachmentsPerEmail;
1718
final Set<String>? emailQuerySortOptions;
19+
final Set<String>? emailsListSortOptions;
1820
final bool? mayCreateTopLevelMailbox;
1921

2022
MailCapability({
2123
this.maxMailboxesPerEmail,
2224
this.maxMailboxDepth,
2325
this.maxSizeMailboxName,
26+
this.maxKeywordsPerEmail,
2427
this.maxSizeAttachmentsPerEmail,
2528
this.emailQuerySortOptions,
29+
this.emailsListSortOptions,
2630
this.mayCreateTopLevelMailbox,
2731
});
2832

@@ -39,8 +43,10 @@ class MailCapability extends CapabilityProperties with EquatableMixin {
3943
maxMailboxesPerEmail,
4044
maxMailboxDepth,
4145
maxSizeMailboxName,
46+
maxKeywordsPerEmail,
4247
maxSizeAttachmentsPerEmail,
4348
emailQuerySortOptions,
49+
emailsListSortOptions,
4450
mayCreateTopLevelMailbox
4551
];
4652
}

lib/jmap/core/capability/mail_capability.g.dart

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/jmap/core/session/session_test.dart

Lines changed: 259 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1147,4 +1147,263 @@ void main() {
11471147
expect(parsedSession, equals(expectedSession));
11481148
});
11491149
});
1150+
1151+
group('get session for CYRUS server', () {
1152+
test('get should parsing correctly session', () {
1153+
final sessionString = '''
1154+
{
1155+
"username": "example",
1156+
"apiUrl": "/jmap/",
1157+
"downloadUrl": "/jmap/download/{accountId}/{blobId}/{name}?accept={type}",
1158+
"uploadUrl": "/jmap/upload/{accountId}/",
1159+
"eventSourceUrl": "/jmap/eventsource/?types={types}&closeafter={closeafter}&ping={ping}",
1160+
"state": "0",
1161+
"capabilities": {
1162+
"urn:ietf:params:jmap:core": {
1163+
"maxSizeUpload": 1073741824,
1164+
"maxConcurrentUpload": 5,
1165+
"maxSizeRequest": 10485760,
1166+
"maxConcurrentRequests": 5,
1167+
"maxCallsInRequest": 50,
1168+
"maxObjectsInGet": 4096,
1169+
"maxObjectsInSet": 4096,
1170+
"collationAlgorithms": []
1171+
},
1172+
"urn:ietf:params:jmap:mail": {},
1173+
"urn:ietf:params:jmap:submission": {},
1174+
"urn:ietf:params:jmap:vacationresponse": {},
1175+
"urn:ietf:params:jmap:mdn": {},
1176+
"https://cyrusimap.org/ns/jmap/sieve": {}
1177+
},
1178+
"accounts": {
1179+
"example": {
1180+
"name": "example",
1181+
"isPrimary": true,
1182+
"isPersonal": true,
1183+
"isReadOnly": false,
1184+
"accountCapabilities": {
1185+
"urn:ietf:params:jmap:core": {},
1186+
"urn:ietf:params:jmap:mail": {
1187+
"maxMailboxesPerEmail": 20,
1188+
"maxKeywordsPerEmail": 100,
1189+
"maxSizeAttachmentsPerEmail": 10485760,
1190+
"emailsListSortOptions": [
1191+
"receivedAt",
1192+
"sentAt",
1193+
"from",
1194+
"id",
1195+
"emailstate",
1196+
"size",
1197+
"subject",
1198+
"to",
1199+
"hasKeyword",
1200+
"someInThreadHaveKeyword"
1201+
],
1202+
"mayCreateTopLevelMailbox": true
1203+
},
1204+
"urn:ietf:params:jmap:submission": {
1205+
"maxDelayedSend": 44236800,
1206+
"submissionExtensions": {
1207+
"size": [
1208+
"10240000"
1209+
],
1210+
"dsn": []
1211+
}
1212+
},
1213+
"urn:ietf:params:jmap:mdn": {},
1214+
"https://cyrusimap.org/ns/jmap/sieve": {
1215+
"supportsTest": true,
1216+
"maxRedirects": null,
1217+
"maxNumberScripts": 5,
1218+
"maxSizeScript": 32768,
1219+
"sieveExtensions": [
1220+
"encoded-character",
1221+
"comparator-i;ascii-numeric",
1222+
"fileinto",
1223+
"reject",
1224+
"ereject",
1225+
"vacation",
1226+
"vacation-seconds",
1227+
"notify",
1228+
"enotify",
1229+
"include",
1230+
"editheader",
1231+
"vnd.cyrus.snooze",
1232+
"vnd.cyrus.imip",
1233+
"envelope",
1234+
"environment",
1235+
"body",
1236+
"imap4flags",
1237+
"date",
1238+
"ihave",
1239+
"mailbox",
1240+
"mboxmetadata",
1241+
"servermetadata",
1242+
"duplicate",
1243+
"vnd.cyrus.jmapquery",
1244+
"relational",
1245+
"regex",
1246+
"extlists",
1247+
"subaddress",
1248+
"copy",
1249+
"index",
1250+
"variables",
1251+
"redirect-deliverby",
1252+
"redirect-dsn",
1253+
"special-use",
1254+
"fcc",
1255+
"mailboxid"
1256+
],
1257+
"notificationMethods": [
1258+
"mailto"
1259+
],
1260+
"externalLists": [
1261+
"urn:ietf:params:sieve:addrbook"
1262+
]
1263+
},
1264+
"urn:ietf:params:jmap:vacationresponse": {}
1265+
}
1266+
}
1267+
},
1268+
"primaryAccounts": {
1269+
"urn:ietf:params:jmap:mail": "example",
1270+
"urn:ietf:params:jmap:submission": "example",
1271+
"https://cyrusimap.org/ns/jmap/contacts": "example",
1272+
"https://cyrusimap.org/ns/jmap/calendars": "example",
1273+
"https://cyrusimap.org/ns/jmap/backup": "example",
1274+
"urn:ietf:params:jmap:vacationresponse": "example",
1275+
"https://cyrusimap.org/ns/jmap/sieve": "example"
1276+
}
1277+
}
1278+
''';
1279+
1280+
final Session expectedSession = Session(
1281+
{
1282+
CapabilityIdentifier.jmapCore: CoreCapability(
1283+
maxSizeUpload: UnsignedInt(1073741824),
1284+
maxConcurrentUpload: UnsignedInt(5),
1285+
maxSizeRequest: UnsignedInt(10485760),
1286+
maxConcurrentRequests: UnsignedInt(5),
1287+
maxCallsInRequest: UnsignedInt(50),
1288+
maxObjectsInGet: UnsignedInt(4096),
1289+
maxObjectsInSet: UnsignedInt(4096),
1290+
collationAlgorithms: {}
1291+
),
1292+
CapabilityIdentifier.jmapMail: MailCapability(),
1293+
CapabilityIdentifier.jmapSubmission: SubmissionCapability(),
1294+
CapabilityIdentifier.jmapVacationResponse: VacationCapability(),
1295+
CapabilityIdentifier.jmapMdn: MdnCapability(),
1296+
CapabilityIdentifier(Uri.parse('https://cyrusimap.org/ns/jmap/sieve')): DefaultCapability(Map<String, dynamic>()),
1297+
},
1298+
{
1299+
AccountId(Id('example')): Account(
1300+
AccountName('example'),
1301+
true,
1302+
false,
1303+
{
1304+
CapabilityIdentifier.jmapCore: CoreCapability(),
1305+
CapabilityIdentifier.jmapMail: MailCapability(
1306+
maxMailboxesPerEmail: UnsignedInt(20),
1307+
maxKeywordsPerEmail: UnsignedInt(100),
1308+
maxSizeAttachmentsPerEmail: UnsignedInt(10485760),
1309+
emailsListSortOptions: {
1310+
"receivedAt",
1311+
"sentAt",
1312+
"from",
1313+
"id",
1314+
"emailstate",
1315+
"size",
1316+
"subject",
1317+
"to",
1318+
"hasKeyword",
1319+
"someInThreadHaveKeyword"
1320+
},
1321+
mayCreateTopLevelMailbox: true
1322+
),
1323+
CapabilityIdentifier.jmapSubmission: SubmissionCapability(
1324+
maxDelayedSend: UnsignedInt(44236800),
1325+
submissionExtensions: {
1326+
"size": [
1327+
"10240000"
1328+
],
1329+
"dsn": []
1330+
}
1331+
),
1332+
CapabilityIdentifier.jmapMdn: MdnCapability(),
1333+
CapabilityIdentifier(Uri.parse('https://cyrusimap.org/ns/jmap/sieve')): DefaultCapability({
1334+
"supportsTest": true,
1335+
"maxRedirects": null,
1336+
"maxNumberScripts": 5,
1337+
"maxSizeScript": 32768,
1338+
"sieveExtensions": [
1339+
"encoded-character",
1340+
"comparator-i;ascii-numeric",
1341+
"fileinto",
1342+
"reject",
1343+
"ereject",
1344+
"vacation",
1345+
"vacation-seconds",
1346+
"notify",
1347+
"enotify",
1348+
"include",
1349+
"editheader",
1350+
"vnd.cyrus.snooze",
1351+
"vnd.cyrus.imip",
1352+
"envelope",
1353+
"environment",
1354+
"body",
1355+
"imap4flags",
1356+
"date",
1357+
"ihave",
1358+
"mailbox",
1359+
"mboxmetadata",
1360+
"servermetadata",
1361+
"duplicate",
1362+
"vnd.cyrus.jmapquery",
1363+
"relational",
1364+
"regex",
1365+
"extlists",
1366+
"subaddress",
1367+
"copy",
1368+
"index",
1369+
"variables",
1370+
"redirect-deliverby",
1371+
"redirect-dsn",
1372+
"special-use",
1373+
"fcc",
1374+
"mailboxid"
1375+
],
1376+
"notificationMethods": [
1377+
"mailto"
1378+
],
1379+
"externalLists": [
1380+
"urn:ietf:params:sieve:addrbook"
1381+
]
1382+
}),
1383+
CapabilityIdentifier.jmapVacationResponse: VacationCapability()
1384+
}
1385+
)
1386+
},
1387+
{
1388+
CapabilityIdentifier.jmapMail: AccountId(Id('example')),
1389+
CapabilityIdentifier.jmapSubmission: AccountId(Id('example')),
1390+
CapabilityIdentifier(Uri.parse('https://cyrusimap.org/ns/jmap/contacts')): AccountId(Id('example')),
1391+
CapabilityIdentifier(Uri.parse('https://cyrusimap.org/ns/jmap/calendars')): AccountId(Id('example')),
1392+
CapabilityIdentifier(Uri.parse('https://cyrusimap.org/ns/jmap/backup')): AccountId(Id('example')),
1393+
CapabilityIdentifier.jmapVacationResponse: AccountId(Id('example')),
1394+
CapabilityIdentifier(Uri.parse('https://cyrusimap.org/ns/jmap/sieve')): AccountId(Id('example')),
1395+
},
1396+
UserName('example'),
1397+
Uri.parse('/jmap/'),
1398+
Uri.parse('/jmap/download/{accountId}/{blobId}/{name}?accept={type}'),
1399+
Uri.parse('/jmap/upload/{accountId}/'),
1400+
Uri.parse('/jmap/eventsource/?types={types}&closeafter={closeafter}&ping={ping}'),
1401+
State('0')
1402+
);
1403+
1404+
final parsedSession = Session.fromJson(json.decode(sessionString));
1405+
1406+
expect(parsedSession, equals(expectedSession));
1407+
});
1408+
});
11501409
}

0 commit comments

Comments
 (0)