diff --git a/splitio_platform_interface/lib/split_configuration.dart b/splitio_platform_interface/lib/split_configuration.dart index e6a12fc..ffe9a9d 100644 --- a/splitio_platform_interface/lib/split_configuration.dart +++ b/splitio_platform_interface/lib/split_configuration.dart @@ -1,5 +1,6 @@ import 'package:splitio_platform_interface/split_certificate_pinning_configuration.dart'; import 'package:splitio_platform_interface/split_sync_config.dart'; +import 'package:splitio_platform_interface/split_rollout_cache_configuration.dart'; class SplitConfiguration { final Map configurationMap = {}; @@ -74,6 +75,7 @@ class SplitConfiguration { SplitLogLevel? logLevel, int? readyTimeout = 10, CertificatePinningConfiguration? certificatePinningConfiguration, + RolloutCacheConfiguration? rolloutCacheConfiguration, }) { if (featuresRefreshRate != null) { configurationMap['featuresRefreshRate'] = featuresRefreshRate; @@ -186,6 +188,13 @@ class SplitConfiguration { 'pins': certificatePinningConfiguration.pins }; } + + if (rolloutCacheConfiguration != null) { + configurationMap['rolloutCacheConfiguration'] = { + 'expirationDays': rolloutCacheConfiguration.expirationDays, + 'clearOnInit': rolloutCacheConfiguration.clearOnInit + }; + } } } diff --git a/splitio_platform_interface/lib/split_rollout_cache_configuration.dart b/splitio_platform_interface/lib/split_rollout_cache_configuration.dart new file mode 100644 index 0000000..9c2b0f3 --- /dev/null +++ b/splitio_platform_interface/lib/split_rollout_cache_configuration.dart @@ -0,0 +1,16 @@ +class RolloutCacheConfiguration { + + late int _expirationDays; + late bool _clearOnInit; + + int get expirationDays => _expirationDays; + bool get clearOnInit => _clearOnInit; + + RolloutCacheConfiguration({int expirationDays = 10, bool clearOnInit = false}) { + if (expirationDays < 1) { + expirationDays = 10; + } + _expirationDays = expirationDays; + _clearOnInit = clearOnInit; + } +} diff --git a/splitio_platform_interface/lib/split_view.dart b/splitio_platform_interface/lib/split_view.dart index 789daa1..f8e0a30 100644 --- a/splitio_platform_interface/lib/split_view.dart +++ b/splitio_platform_interface/lib/split_view.dart @@ -1,6 +1,17 @@ import 'dart:core'; class SplitView { + + static const String _keyName = 'name'; + static const String _keyTrafficType = 'trafficType'; + static const String _keyKilled = 'killed'; + static const String _keyTreatments = 'treatments'; + static const String _keyChangeNumber = 'changeNumber'; + static const String _keyConfigs = 'configs'; + static const String _keyDefaultTreatment = 'defaultTreatment'; + static const String _keySets = 'sets'; + static const String _keyImpressionsDisabled = 'impressionsDisabled'; + String name; String trafficType; bool killed = false; @@ -9,10 +20,11 @@ class SplitView { Map configs = {}; String defaultTreatment; List sets = []; + bool impressionsDisabled = false; SplitView(this.name, this.trafficType, this.killed, this.treatments, this.changeNumber, this.configs, - [this.defaultTreatment = '', this.sets = const []]); + [this.defaultTreatment = '', this.sets = const [], this.impressionsDisabled = false]); static SplitView? fromEntry(Map? entry) { if (entry == null || entry.isEmpty) { @@ -20,41 +32,47 @@ class SplitView { } final Map mappedConfig = {}; - entry['configs']?.entries.forEach((MapEntry entry) => { + entry[_keyConfigs]?.entries.forEach((MapEntry entry) => { mappedConfig.addAll({entry.key.toString(): entry.value.toString()}) }); - if (entry['treatments'] == null) { - entry['treatments'] = entry['treatments'] ?? []; + if (entry[_keyTreatments] == null) { + entry[_keyTreatments] = entry[_keyTreatments] ?? []; + } + + if (entry[_keySets] == null) { + entry[_keySets] = []; } - if (entry['sets'] == null) { - entry['sets'] = []; + if (entry[_keyImpressionsDisabled] == null) { + entry[_keyImpressionsDisabled] = false; } return SplitView( - entry['name'], - entry['trafficType'], - entry['killed'], - (entry['treatments'] as List).map((el) => el as String).toList(), - entry['changeNumber'], + entry[_keyName], + entry[_keyTrafficType], + entry[_keyKilled], + (entry[_keyTreatments] as List).map((el) => el as String).toList(), + entry[_keyChangeNumber], mappedConfig, - entry['defaultTreatment'] ?? '', - (entry['sets'] as List).map((el) => el as String).toList() + entry[_keyDefaultTreatment] ?? '', + (entry[_keySets] as List).map((el) => el as String).toList(), + entry[_keyImpressionsDisabled] ?? false ); } @override String toString() { return '''SplitView = { - name: $name, - trafficType: $trafficType, - killed: $killed, - treatments: ${treatments.toString()}, - changeNumber: $changeNumber, - config: $configs, - defaultTreatment: $defaultTreatment, - sets: ${sets.toString()} + $_keyName: $name, + $_keyTrafficType: $trafficType, + $_keyKilled: $killed, + $_keyTreatments: ${treatments.toString()}, + $_keyChangeNumber: $changeNumber, + $_keyConfigs: $configs, + $_keyDefaultTreatment: $defaultTreatment, + $_keySets: ${sets.toString()}, + $_keyImpressionsDisabled: $impressionsDisabled }'''; } } diff --git a/splitio_platform_interface/test/rollout_cache_configuration_test.dart b/splitio_platform_interface/test/rollout_cache_configuration_test.dart new file mode 100644 index 0000000..c7c3306 --- /dev/null +++ b/splitio_platform_interface/test/rollout_cache_configuration_test.dart @@ -0,0 +1,23 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:splitio_platform_interface/split_rollout_cache_configuration.dart'; + +void main() { + test('negative expirationDays defaults to 10', () { + var config = RolloutCacheConfiguration(expirationDays: -1); + + expect(config.expirationDays, 10); + }); + + test('zero expirationDays defaults to 10', () { + var config = RolloutCacheConfiguration(expirationDays: 0); + + expect(config.expirationDays, 10); + }); + + test('default values', () { + var config = RolloutCacheConfiguration(); + + expect(config.expirationDays, 10); + expect(config.clearOnInit, false); + }); +} \ No newline at end of file diff --git a/splitio_platform_interface/test/split_view_test.dart b/splitio_platform_interface/test/split_view_test.dart index 9a5aee1..a45f6eb 100644 --- a/splitio_platform_interface/test/split_view_test.dart +++ b/splitio_platform_interface/test/split_view_test.dart @@ -24,6 +24,7 @@ void main() { 'trafficType': 'default', 'defaultTreatment': 'on', 'sets': ['set1', 'set2'], + 'impressionsDisabled': true, }); expect(splitView?.name, 'my_split'); @@ -34,5 +35,6 @@ void main() { expect(splitView?.trafficType, 'default'); expect(splitView?.defaultTreatment, 'on'); expect(splitView?.sets, ['set1', 'set2']); + expect(splitView?.impressionsDisabled, true); }); } diff --git a/splitio_platform_interface/test/splitio_configuration_test.dart b/splitio_platform_interface/test/splitio_configuration_test.dart index a98d9ce..64b758c 100644 --- a/splitio_platform_interface/test/splitio_configuration_test.dart +++ b/splitio_platform_interface/test/splitio_configuration_test.dart @@ -1,6 +1,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:splitio_platform_interface/split_certificate_pinning_configuration.dart'; import 'package:splitio_platform_interface/split_configuration.dart'; +import 'package:splitio_platform_interface/split_rollout_cache_configuration.dart'; import 'package:splitio_platform_interface/split_sync_config.dart'; void main() { @@ -34,7 +35,8 @@ void main() { certificatePinningConfiguration: CertificatePinningConfiguration() .addPin('host1', 'pin1') .addPin('host2', 'pin3') - .addPin('host1', 'pin2')); + .addPin('host1', 'pin2'), + rolloutCacheConfiguration: RolloutCacheConfiguration(expirationDays: 15, clearOnInit: true)); expect(config.configurationMap['eventFlushInterval'], 2000); expect(config.configurationMap['eventsPerPush'], 300); @@ -71,6 +73,8 @@ void main() { 'host1': ['pin1', 'pin2'], 'host2': ['pin3'] }); + expect(config.configurationMap['rolloutCacheConfiguration']['expirationDays'], 15); + expect(config.configurationMap['rolloutCacheConfiguration']['clearOnInit'], true); }); test('no special values leaves map empty', () async {