diff --git a/lib/features/home/domain/extensions/session_extensions.dart b/lib/features/home/domain/extensions/session_extensions.dart index f0bab07f9..e27b1b790 100644 --- a/lib/features/home/domain/extensions/session_extensions.dart +++ b/lib/features/home/domain/extensions/session_extensions.dart @@ -10,6 +10,7 @@ import 'package:jmap_dart_client/http/converter/state_converter.dart'; import 'package:jmap_dart_client/http/converter/user_name_converter.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart'; +import 'package:jmap_dart_client/jmap/core/capability/default_capability.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; import 'package:model/model.dart'; @@ -84,12 +85,26 @@ extension SessionExtensions on Session { ContactSupportCapability? getContactSupportCapability(AccountId accountId) { try { - final contactSupportCapability = getCapabilityProperties( - accountId, - linagoraContactSupportCapability, - ); - log('SessionExtensions::getContactSupportCapability:contactSupportCapability = $contactSupportCapability'); - return contactSupportCapability; + final contactSupportCapability = getCapabilityProperties(accountId, linagoraContactSupportCapability); + if (contactSupportCapability != null) { + if (contactSupportCapability != ContactSupportCapability(httpLink: null, supportMailAddress: null)) { + log('SessionExtensions::getContactSupportCapability:contactSupportCapability = $contactSupportCapability'); + return contactSupportCapability; + } else { + log('SessionExtensions::getContactSupportCapability:contactSupportCapability = null'); + return null; + } + } else { + final defaultCapability = getCapabilityProperties(accountId, linagoraContactSupportCapability); + if (defaultCapability != null && defaultCapability != DefaultCapability({})) { + final contactSupportCapability = ContactSupportCapability.deserialize(defaultCapability.properties!); + log('SessionExtensions::getContactSupportCapability:contactSupportCapability = $contactSupportCapability'); + return contactSupportCapability; + } else { + log('SessionExtensions::getContactSupportCapability:contactSupportCapability = null'); + return null; + } + } } catch (e) { logError('SessionExtensions::getContactSupportCapability():[Exception] $e'); return null; diff --git a/test/features/session/session_extensions_test.dart b/test/features/session/session_extensions_test.dart index abacfc00c..953fb9c96 100644 --- a/test/features/session/session_extensions_test.dart +++ b/test/features/session/session_extensions_test.dart @@ -1,6 +1,7 @@ import 'package:contact/contact_module.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:jmap_dart_client/jmap/core/account/account.dart'; +import 'package:jmap_dart_client/jmap/core/capability/default_capability.dart'; import 'package:jmap_dart_client/jmap/core/capability/empty_capability.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/state.dart'; @@ -142,7 +143,46 @@ void main() { expect(result?.httpLink, equals(contactSupportCapability.httpLink)); }); - test('SHOULD return null WHEN ContactSupportCapability is not available', () { + test('SHOULD return ContactSupportCapability WHEN DefaultCapability is available ', () { + // Arrange + const supportMailAddress = 'contact.support@example.com'; + const httpLink = 'https://contact.support'; + final defaultCapability = DefaultCapability({ + 'supportMailAddress': supportMailAddress, + 'httpLink': httpLink, + }); + final session = Session( + { + SessionExtensions.linagoraContactSupportCapability: defaultCapability + }, + { + AccountFixtures.aliceAccountId: Account( + AccountName('Alice'), + true, + false, + { + SessionExtensions.linagoraContactSupportCapability: defaultCapability + }, + ) + }, + {}, + UserName(''), + Uri(), + Uri(), + Uri(), + Uri(), + State(''), + ); + + // Act + final result = session.getContactSupportCapability(AccountFixtures.aliceAccountId); + + // Assert + expect(result?.supportMailAddress, equals(supportMailAddress)); + expect(result?.httpLink, equals(httpLink)); + }); + + test('SHOULD return null WHEN ContactSupportCapability is not available (EmptyCapability)', () { // Arrange final session = Session( { @@ -174,6 +214,70 @@ void main() { expect(result, isNull); }); + test('SHOULD return null WHEN ContactSupportCapability is not available (empty ContactSupportCapability)', () { + // Arrange + final session = Session( + { + SessionExtensions.linagoraContactSupportCapability: ContactSupportCapability() + }, + { + AccountFixtures.aliceAccountId: Account( + AccountName('Alice'), + true, + false, + { + SessionExtensions.linagoraContactSupportCapability: EmptyCapability() + }, + ) + }, + {}, + UserName(''), + Uri(), + Uri(), + Uri(), + Uri(), + State(''), + ); + + // Act + final result = session.getContactSupportCapability(AccountFixtures.aliceAccountId); + + // Assert + expect(result, isNull); + }); + + test('SHOULD return null WHEN ContactSupportCapability is not available (empty DefaultCapability)', () { + // Arrange + final session = Session( + { + SessionExtensions.linagoraContactSupportCapability: DefaultCapability({}) + }, + { + AccountFixtures.aliceAccountId: Account( + AccountName('Alice'), + true, + false, + { + SessionExtensions.linagoraContactSupportCapability: EmptyCapability() + }, + ) + }, + {}, + UserName(''), + Uri(), + Uri(), + Uri(), + Uri(), + State(''), + ); + + // Act + final result = session.getContactSupportCapability(AccountFixtures.aliceAccountId); + + // Assert + expect(result, isNull); + }); + test('SHOULD return null WHEN ContactSupportCapability is not supported', () { // Arrange final session = Session(