diff --git a/splitio/lib/splitio.dart b/splitio/lib/splitio.dart index 3db1151..f20b066 100644 --- a/splitio/lib/splitio.dart +++ b/splitio/lib/splitio.dart @@ -121,6 +121,14 @@ class Splitio { return _platform.split(splitName: splitName); } + Future getUserConsent() async { + return _platform.getUserConsent(); + } + + Future setUserConsent(bool enabled) async { + return _platform.setUserConsent(enabled); + } + Future _init() { return _platform.init( apiKey: _sdkKey, diff --git a/splitio/pubspec.yaml b/splitio/pubspec.yaml index 650fcbc..1437b31 100644 --- a/splitio/pubspec.yaml +++ b/splitio/pubspec.yaml @@ -19,9 +19,15 @@ flutter: dependencies: flutter: sdk: flutter - splitio_android: ^0.1.3 - splitio_ios: ^0.1.3 - splitio_platform_interface: ^1.1.0 +# splitio_android: ^0.1.3 + splitio_android: + path: ../splitio_android +# splitio_ios: ^0.1.3 + splitio_ios: + path: ../splitio_ios +# splitio_platform_interface: ^1.1.0 + splitio_platform_interface: + path: ../splitio_platform_interface dev_dependencies: flutter_test: diff --git a/splitio/test/splitio_platform_stub.dart b/splitio/test/splitio_platform_stub.dart index 29f1526..369cc83 100644 --- a/splitio/test/splitio_platform_stub.dart +++ b/splitio/test/splitio_platform_stub.dart @@ -339,4 +339,19 @@ class SplitioPlatformStub return Future.value(true); } + + @override + Future getUserConsent() { + methodName = 'getUserConsent'; + + return Future.value(UserConsent.granted); + } + + @override + Future setUserConsent(bool enabled) { + methodName = 'setUserConsent'; + methodArguments['value'] = enabled; + + return Future.value(null); + } } diff --git a/splitio/test/splitio_test.dart b/splitio/test/splitio_test.dart index ac227f2..87ad6e4 100644 --- a/splitio/test/splitio_test.dart +++ b/splitio/test/splitio_test.dart @@ -101,4 +101,26 @@ void main() { expect(_platform.methodArguments, {'splitName': 'my_split'}); }); }); + + group('userConsent', () { + test('get user consent', () async { + var splitio = Splitio('api-key', 'matching-key'); + splitio.getUserConsent(); + + expect(_platform.methodName, 'getUserConsent'); + }); + + test('set user consent', () async { + var splitio = Splitio('api-key', 'matching-key'); + splitio.setUserConsent(true); + + expect(_platform.methodName, 'setUserConsent'); + expect(_platform.methodArguments, { + 'matchingKey': 'matching-key', + 'apiKey': 'api-key', + 'sdkConfiguration': {}, + 'value': true, + }); + }); + }); } diff --git a/splitio_android/pubspec.yaml b/splitio_android/pubspec.yaml index 33d267c..33684f1 100644 --- a/splitio_android/pubspec.yaml +++ b/splitio_android/pubspec.yaml @@ -19,7 +19,9 @@ flutter: dependencies: flutter: sdk: flutter - splitio_platform_interface: ^1.1.0 +# splitio_platform_interface: ^1.1.0 + splitio_platform_interface: + path: ../splitio_platform_interface dev_dependencies: flutter_test: diff --git a/splitio_ios/pubspec.yaml b/splitio_ios/pubspec.yaml index 4481a13..a2dd2b9 100644 --- a/splitio_ios/pubspec.yaml +++ b/splitio_ios/pubspec.yaml @@ -18,7 +18,9 @@ flutter: dependencies: flutter: sdk: flutter - splitio_platform_interface: ^1.1.0 +# splitio_platform_interface: ^1.1.0 + splitio_platform_interface: + path: ../splitio_platform_interface dev_dependencies: flutter_test: diff --git a/splitio_platform_interface/lib/method_channel_platform.dart b/splitio_platform_interface/lib/method_channel_platform.dart index b499305..8132d28 100644 --- a/splitio_platform_interface/lib/method_channel_platform.dart +++ b/splitio_platform_interface/lib/method_channel_platform.dart @@ -324,6 +324,24 @@ class MethodChannelPlatform extends SplitioPlatform { return _impressionsMethodCallHandler.stream(); } + @override + Future getUserConsent() async { + String invokeMethod = + (await _methodChannel.invokeMethod('getUserConsent')) as String; + if (invokeMethod == 'granted') { + return UserConsent.granted; + } else if (invokeMethod == 'declined') { + return UserConsent.declined; + } else { + return UserConsent.unknown; + } + } + + @override + Future setUserConsent(bool enabled) async { + await _methodChannel.invokeMethod('setUserConsent', {'value': enabled}); + } + String _buildMapKey(String matchingKey, String? bucketingKey) { return '${matchingKey}_$bucketingKey'; } diff --git a/splitio_platform_interface/lib/splitio_platform_interface.dart b/splitio_platform_interface/lib/splitio_platform_interface.dart index 729e001..3e71adb 100644 --- a/splitio_platform_interface/lib/splitio_platform_interface.dart +++ b/splitio_platform_interface/lib/splitio_platform_interface.dart @@ -47,6 +47,14 @@ abstract class _FactoryPlatform { Stream impressionsStream() { throw UnimplementedError(); } + + Future getUserConsent() { + throw UnimplementedError(); + } + + Future setUserConsent(bool enabled) { + throw UnimplementedError(); + } } abstract class _ClientPlatform { diff --git a/splitio_platform_interface/test/method_channel_platform_test.dart b/splitio_platform_interface/test/method_channel_platform_test.dart index 72cb4ed..21ed1e2 100644 --- a/splitio_platform_interface/test/method_channel_platform_test.dart +++ b/splitio_platform_interface/test/method_channel_platform_test.dart @@ -54,6 +54,8 @@ void main() { case 'removeAttribute': case 'clearAttributes': return true; + case 'getUserConsent': + return 'declined'; } return null; }); @@ -372,8 +374,8 @@ void main() { apiKey: 'api-key', matchingKey: 'matching-key', bucketingKey: 'bucketing-key', - sdkConfiguration: - SplitConfiguration(logLevel: SplitLogLevel.debug, streamingEnabled: false)); + sdkConfiguration: SplitConfiguration( + logLevel: SplitLogLevel.debug, streamingEnabled: false)); expect(methodName, 'init'); expect(methodArguments, { 'apiKey': 'api-key', @@ -514,4 +516,27 @@ void main() { 'attributes': {} }); }); + + group('userConsent', () { + test('get user consent', () async { + UserConsent userConsent = await _platform.getUserConsent(); + + expect(methodName, 'getUserConsent'); + expect(userConsent, UserConsent.declined); + }); + + test('set user consent enabled', () { + _platform.setUserConsent(true); + + expect(methodName, 'setUserConsent'); + expect(methodArguments, {'value': true}); + }); + + test('set user consent disabled', () { + _platform.setUserConsent(false); + + expect(methodName, 'setUserConsent'); + expect(methodArguments, {'value': false}); + }); + }); }