diff --git a/core/pubspec.lock b/core/pubspec.lock index 4f8ae6a18..65cc6eb53 100644 --- a/core/pubspec.lock +++ b/core/pubspec.lock @@ -1,6 +1,22 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a + url: "https://pub.dev" + source: hosted + version: "61.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 + url: "https://pub.dev" + source: hosted + version: "5.13.0" archive: dependency: transitive description: @@ -49,6 +65,54 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + build: + dependency: transitive + description: + name: build + sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" + url: "https://pub.dev" + source: hosted + version: "2.3.1" + build_config: + dependency: transitive + description: + name: build_config + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" + source: hosted + version: "1.1.1" + build_daemon: + dependency: transitive + description: + name: build_daemon + sha256: "757153e5d9cd88253cb13f28c2fb55a537dc31fefd98137549895b5beb7c6169" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + build_runner: + dependency: "direct dev" + description: + name: build_runner + sha256: b0a8a7b8a76c493e85f1b84bffa0588859a06197863dba8c9036b15581fd9727 + url: "https://pub.dev" + source: hosted + version: "2.3.3" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + sha256: "0671ad4162ed510b70d0eb4ad6354c249f8429cab4ae7a4cec86bbc2886eb76e" + url: "https://pub.dev" + source: hosted + version: "7.2.7+1" built_collection: dependency: "direct main" description: @@ -57,6 +121,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb + url: "https://pub.dev" + source: hosted + version: "8.9.2" characters: dependency: transitive description: @@ -73,6 +145,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.1" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" clock: dependency: transitive description: @@ -81,6 +161,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 + url: "https://pub.dev" + source: hosted + version: "4.10.0" collection: dependency: "direct main" description: @@ -89,6 +177,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.18.0" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" cross_file: dependency: transitive description: @@ -121,6 +217,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.6" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: "1efa911ca7086affd35f463ca2fc1799584fb6aa89883cf0af8e3664d6a02d55" + url: "https://pub.dev" + source: hosted + version: "2.3.2" dartz: dependency: "direct main" description: @@ -185,6 +289,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" + source: hosted + version: "1.1.0" fk_user_agent: dependency: "direct main" description: @@ -392,6 +504,14 @@ packages: description: flutter source: sdk version: "0.0.0" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + url: "https://pub.dev" + source: hosted + version: "3.2.0" get: dependency: "direct main" description: @@ -400,6 +520,22 @@ packages: url: "https://pub.dev" source: hosted version: "4.6.6" + glob: + dependency: transitive + description: + name: glob + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + graphs: + dependency: transitive + description: + name: graphs + sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" + url: "https://pub.dev" + source: hosted + version: "2.3.2" html: dependency: "direct main" description: @@ -416,6 +552,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" + source: hosted + version: "3.2.1" http_parser: dependency: "direct main" description: @@ -440,6 +584,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.19.0" + io: + dependency: transitive + description: + name: io + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" + source: hosted + version: "1.0.4" js: dependency: transitive description: @@ -448,6 +600,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.7" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://pub.dev" + source: hosted + version: "4.9.0" leak_tracker: dependency: transitive description: @@ -488,6 +648,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + logging: + dependency: transitive + description: + name: logging + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + url: "https://pub.dev" + source: hosted + version: "1.2.0" matcher: dependency: transitive description: @@ -512,6 +680,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.12.0" + mime: + dependency: transitive + description: + name: mime + sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" + url: "https://pub.dev" + source: hosted + version: "1.0.5" + mockito: + dependency: "direct dev" + description: + name: mockito + sha256: "6841eed20a7befac0ce07df8116c8b8233ed1f4486a7647c7fc5a02ae6163917" + url: "https://pub.dev" + source: hosted + version: "5.4.4" + package_config: + dependency: transitive + description: + name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" package_info_plus: dependency: "direct main" description: @@ -664,6 +856,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.10.1+2" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" printing: dependency: "direct main" description: @@ -672,6 +872,22 @@ packages: url: "https://pub.dev" source: hosted version: "5.12.0" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 + url: "https://pub.dev" + source: hosted + version: "1.3.0" qr: dependency: transitive description: @@ -680,11 +896,35 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.1" + shelf: + dependency: transitive + description: + name: shelf + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 + url: "https://pub.dev" + source: hosted + version: "1.4.1" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" + url: "https://pub.dev" + source: hosted + version: "1.0.4" sky_engine: dependency: transitive description: flutter source: sdk version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" + url: "https://pub.dev" + source: hosted + version: "1.5.0" source_span: dependency: transitive description: @@ -709,6 +949,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.2" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" string_scanner: dependency: transitive description: @@ -733,6 +981,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.0" + timing: + dependency: transitive + description: + name: timing + sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + url: "https://pub.dev" + source: hosted + version: "1.0.1" typed_data: dependency: transitive description: @@ -861,6 +1117,14 @@ packages: url: "https://pub.dev" source: hosted version: "14.2.1" + watcher: + dependency: transitive + description: + name: watcher + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" web: dependency: transitive description: @@ -869,6 +1133,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.3.0" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + url: "https://pub.dev" + source: hosted + version: "2.4.0" win32: dependency: transitive description: @@ -893,6 +1165,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.4.2" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" sdks: - dart: ">=3.3.0 <4.0.0" + dart: ">=3.4.0 <4.0.0" flutter: ">=3.20.0-7.0.pre.48" diff --git a/core/pubspec.yaml b/core/pubspec.yaml index 619295679..53f3d8390 100644 --- a/core/pubspec.yaml +++ b/core/pubspec.yaml @@ -88,6 +88,10 @@ dev_dependencies: path_provider_platform_interface: 2.1.1 plugin_platform_interface: 2.1.8 + + build_runner: 2.3.3 + + mockito: 5.4.4 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/core/test/utils/application_manager_test.dart b/core/test/utils/application_manager_test.dart new file mode 100644 index 000000000..5eddbd545 --- /dev/null +++ b/core/test/utils/application_manager_test.dart @@ -0,0 +1,131 @@ +import 'package:core/utils/application_manager.dart'; +import 'package:core/utils/platform_info.dart'; +import 'package:device_info_plus/device_info_plus.dart'; +import 'package:fk_user_agent/fk_user_agent.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; + +import 'application_manager_test.mocks.dart'; + +@GenerateNiceMocks([ + MockSpec() +]) +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + late MockDeviceInfoPlugin mockDeviceInfoPlugin; + late ApplicationManager applicationManager; + + setUp(() { + mockDeviceInfoPlugin = MockDeviceInfoPlugin(); + applicationManager = ApplicationManager(mockDeviceInfoPlugin); + }); + + group('ApplicationManager::getUserAgent test', () { + test('WHEN platform is Web THEN getUserAgent should be return user agent for web', () async { + const webUserAgent = 'User-Agent-Twake-Mail-Web'; + + PlatformInfo.isTestingForWeb = true; + + when(mockDeviceInfoPlugin.webBrowserInfo) + .thenAnswer((_) async => WebBrowserInfo( + userAgent: webUserAgent, + appCodeName: '', + appName: '', + appVersion: '', + deviceMemory: null, + language: '', + languages: [], + platform: '', + product: '', + productSub: '', + vendor: '', + vendorSub: '', + maxTouchPoints: null, + hardwareConcurrency: null, + )); + + final userAgent = await applicationManager.getUserAgent(); + + expect(userAgent, webUserAgent); + + PlatformInfo.isTestingForWeb = false; + }); + + test('WHEN platform is Android THEN getUserAgent should be return user agent for Android', () async { + debugDefaultTargetPlatformOverride = TargetPlatform.android; + + const androidUserAgent = 'User-Agent-Twake-Mail-Android'; + + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger.setMockMethodCallHandler( + const MethodChannel('fk_user_agent'), + (message) async { + if (message.method == 'getProperties') { + return { + 'userAgent': androidUserAgent + }; + } + return null; + } + ); + + await FkUserAgent.init(); + + final userAgent = await applicationManager.getUserAgent(); + + expect(userAgent, androidUserAgent); + + debugDefaultTargetPlatformOverride = null; + FkUserAgent.release(); + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger.setMockMethodCallHandler( + const MethodChannel('fk_user_agent'), + null); + }); + + test('WHEN platform is Web\n' + 'AND mockDeviceInfoPlugin.webBrowserInfo throw exception\n' + 'THEN getUserAgent should be return empty string', + () async { + PlatformInfo.isTestingForWeb = true; + + when(mockDeviceInfoPlugin.webBrowserInfo).thenThrow(Exception('Failed to get web browser info')); + + final userAgent = await applicationManager.getUserAgent(); + + expect(userAgent, ''); + + PlatformInfo.isTestingForWeb = false; + }); + + test('WHEN platform is Android\n' + 'AND FkUserAgent.userAgent return empty string\n' + 'THEN getUserAgent should be return empty string', + () async { + debugDefaultTargetPlatformOverride = TargetPlatform.android; + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger.setMockMethodCallHandler( + const MethodChannel('fk_user_agent'), + (message) async { + if (message.method == 'getProperties') { + return {}; + } + return null; + } + ); + + await FkUserAgent.init(); + + final userAgent = await applicationManager.getUserAgent(); + + expect(userAgent, ''); + + debugDefaultTargetPlatformOverride = null; + FkUserAgent.release(); + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger.setMockMethodCallHandler( + const MethodChannel('fk_user_agent'), + null); + }); + }); +} diff --git a/scripts/prebuild.sh b/scripts/prebuild.sh index 0b2a7b121..5104c75d6 100755 --- a/scripts/prebuild.sh +++ b/scripts/prebuild.sh @@ -5,7 +5,7 @@ set -e set -x cd core -flutter pub get +flutter pub get && dart run build_runner build --delete-conflicting-outputs ## Install necessary pods # cd ../ios