diff --git a/CHANGELOG.md b/CHANGELOG.md index f4cad75..a5a818d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ ## 0.0.4 - The initial release of TelemetryDeck SDK for Flutter + +## 0.0.3 + +- The initial release of TelemetryDeck SDK for Flutter diff --git a/android/src/main/kotlin/com/telemetrydeck/telemetrydecksdk/TelemetrydecksdkPlugin.kt b/android/src/main/kotlin/com/telemetrydeck/telemetrydecksdk/TelemetrydecksdkPlugin.kt index ead987a..8ec5b31 100644 --- a/android/src/main/kotlin/com/telemetrydeck/telemetrydecksdk/TelemetrydecksdkPlugin.kt +++ b/android/src/main/kotlin/com/telemetrydeck/telemetrydecksdk/TelemetrydecksdkPlugin.kt @@ -31,9 +31,7 @@ class TelemetrydecksdkPlugin: FlutterPlugin, MethodCallHandler { } override fun onMethodCall(call: MethodCall, result: Result) { - if (call.method == "getPlatformVersion") { - result.success("Android ${android.os.Build.VERSION.RELEASE}") - } else if (call.method == "start") { + if (call.method == "start") { nativeInitialize(call, result) } else if (call.method == "stop") { nativeStop(call, result) diff --git a/android/src/test/kotlin/com/telemetrydeck/telemetrydecksdk/TelemetrydecksdkPluginTest.kt b/android/src/test/kotlin/com/telemetrydeck/telemetrydecksdk/TelemetrydecksdkPluginTest.kt deleted file mode 100644 index f0c5e85..0000000 --- a/android/src/test/kotlin/com/telemetrydeck/telemetrydecksdk/TelemetrydecksdkPluginTest.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.telemetrydeck.telemetrydecksdk - -import io.flutter.plugin.common.MethodCall -import io.flutter.plugin.common.MethodChannel -import kotlin.test.Test -import org.mockito.Mockito - -/* - * This demonstrates a simple unit test of the Kotlin portion of this plugin's implementation. - * - * Once you have built the plugin's example app, you can run these tests from the command - * line by running `./gradlew testDebugUnitTest` in the `example/android/` directory, or - * you can run them directly from IDEs that support JUnit such as Android Studio. - */ - -internal class TelemetrydecksdkPluginTest { - @Test - fun onMethodCall_getPlatformVersion_returnsExpectedValue() { - val plugin = TelemetrydecksdkPlugin() - - val call = MethodCall("getPlatformVersion", null) - val mockResult: MethodChannel.Result = Mockito.mock(MethodChannel.Result::class.java) - plugin.onMethodCall(call, mockResult) - - Mockito.verify(mockResult).success("Android " + android.os.Build.VERSION.RELEASE) - } -} diff --git a/example/integration_test/plugin_integration_test.dart b/example/integration_test/plugin_integration_test.dart deleted file mode 100644 index 1527a1f..0000000 --- a/example/integration_test/plugin_integration_test.dart +++ /dev/null @@ -1,25 +0,0 @@ -// This is a basic Flutter integration test. -// -// Since integration tests run in a full Flutter application, they can interact -// with the host side of a plugin implementation, unlike Dart unit tests. -// -// For more information about Flutter integration tests, please see -// https://docs.flutter.dev/cookbook/testing/integration/introduction - - -import 'package:flutter_test/flutter_test.dart'; -import 'package:integration_test/integration_test.dart'; - -import 'package:telemetrydecksdk/telemetrydecksdk.dart'; - -void main() { - IntegrationTestWidgetsFlutterBinding.ensureInitialized(); - - testWidgets('getPlatformVersion test', (WidgetTester tester) async { - final Telemetrydecksdk plugin = Telemetrydecksdk(); - final String? version = await plugin.getPlatformVersion(); - // The version string depends on the host platform running the test, so - // just assert that some non-empty string is returned. - expect(version?.isNotEmpty, true); - }); -} diff --git a/example/ios/RunnerTests/RunnerTests.swift b/example/ios/RunnerTests/RunnerTests.swift index 144693d..6e9632d 100644 --- a/example/ios/RunnerTests/RunnerTests.swift +++ b/example/ios/RunnerTests/RunnerTests.swift @@ -7,20 +7,3 @@ import XCTest // This demonstrates a simple unit test of the Swift portion of this plugin's implementation. // // See https://developer.apple.com/documentation/xctest for more information about using XCTest. - -class RunnerTests: XCTestCase { - - func testGetPlatformVersion() { - let plugin = TelemetrydecksdkPlugin() - - let call = FlutterMethodCall(methodName: "getPlatformVersion", arguments: []) - - let resultExpectation = expectation(description: "result block must be called.") - plugin.handle(call) { result in - XCTAssertEqual(result as! String, "iOS " + UIDevice.current.systemVersion) - resultExpectation.fulfill() - } - waitForExpectations(timeout: 1) - } - -} diff --git a/example/lib/main.dart b/example/lib/main.dart index de8450d..4529d52 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -22,7 +22,6 @@ class MyApp extends StatefulWidget { } class _MyAppState extends State { - String _platformVersion = 'Unknown'; final _telemetrydecksdkPlugin = Telemetrydecksdk(); @override @@ -33,24 +32,10 @@ class _MyAppState extends State { // Platform messages are asynchronous, so we initialize in an async method. Future initPlatformState() async { - String platformVersion; - // Platform messages may fail, so we use a try/catch PlatformException. - // We also handle the message potentially returning null. - try { - platformVersion = await _telemetrydecksdkPlugin.getPlatformVersion() ?? - 'Unknown platform version'; - } on PlatformException { - platformVersion = 'Failed to get platform version.'; - } - // If the widget was removed from the tree while the asynchronous platform // message was in flight, we want to discard the reply rather than calling // setState to update our non-existent appearance. if (!mounted) return; - - setState(() { - _platformVersion = platformVersion; - }); } @override @@ -64,7 +49,7 @@ class _MyAppState extends State { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text('Running on: $_platformVersion\n'), + const Text('Hello !'), const SizedBox( height: 10), // Adds some space between the text and the button diff --git a/example/pubspec.lock b/example/pubspec.lock index 8f1f714..0cc2525 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -213,7 +213,7 @@ packages: path: ".." relative: true source: path - version: "1.0.1" + version: "0.0.3" term_glyph: dependency: transitive description: diff --git a/ios/Classes/TelemetrydecksdkPlugin.swift b/ios/Classes/TelemetrydecksdkPlugin.swift index 7ad22fc..c3c17a7 100644 --- a/ios/Classes/TelemetrydecksdkPlugin.swift +++ b/ios/Classes/TelemetrydecksdkPlugin.swift @@ -11,8 +11,6 @@ public class TelemetrydecksdkPlugin: NSObject, FlutterPlugin { public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { switch call.method { - case "getPlatformVersion": - result("iOS " + UIDevice.current.systemVersion) case "start": nativeInitialize(call, result: result) case "stop": diff --git a/lib/telemetry_provider.dart b/lib/telemetry_provider.dart new file mode 100644 index 0000000..b5f16e4 --- /dev/null +++ b/lib/telemetry_provider.dart @@ -0,0 +1,15 @@ +import 'package:telemetrydecksdk/version_reader.dart'; +import 'package:telemetrydecksdk/versions.dart'; + +class TelemetryProvider { + final versionReader = DartVersionReader(); + + /// Adds Flutter specific payload attributes to outgoing signals before passing them to the native platform API. + /// This method will overwrite the default `telemetryClientVersion`. + Future> enrich(Map? payload) async { + Map result = payload ?? {}; + result['telemetryClientVersion'] = "Flutter $telemetryClientVersion"; + result['dartVersion'] = versionReader.readVersion(); + return result; + } +} diff --git a/lib/telemetrydecksdk.dart b/lib/telemetrydecksdk.dart index a6419e7..432cadd 100644 --- a/lib/telemetrydecksdk.dart +++ b/lib/telemetrydecksdk.dart @@ -1,20 +1,12 @@ import 'dart:async'; -import 'dart:io'; -import 'package:telemetrydecksdk/versions.dart'; +import 'package:telemetrydecksdk/telemetry_provider.dart'; import 'package:telemetrydecksdk/telemetry_manager_configuration.dart'; import 'telemetrydecksdk_platform_interface.dart'; class Telemetrydecksdk { - Future getPlatformVersion() { - return TelemetrydecksdkPlatform.instance.getPlatformVersion(); - } - - String getDartVersion() { - final version = Platform.version; - return version; - } + final telemetryProvider = TelemetryProvider(); static Future start(TelemetryManagerConfiguration configuration) async { await TelemetrydecksdkPlatform.instance.start(configuration); @@ -26,7 +18,7 @@ class Telemetrydecksdk { Future send(String signalType, {String? clientUser, Map? additionalPayload}) async { - var payload = await appendFlutterAttributes(additionalPayload); + var payload = await telemetryProvider.enrich(additionalPayload); await TelemetrydecksdkPlatform.instance .send(signalType, clientUser: clientUser, additionalPayload: payload); } @@ -38,12 +30,4 @@ class Telemetrydecksdk { Future updateDefaultUser(String clientUser) async { await TelemetrydecksdkPlatform.instance.updateDefaultUser(clientUser); } - - Future> appendFlutterAttributes( - Map? payload) async { - Map result = payload ?? {}; - result['telemetryClientVersion'] = "Flutter $telemetryClientVersion"; - result['dartVersion'] = getDartVersion(); - return result; - } } diff --git a/lib/telemetrydecksdk_method_channel.dart b/lib/telemetrydecksdk_method_channel.dart index af6fa1a..6cbb0d0 100644 --- a/lib/telemetrydecksdk_method_channel.dart +++ b/lib/telemetrydecksdk_method_channel.dart @@ -10,13 +10,6 @@ class MethodChannelTelemetrydecksdk extends TelemetrydecksdkPlatform { @visibleForTesting final methodChannel = const MethodChannel('telemetrydecksdk'); - @override - Future getPlatformVersion() async { - final version = - await methodChannel.invokeMethod('getPlatformVersion'); - return version; - } - @override Future start(TelemetryManagerConfiguration configuration) async { await methodChannel.invokeMethod('start', configuration.toMap()); diff --git a/lib/telemetrydecksdk_platform_interface.dart b/lib/telemetrydecksdk_platform_interface.dart index 4bbb4fa..e9c6a3a 100644 --- a/lib/telemetrydecksdk_platform_interface.dart +++ b/lib/telemetrydecksdk_platform_interface.dart @@ -24,10 +24,6 @@ abstract class TelemetrydecksdkPlatform extends PlatformInterface { _instance = instance; } - Future getPlatformVersion() { - throw UnimplementedError('platformVersion() has not been implemented.'); - } - Future start(TelemetryManagerConfiguration configuration) { throw UnimplementedError('start() has not been implemented.'); } diff --git a/lib/version_reader.dart b/lib/version_reader.dart new file mode 100644 index 0000000..09bd0a9 --- /dev/null +++ b/lib/version_reader.dart @@ -0,0 +1,8 @@ +import 'dart:io'; + +class DartVersionReader { + String readVersion() { + final version = Platform.version; + return version.replaceAll("\"", "'"); + } +} diff --git a/test/telemetry_provider_test.dart b/test/telemetry_provider_test.dart new file mode 100644 index 0000000..862d89a --- /dev/null +++ b/test/telemetry_provider_test.dart @@ -0,0 +1,17 @@ +import 'package:telemetrydecksdk/telemetry_provider.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:telemetrydecksdk/versions.dart'; + +void main() { + test('appends flutter sdk telemetry attributes', () async { + final sut = TelemetryProvider(); + + final result = await sut.enrich({}); + // assert the keys 'key1' is present in the result + expect( + result, + containsPair( + 'telemetryClientVersion', "Flutter $telemetryClientVersion")); + expect(result, containsPair('dartVersion', isNotNull)); + }); +} diff --git a/test/telemetrydecksdk_method_channel_test.dart b/test/telemetrydecksdk_method_channel_test.dart index 70a8346..8b13789 100644 --- a/test/telemetrydecksdk_method_channel_test.dart +++ b/test/telemetrydecksdk_method_channel_test.dart @@ -1,27 +1 @@ -import 'package:flutter/services.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:telemetrydecksdk/telemetrydecksdk_method_channel.dart'; -void main() { - TestWidgetsFlutterBinding.ensureInitialized(); - - MethodChannelTelemetrydecksdk platform = MethodChannelTelemetrydecksdk(); - const MethodChannel channel = MethodChannel('telemetrydecksdk'); - - setUp(() { - TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger.setMockMethodCallHandler( - channel, - (MethodCall methodCall) async { - return '42'; - }, - ); - }); - - tearDown(() { - TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger.setMockMethodCallHandler(channel, null); - }); - - test('getPlatformVersion', () async { - expect(await platform.getPlatformVersion(), '42'); - }); -} diff --git a/test/telemetrydecksdk_test.dart b/test/telemetrydecksdk_test.dart index b08e883..012f887 100644 --- a/test/telemetrydecksdk_test.dart +++ b/test/telemetrydecksdk_test.dart @@ -8,9 +8,6 @@ import 'package:plugin_platform_interface/plugin_platform_interface.dart'; class MockTelemetrydecksdkPlatform with MockPlatformInterfaceMixin implements TelemetrydecksdkPlatform { - @override - Future getPlatformVersion() => Future.value('42'); - @override Future start(TelemetryManagerConfiguration configuration) => Future.value(); @@ -38,14 +35,6 @@ void main() { expect(initialPlatform, isInstanceOf()); }); - test('getPlatformVersion', () async { - Telemetrydecksdk telemetrydecksdkPlugin = Telemetrydecksdk(); - MockTelemetrydecksdkPlatform fakePlatform = MockTelemetrydecksdkPlatform(); - TelemetrydecksdkPlatform.instance = fakePlatform; - - expect(await telemetrydecksdkPlugin.getPlatformVersion(), '42'); - }); - test('initialize', () async { MockTelemetrydecksdkPlatform fakePlatform = MockTelemetrydecksdkPlatform(); TelemetrydecksdkPlatform.instance = fakePlatform; diff --git a/test/version_reader_test.dart b/test/version_reader_test.dart new file mode 100644 index 0000000..fda65b1 --- /dev/null +++ b/test/version_reader_test.dart @@ -0,0 +1,10 @@ +import 'package:telemetrydecksdk/version_reader.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + test('returns dart version without double quotes', () async { + final sut = DartVersionReader(); + + expect(sut.readVersion(), isNot(contains('"'))); + }); +}