@@ -7,6 +7,7 @@ import 'package:jmap_dart_client/jmap/core/account/account.dart';
7
7
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart' ;
8
8
import 'package:jmap_dart_client/jmap/core/capability/core_capability.dart' ;
9
9
import 'package:jmap_dart_client/jmap/core/capability/default_capability.dart' ;
10
+ import 'package:jmap_dart_client/jmap/core/capability/empty_capability.dart' ;
10
11
import 'package:jmap_dart_client/jmap/core/capability/mail_capability.dart' ;
11
12
import 'package:jmap_dart_client/jmap/core/capability/mdn_capability.dart' ;
12
13
import 'package:jmap_dart_client/jmap/core/capability/submission_capability.dart' ;
@@ -845,4 +846,141 @@ void main() {
845
846
expect (parsedSession.capabilities[TestCapability .testCapabilityIdentifier], equals (testCapability));
846
847
});
847
848
});
849
+
850
+ group ('get session with empty capability' , () {
851
+ test ('get should ignore parsing empty capability properties' , () {
852
+ final sessionString = '''{
853
+ "capabilities": {
854
+ "urn:ietf:params:jmap:submission": {
855
+ "maxDelayedSend": 0,
856
+ "submissionExtensions": []
857
+ },
858
+ "urn:ietf:params:jmap:core": {
859
+ "maxSizeUpload": 20971520,
860
+ "maxConcurrentUpload": 4,
861
+ "maxSizeRequest": 10000000,
862
+ "maxConcurrentRequests": 4,
863
+ "maxCallsInRequest": 16,
864
+ "maxObjectsInGet": 500,
865
+ "maxObjectsInSet": 500,
866
+ "collationAlgorithms": [
867
+ "i;unicode-casemap"
868
+ ]
869
+ },
870
+ "urn:ietf:params:jmap:mail": {}
871
+ },
872
+ "accounts": {
873
+ "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6": {
874
+
875
+ "isPersonal": true,
876
+ "isReadOnly": false,
877
+ "accountCapabilities": {
878
+ "urn:ietf:params:jmap:submission": {
879
+ "maxDelayedSend": 0,
880
+ "submissionExtensions": []
881
+ },
882
+ "urn:ietf:params:jmap:core": {
883
+ "maxSizeUpload": 20971520,
884
+ "maxConcurrentUpload": 4,
885
+ "maxSizeRequest": 10000000,
886
+ "maxConcurrentRequests": 4,
887
+ "maxCallsInRequest": 16,
888
+ "maxObjectsInGet": 500,
889
+ "maxObjectsInSet": 500,
890
+ "collationAlgorithms": [
891
+ "i;unicode-casemap"
892
+ ]
893
+ },
894
+ "urn:ietf:params:jmap:mail": {
895
+ "maxMailboxesPerEmail": 10000000,
896
+ "maxMailboxDepth": null,
897
+ "maxSizeMailboxName": 200,
898
+ "maxSizeAttachmentsPerEmail": 20000000,
899
+ "emailQuerySortOptions": [
900
+ "receivedAt",
901
+ "sentAt",
902
+ "size",
903
+ "from",
904
+ "to",
905
+ "subject"
906
+ ],
907
+ "mayCreateTopLevelMailbox": true
908
+ }
909
+ }
910
+ }
911
+ },
912
+ "primaryAccounts": {
913
+ "urn:ietf:params:jmap:submission": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
914
+ "urn:ietf:params:jmap:core": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
915
+ "urn:ietf:params:jmap:mail": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6"
916
+ },
917
+
918
+ "apiUrl": "http://domain.com/jmap",
919
+ "downloadUrl": "http://domain.com/download/{accountId}/{blobId}/?type={type}&name={name}",
920
+ "uploadUrl": "http://domain.com/upload/{accountId}",
921
+ "eventSourceUrl": "http://domain.com/eventSource?types={types}&closeAfter={closeafter}&ping={ping}",
922
+ "state": "2c9f1b12-b35a-43e6-9af2-0106fb53a943"
923
+ }''' ;
924
+
925
+ final Session expectedSession = Session (
926
+ {
927
+ CapabilityIdentifier .jmapSubmission: SubmissionCapability (UnsignedInt (0 ), Set ()),
928
+ CapabilityIdentifier .jmapCore: CoreCapability (
929
+ UnsignedInt (20971520 ),
930
+ UnsignedInt (4 ),
931
+ UnsignedInt (10000000 ),
932
+ UnsignedInt (4 ),
933
+ UnsignedInt (16 ),
934
+ UnsignedInt (500 ),
935
+ UnsignedInt (500 ),
936
+ {CollationIdentifier ("i;unicode-casemap" )}
937
+ ),
938
+ CapabilityIdentifier .jmapMail: EmptyCapability (),
939
+ },
940
+ {
941
+ AccountId (Id ('29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6' )): Account (
942
+
943
+ true ,
944
+ false ,
945
+ {
946
+ CapabilityIdentifier .jmapSubmission: SubmissionCapability (UnsignedInt (0 ), Set ()),
947
+ CapabilityIdentifier .jmapCore: CoreCapability (
948
+ UnsignedInt (20971520 ),
949
+ UnsignedInt (4 ),
950
+ UnsignedInt (10000000 ),
951
+ UnsignedInt (4 ),
952
+ UnsignedInt (16 ),
953
+ UnsignedInt (500 ),
954
+ UnsignedInt (500 ),
955
+ {CollationIdentifier ("i;unicode-casemap" )}
956
+ ),
957
+ CapabilityIdentifier .jmapMail: MailCapability (
958
+ UnsignedInt (10000000 ),
959
+ null ,
960
+ UnsignedInt (200 ),
961
+ UnsignedInt (20000000 ),
962
+ {"receivedAt" , "sentAt" , "size" , "from" , "to" , "subject" },
963
+ true
964
+ ),
965
+ }
966
+ )
967
+ },
968
+ {
969
+ CapabilityIdentifier .jmapSubmission: AccountId (Id ('29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6' )),
970
+ CapabilityIdentifier .jmapCore: AccountId (Id ('29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6' )),
971
+ CapabilityIdentifier .jmapMail: AccountId (Id ('29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6' )),
972
+ },
973
+
974
+ Uri .parse ('http://domain.com/jmap' ),
975
+ Uri .parse ('http://domain.com/download/{accountId}/{blobId}/?type={type}&name={name}' ),
976
+ Uri .parse ('http://domain.com/upload/{accountId}' ),
977
+ Uri .parse ('http://domain.com/eventSource?types={types}&closeAfter={closeafter}&ping={ping}' ),
978
+ State ('2c9f1b12-b35a-43e6-9af2-0106fb53a943' )
979
+ );
980
+
981
+ final parsedSession = Session .fromJson (json.decode (sessionString));
982
+
983
+ expect (parsedSession, equals (expectedSession));
984
+ });
985
+ });
848
986
}
0 commit comments