diff --git a/splitio_platform_interface/lib/split_configuration.dart b/splitio_platform_interface/lib/split_configuration.dart index 1d54fdd..4a0400a 100644 --- a/splitio_platform_interface/lib/split_configuration.dart +++ b/splitio_platform_interface/lib/split_configuration.dart @@ -1,4 +1,5 @@ import 'package:splitio_platform_interface/split_certificate_pinning_configuration.dart'; +import 'package:splitio_platform_interface/split_fallback_treatments_configuration.dart'; import 'package:splitio_platform_interface/split_sync_config.dart'; import 'package:splitio_platform_interface/split_rollout_cache_configuration.dart'; @@ -48,6 +49,10 @@ class SplitConfiguration { /// [readyTimeout] Maximum amount of time in seconds to wait before firing the SDK_READY_TIMED_OUT event. Defaults to 10 seconds. /// /// [certificatePinningConfiguration] Certificate pinning configuration. Pins need to have the format of a base64 SHA-256 or base64 SHA-1 hashes of the SPKI (ex.: "sha256/7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y="). Not supported in Web. + /// + /// [rolloutCacheConfiguration] Rollout cache configuration. + /// + /// [fallbackTreatmentsConfiguration] Fallback treatments configuration. SplitConfiguration({ int? featuresRefreshRate, int? segmentsRefreshRate, @@ -76,6 +81,7 @@ class SplitConfiguration { int? readyTimeout = 10, CertificatePinningConfiguration? certificatePinningConfiguration, RolloutCacheConfiguration? rolloutCacheConfiguration, + FallbackTreatmentsConfiguration? fallbackTreatmentsConfiguration, }) { if (featuresRefreshRate != null) { configurationMap['featuresRefreshRate'] = featuresRefreshRate; @@ -195,6 +201,13 @@ class SplitConfiguration { 'clearOnInit': rolloutCacheConfiguration.clearOnInit }; } + + if (fallbackTreatmentsConfiguration != null) { + configurationMap['fallbackTreatmentsConfiguration'] = { + 'global': fallbackTreatmentsConfiguration.global, + 'byFlag': fallbackTreatmentsConfiguration.byFlag + }; + } } } diff --git a/splitio_platform_interface/lib/split_fallback_treatments_configuration.dart b/splitio_platform_interface/lib/split_fallback_treatments_configuration.dart new file mode 100644 index 0000000..53abefa --- /dev/null +++ b/splitio_platform_interface/lib/split_fallback_treatments_configuration.dart @@ -0,0 +1,18 @@ +import 'package:splitio_platform_interface/split_result.dart'; + +class FallbackTreatmentsConfiguration { + late Map? _global; + late Map>? _byFlag; + + Map? get global => _global; + Map>? get byFlag => _byFlag; + + FallbackTreatmentsConfiguration( + {SplitResult? global, Map? byFlag}) { + _global = global != null + ? {'treatment': global.treatment, 'config': global.config} + : null; + _byFlag = byFlag?.map((key, value) => + MapEntry(key, {'treatment': value.treatment, 'config': value.config})); + } +} diff --git a/splitio_platform_interface/test/split_fallback_treatments_configuration_test.dart b/splitio_platform_interface/test/split_fallback_treatments_configuration_test.dart new file mode 100644 index 0000000..b520b56 --- /dev/null +++ b/splitio_platform_interface/test/split_fallback_treatments_configuration_test.dart @@ -0,0 +1,23 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:splitio_platform_interface/split_fallback_treatments_configuration.dart'; +import 'package:splitio_platform_interface/split_result.dart'; + +void main() { + test('global and by flag fallback treatments', () { + var config = FallbackTreatmentsConfiguration(global: const SplitResult('custom-treatment', null)); + + expect(config.global, equals({'treatment': 'custom-treatment', 'config': null})); + expect(config.byFlag, null); + + config = FallbackTreatmentsConfiguration(byFlag: {'flag1': const SplitResult('custom-treatment', 'custom-config')}); + expect(config.byFlag, equals({'flag1': {'treatment': 'custom-treatment', 'config': 'custom-config'}})); + expect(config.global, null); + }); + + test('default values', () { + var config = FallbackTreatmentsConfiguration(); + + expect(config.global, null); + expect(config.byFlag, null); + }); +} \ No newline at end of file diff --git a/splitio_platform_interface/test/splitio_configuration_test.dart b/splitio_platform_interface/test/splitio_configuration_test.dart index 64b758c..0f740d4 100644 --- a/splitio_platform_interface/test/splitio_configuration_test.dart +++ b/splitio_platform_interface/test/splitio_configuration_test.dart @@ -1,6 +1,8 @@ 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_fallback_treatments_configuration.dart'; +import 'package:splitio_platform_interface/split_result.dart'; import 'package:splitio_platform_interface/split_rollout_cache_configuration.dart'; import 'package:splitio_platform_interface/split_sync_config.dart'; @@ -36,7 +38,8 @@ void main() { .addPin('host1', 'pin1') .addPin('host2', 'pin3') .addPin('host1', 'pin2'), - rolloutCacheConfiguration: RolloutCacheConfiguration(expirationDays: 15, clearOnInit: true)); + rolloutCacheConfiguration: RolloutCacheConfiguration(expirationDays: 15, clearOnInit: true), + fallbackTreatmentsConfiguration: FallbackTreatmentsConfiguration(global: const SplitResult('custom-treatment', null))); expect(config.configurationMap['eventFlushInterval'], 2000); expect(config.configurationMap['eventsPerPush'], 300); @@ -75,6 +78,8 @@ void main() { }); expect(config.configurationMap['rolloutCacheConfiguration']['expirationDays'], 15); expect(config.configurationMap['rolloutCacheConfiguration']['clearOnInit'], true); + expect(config.configurationMap['fallbackTreatmentsConfiguration']['global'], equals({'treatment': 'custom-treatment', 'config': null})); + expect(config.configurationMap['fallbackTreatmentsConfiguration']['byFlag'], null); }); test('no special values leaves map empty', () async {