diff --git a/src/Optimizely/OptimizelyUserContext.php b/src/Optimizely/OptimizelyUserContext.php index 3f176488..c1b50264 100644 --- a/src/Optimizely/OptimizelyUserContext.php +++ b/src/Optimizely/OptimizelyUserContext.php @@ -31,6 +31,11 @@ public function __construct(Optimizely $optimizelyClient, $userId, array $attrib $this->attributes = $attributes; } + protected function copy() + { + return new OptimizelyUserContext($this->optimizelyClient, $this->userId, $this->attributes); + } + public function setAttribute($key, $value) { $this->attributes[$key] = $value; @@ -38,17 +43,17 @@ public function setAttribute($key, $value) public function decide($key, array $options = []) { - return $this->optimizelyClient->decide($this, $key, $options); + return $this->optimizelyClient->decide($this->copy(), $key, $options); } public function decideForKeys(array $keys, array $options = []) { - return $this->optimizelyClient->decideForKeys($this, $keys, $options); + return $this->optimizelyClient->decideForKeys($this->copy(), $keys, $options); } public function decideAll(array $options = []) { - return $this->optimizelyClient->decideAll($this, $options); + return $this->optimizelyClient->decideAll($this->copy(), $options); } public function trackEvent($eventKey, array $eventTags = []) diff --git a/tests/OptimizelyUserContextTests.php b/tests/OptimizelyUserContextTest.php similarity index 90% rename from tests/OptimizelyUserContextTests.php rename to tests/OptimizelyUserContextTest.php index 671b9ae1..c41667b0 100644 --- a/tests/OptimizelyUserContextTests.php +++ b/tests/OptimizelyUserContextTest.php @@ -16,8 +16,6 @@ */ namespace Optimizely\Tests; -require(dirname(__FILE__).'/TestData.php'); - use Exception; use TypeError; @@ -137,6 +135,29 @@ public function testDecideCallsAndReturnsOptimizelyDecideAPI() ); } + public function testDecideResponseUserContextNotEqualToCalledUserContext() + { + $userId = 'test_user'; + $attributes = [ "browser" => "chrome"]; + + $optlyObject = new Optimizely($this->datafile); + + $optUserContext = new OptimizelyUserContext($optlyObject, $userId, $attributes); + $decision = $optUserContext->decide('test_feature', ['DISABLE_DECISION_EVENT', 'ENABLED_FLAGS_ONLY']); + + $this->assertEquals( + $optUserContext->getAttributes(), + $decision->getUserContext()->getAttributes() + ); + + $optUserContext->setAttribute("test_key", "test_value"); + + $this->assertNotEquals( + $optUserContext->getAttributes(), + $decision->getUserContext()->getAttributes() + ); + } + public function testDecideAllCallsAndReturnsOptimizelyDecideAllAPI() { $userId = 'test_user';