diff --git a/src/Optimizely/ProjectConfig.php b/src/Optimizely/ProjectConfig.php index fd172299..4ae69616 100644 --- a/src/Optimizely/ProjectConfig.php +++ b/src/Optimizely/ProjectConfig.php @@ -1,6 +1,6 @@ _logger->log(Logger::ERROR, sprintf('Audience ID "%s" is not in datafile.', $audienceId)); $this->_errorHandler->handleError(new InvalidAudienceException('Provided audience is not in datafile.')); - return new Audience(); + + return null; } /** diff --git a/src/Optimizely/Utils/Validator.php b/src/Optimizely/Utils/Validator.php index 8800a07c..dd6f8eeb 100644 --- a/src/Optimizely/Utils/Validator.php +++ b/src/Optimizely/Utils/Validator.php @@ -1,6 +1,6 @@ getAudience($audienceId); + if ($audience === null) { + return null; + } + return $conditionTreeEvaluator->evaluate($audience->getConditionsList(), $evaluateCustomAttr); }; diff --git a/tests/ProjectConfigTest.php b/tests/ProjectConfigTest.php index b19c7526..82de415f 100644 --- a/tests/ProjectConfigTest.php +++ b/tests/ProjectConfigTest.php @@ -1,6 +1,6 @@ method('handleError') ->with(new InvalidAudienceException('Provided audience is not in datafile.')); - $this->assertEquals(new Audience(), $this->config->getAudience('invalid_id')); + $this->assertNull($this->config->getAudience('invalid_id')); } public function testGetAttributeValidKey() diff --git a/tests/UtilsTests/ValidatorTest.php b/tests/UtilsTests/ValidatorTest.php index b0909a14..be1e9769 100644 --- a/tests/UtilsTests/ValidatorTest.php +++ b/tests/UtilsTests/ValidatorTest.php @@ -1,6 +1,6 @@ loggerMock, new NoOpErrorHandler()); + $experiment = $config->getExperimentFromKey('test_experiment'); + + // Both audience Ids and audience conditions exist. Audience Ids is ignored. + $experiment->setAudienceIds([]); + $experiment->setAudienceConditions(["or", "unknown_audience_id", "7718080042"]); + + // User qualifies for audience with ID "7718080042". + $this->assertTrue( + Validator::isUserInExperiment( + $config, + $experiment, + ['device_type' => 'iPhone', 'location' => 'San Francisco'] + ) + ); + } + // test that isUserInExperiment evaluates simple audience. public function testIsUserInExperimentWithSimpleAudience() {