diff --git a/src/Optimizely/Config/DatafileProjectConfig.php b/src/Optimizely/Config/DatafileProjectConfig.php index efceebe6..f7dd3251 100644 --- a/src/Optimizely/Config/DatafileProjectConfig.php +++ b/src/Optimizely/Config/DatafileProjectConfig.php @@ -88,6 +88,11 @@ class DatafileProjectConfig implements ProjectConfigInterface */ private $_botFiltering; + /** + * @var string datafile. + */ + private $datafile; + /** * @var string Revision of the datafile. */ @@ -196,6 +201,7 @@ public function __construct($datafile, $logger, $errorHandler) { $supportedVersions = array(self::V2, self::V3, self::V4); $config = json_decode($datafile, true); + $this->datafile = $datafile; $this->_logger = $logger; $this->_errorHandler = $errorHandler; $this->_version = $config['version']; @@ -355,6 +361,14 @@ public static function createProjectConfigFromDatafile($datafile, $skipJsonValid return $config; } + /** + * @return string String representing contents of datafile. + */ + public function toDatafile() + { + return $this->datafile; + } + /** * @return string String representing account ID from the datafile. */ diff --git a/src/Optimizely/Config/ProjectConfigInterface.php b/src/Optimizely/Config/ProjectConfigInterface.php index 4507c0a9..55bc2ba4 100644 --- a/src/Optimizely/Config/ProjectConfigInterface.php +++ b/src/Optimizely/Config/ProjectConfigInterface.php @@ -159,4 +159,11 @@ public function getFeatureVariableFromKey($featureFlagKey, $variableKey); * @return boolean A boolean value that indicates if the experiment is a feature test. */ public function isFeatureExperiment($experimentId); + + /** + * Returns string representation of datafile. + * + * @return string A string value that contains datafile contents. + */ + public function toDatafile(); } diff --git a/src/Optimizely/OptimizelyConfig/OptimizelyConfig.php b/src/Optimizely/OptimizelyConfig/OptimizelyConfig.php index 133f071b..fdd5736c 100644 --- a/src/Optimizely/OptimizelyConfig/OptimizelyConfig.php +++ b/src/Optimizely/OptimizelyConfig/OptimizelyConfig.php @@ -37,11 +37,18 @@ class OptimizelyConfig implements \JsonSerializable */ private $featuresMap; - public function __construct($revision, array $experimentsMap, array $featuresMap) + /** + * @var string Contents of datafile. + */ + private $datafile; + + + public function __construct($revision, array $experimentsMap, array $featuresMap, $datafile = null) { $this->revision = $revision; $this->experimentsMap = $experimentsMap; $this->featuresMap = $featuresMap; + $this->datafile = $datafile; } /** @@ -52,6 +59,14 @@ public function getRevision() return $this->revision; } + /** + * @return string Datafile contents. + */ + public function getDatafile() + { + return $this->datafile; + } + /** * @return array Map of Experiment Keys to OptimizelyExperiments. */ diff --git a/src/Optimizely/OptimizelyConfig/OptimizelyConfigService.php b/src/Optimizely/OptimizelyConfig/OptimizelyConfigService.php index 6032548d..eef1829a 100644 --- a/src/Optimizely/OptimizelyConfig/OptimizelyConfigService.php +++ b/src/Optimizely/OptimizelyConfig/OptimizelyConfigService.php @@ -37,6 +37,11 @@ class OptimizelyConfigService */ private $revision; + /** + * @var string String denoting datafile. + */ + private $datafile; + /** * Map of experiment IDs to FeatureFlags. * @@ -63,6 +68,7 @@ public function __construct(ProjectConfigInterface $projectConfig) $this->experiments = $projectConfig->getAllExperiments(); $this->featureFlags = $projectConfig->getFeatureFlags(); $this->revision = $projectConfig->getRevision(); + $this->datafile = $projectConfig->toDatafile(); $this->createLookupMaps(); } @@ -78,7 +84,8 @@ public function getConfig() return new OptimizelyConfig( $this->revision, $experimentsMaps[0], - $featuresMap + $featuresMap, + $this->datafile ); } diff --git a/tests/ConfigTests/DatafileProjectConfigTest.php b/tests/ConfigTests/DatafileProjectConfigTest.php index 360055dc..d7e72e6b 100644 --- a/tests/ConfigTests/DatafileProjectConfigTest.php +++ b/tests/ConfigTests/DatafileProjectConfigTest.php @@ -719,4 +719,13 @@ public function testIsFeatureExperiment() $this->assertTrue($this->config->isFeatureExperiment($featureExperiment->getId())); $this->assertFalse($this->config->isFeatureExperiment($experiment->getId())); } + + public function testToDatafile() + { + $expectedDatafile = DATAFILE_FOR_OPTIMIZELY_CONFIG; + $this->config = new DatafileProjectConfig($expectedDatafile, $this->loggerMock, $this->errorHandlerMock); + $actualDatafile = $this->config->toDatafile(); + + $this->assertEquals($expectedDatafile, $actualDatafile); + } } diff --git a/tests/OptimizelyConfigTests/OptimizelyConfigServiceTest.php b/tests/OptimizelyConfigTests/OptimizelyConfigServiceTest.php index a64e5032..0a1d5ad8 100644 --- a/tests/OptimizelyConfigTests/OptimizelyConfigServiceTest.php +++ b/tests/OptimizelyConfigTests/OptimizelyConfigServiceTest.php @@ -465,6 +465,16 @@ public function testJsonEncodeofOptimizelyConfig() } }'; - $this->assertEquals(json_encode(json_decode($expectedJSON)), json_encode($response)); + $optimizelyConfig = json_decode($expectedJSON, true); + $optimizelyConfig['datafile'] = DATAFILE_FOR_OPTIMIZELY_CONFIG; + + $this->assertEquals(json_encode($optimizelyConfig), json_encode($response)); + } + + public function testGetDatafile() + { + $expectedDatafile = DATAFILE_FOR_OPTIMIZELY_CONFIG; + $actualDatafile = $this->optConfigService->getConfig()->getDatafile(); + $this->assertEquals($expectedDatafile, $actualDatafile); } } diff --git a/tests/OptimizelyConfigTests/OptimizelyEntitiesTest.php b/tests/OptimizelyConfigTests/OptimizelyEntitiesTest.php index 40b3e3a2..3551af3f 100644 --- a/tests/OptimizelyConfigTests/OptimizelyEntitiesTest.php +++ b/tests/OptimizelyConfigTests/OptimizelyEntitiesTest.php @@ -41,7 +41,8 @@ public function testOptimizelyConfigEntity() $expectedJson = '{ "revision": "20", "experimentsMap" : {"a": "apple"}, - "featuresMap": {"o": "orange"} + "featuresMap": {"o": "orange"}, + "datafile": null }'; $expectedJson = json_encode(json_decode($expectedJson));