From 5a9551868703edab9ec2e4cb7cab64def6f51d96 Mon Sep 17 00:00:00 2001 From: Colin Henwood Date: Wed, 27 Jul 2022 15:15:39 +1200 Subject: [PATCH] Issue #160 - use setVersion on update of a changed flag - in TestData::update when flag is being copied from previous version - use setVersion rather than ['version'] to avoid generated error - associated unit test to update an initial flag, change the flag and update it again - unit-tested using docker for php 7.3, 7.4, 8.0, 8.1 --- src/LaunchDarkly/Integrations/TestData.php | 2 +- tests/Integrations/TestDataTest.php | 31 ++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/LaunchDarkly/Integrations/TestData.php b/src/LaunchDarkly/Integrations/TestData.php index 718b2c9c..239e4ef5 100644 --- a/src/LaunchDarkly/Integrations/TestData.php +++ b/src/LaunchDarkly/Integrations/TestData.php @@ -110,7 +110,7 @@ public function update(FlagBuilder $flagBuilder): TestData $oldFlag = $this->_currentFlags[$key] ?? null; if ($oldFlag) { - $oldVersion = $oldFlag['version']; + $oldVersion = $oldFlag->getVersion(); } $newFlag = $flagBuilder->build($oldVersion + 1); diff --git a/tests/Integrations/TestDataTest.php b/tests/Integrations/TestDataTest.php index 1e120a92..066eeb7c 100644 --- a/tests/Integrations/TestDataTest.php +++ b/tests/Integrations/TestDataTest.php @@ -430,6 +430,37 @@ public function testCanSetAndGetFeatureFlag() $this->assertEquals($expectedFeatureFlag, $featureFlag); } + public function testCanSetAndResetFeatureFlag() + { + $key = 'test-flag'; + $expectedUpdatedFlagJson = [ + 'key' => $key, + 'version' => 2, + 'deleted' => false, + 'on' => true, + 'targets' => [], + 'rules' => [], + 'offVariation' => 1, + 'fallthrough' => ['variation' => 2], + 'variations' => ['red', 'amber', 'green'], + + /* Required FeatureFlag fields */ + 'salt' => null, + 'prerequisites' => [], + ]; + $expectedUpdatedFeatureFlag = FeatureFlag::decode($expectedUpdatedFlagJson); + + $td = new TestData(); + $flag = $td->flag($key); + $td->update($flag); + + $updatedFlag = $flag->variations('red', 'amber', 'green')->fallthroughVariation(2); + $td->update($updatedFlag); + + $featureFlag = $td->getFeature($key); + $this->assertEquals($expectedUpdatedFeatureFlag, $featureFlag); + } + public function testFlagBuilderCanAddAndBuildRules() { $td = new TestData();