import 'package:flutter_test/flutter_test.dart'; import 'package:tmail_ui_user/main/deep_links/deep_link_action_type.dart'; import 'package:tmail_ui_user/main/deep_links/deep_links_manager.dart'; void main() { final deepLinkManager = DeepLinksManager(); group('DeepLinksManager::test', () { group('parseDeepLink::test', () { test('SHOULD returns correct DeepLinkData for valid openApp deep link', () { const url = 'twake://openApp/some-data'; final result = deepLinkManager.parseDeepLink(url); expect(result, isNotNull); expect(result?.actionType, DeepLinkActionType.openApp); }); test('SHOULD returns DeepLinkData with unknown action for unhandled action', () { const url = 'twake://unknownAction/some-data'; final result = deepLinkManager.parseDeepLink(url); expect(result, isNotNull); expect(result?.actionType, DeepLinkActionType.unknown); }); test('SHOULD returns null for malformed URL', () { const url = 'Invalid link: invalid'; final result = deepLinkManager.parseDeepLink(url); expect(result, isNull); }); test('SHOULD returns null for exception during parsing', () { const url = 'twake://malformedurl%'; final result = deepLinkManager.parseDeepLink(url); expect(result, isNull); }); }); group('parseOpenAppDeepLink::test', () { test('SHOULD returns OpenAppDeepLinkData with all valid parameters', () { final uri = Uri.parse( 'twake://openApp?access_token=token123' '&refresh_token=refresh123' '&id_token=id123' '&expires_in=3600' '&username=dXNlcg==' '®istrationUrl=https://registration.url' '&jmapUrl=https://jmap.url', ); final result = deepLinkManager.parseOpenAppDeepLink(uri); expect(result, isNotNull); expect(result?.accessToken, 'token123'); expect(result?.refreshToken, 'refresh123'); expect(result?.idToken, 'id123'); expect(result?.expiresIn, 3600); expect(result?.username, 'user'); expect(result?.registrationUrl, 'https://registration.url'); expect(result?.jmapUrl, 'https://jmap.url'); expect(result?.isValidAuthentication(), isTrue); }); test('SHOULD returns OpenAppDeepLinkData with missing optional parameters', () { final uri = Uri.parse( 'twake://openApp?access_token=token123' '&username=user@example.com' '®istrationUrl=https://registration.url' '&jmapUrl=https://jmap.url', ); final result = deepLinkManager.parseOpenAppDeepLink(uri); expect(result, isNotNull); expect(result?.accessToken, 'token123'); expect(result?.refreshToken, isNull); expect(result?.idToken, isNull); expect(result?.expiresIn, isNull); expect(result?.username, 'user@example.com'); expect(result?.registrationUrl, 'https://registration.url'); expect(result?.jmapUrl, 'https://jmap.url'); expect(result?.isValidAuthentication(), isTrue); }); test('SHOULD returns OpenAppDeepLinkData with invalid expires_in', () { final uri = Uri.parse( 'twake://openApp?access_token=token123' '&expires_in=not_a_number' '®istrationUrl=https://registration.url' '&jmapUrl=https://jmap.url', ); final result = deepLinkManager.parseOpenAppDeepLink(uri); expect(result, isNotNull); expect(result?.expiresIn, isNull); }); test('SHOULD returns OpenAppDeepLinkData with origin username if Base64 decoding fails', () { final uri = Uri.parse( 'twake://openApp?access_token=token123' '&username=invalid_base64' '®istrationUrl=https://registration.url' '&jmapUrl=https://jmap.url', ); final result = deepLinkManager.parseOpenAppDeepLink(uri); expect(result, isNotNull); expect(result?.username, 'invalid_base64'); }); test('SHOULD returns OpenAppDeepLinkData with jmapUrl contains sub-path and port', () { final uri = Uri.parse( 'twake://openApp?access_token=token123' '&refresh_token=refresh123' '&id_token=id123' '&expires_in=3600' '&username=dXNlcg==' '®istrationUrl=https://registration.url' '&jmapUrl=https://jmap.url:1000/jmap', ); final result = deepLinkManager.parseOpenAppDeepLink(uri); expect(result, isNotNull); expect(result?.jmapUrl, 'https://jmap.url:1000/jmap'); }); test('SHOULD returns OpenAppDeepLinkData with registrationUrl contains sub-path and port', () { final uri = Uri.parse( 'twake://openApp?access_token=token123' '&refresh_token=refresh123' '&id_token=id123' '&expires_in=3600' '&username=dXNlcg==' '®istrationUrl=https://registration.url:1000/register' '&jmapUrl=https://jmap.url', ); final result = deepLinkManager.parseOpenAppDeepLink(uri); expect(result, isNotNull); expect(result?.registrationUrl, 'https://registration.url:1000/register'); }); }); }); }