From aa4a442a2971b4c6ece8351b091c4b33b81e18cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jakes=CC=8C?= Date: Tue, 14 May 2019 14:06:57 +0200 Subject: [PATCH] Add tests for feature flags API [MAILPOET-2008] --- .../API/JSON/v1/FeatureFlagsTest.php | 140 ++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 tests/integration/API/JSON/v1/FeatureFlagsTest.php diff --git a/tests/integration/API/JSON/v1/FeatureFlagsTest.php b/tests/integration/API/JSON/v1/FeatureFlagsTest.php new file mode 100644 index 0000000000..fb82b7aa06 --- /dev/null +++ b/tests/integration/API/JSON/v1/FeatureFlagsTest.php @@ -0,0 +1,140 @@ +defaults_backup = FeaturesController::$defaults; + } + + function testItReturnsDefaults() { + FeaturesController::$defaults = [ + 'feature-a' => true, + 'feature-b' => false, + ]; + + $controller = new FeatureFlagsController(); + $endpoint = new FeatureFlags($controller); + expect($endpoint->getAll()->data)->equals([ + [ + 'name' => 'feature-a', + 'value' => true, + 'default' => true, + ], + [ + 'name' => 'feature-b', + 'value' => false, + 'default' => false, + ], + ]); + } + + function testItReturnsDatabaseValue() { + FeaturesController::$defaults = [ + 'feature-a' => true, + ]; + + FeatureFlag::createOrUpdate([ + 'name' => 'feature-a', + 'value' => false, + ]); + + $controller = new FeatureFlagsController(); + $endpoint = new FeatureFlags($controller); + + expect($endpoint->getAll()->data)->equals([ + [ + 'name' => 'feature-a', + 'value' => false, + 'default' => true, + ], + ]); + } + + function testItSetsDatabaseValue() { + FeaturesController::$defaults = [ + 'feature-a' => true, + ]; + + $controller = new FeatureFlagsController(); + $endpoint = new FeatureFlags($controller); + $endpoint->set([ + 'feature-a' => false, + ]); + + $features = FeatureFlag::where('name', 'feature-a')->findMany(); + expect(count($features))->equals(1); + expect($features[0]->name)->equals('feature-a'); + expect($features[0]->value)->equals('0'); + } + + + function testItUpdatesDatabaseValue() { + FeaturesController::$defaults = [ + 'feature-a' => true, + ]; + + FeatureFlag::createOrUpdate([ + 'name' => 'feature-a', + 'value' => false, + ]); + + $controller = new FeatureFlagsController(); + $endpoint = new FeatureFlags($controller); + $endpoint->set([ + 'feature-a' => true, + ]); + + $features = FeatureFlag::where('name', 'feature-a')->findMany(); + expect(count($features))->equals(1); + expect($features[0]->name)->equals('feature-a'); + expect($features[0]->value)->equals('1'); + } + + function testItDoesNotReturnUnknownFlag() { + FeaturesController::$defaults = []; + + FeatureFlag::createOrUpdate([ + 'name' => 'feature-unknown', + 'value' => true, + ]); + + $controller = new FeatureFlagsController(); + $endpoint = new FeatureFlags($controller); + + expect($endpoint->getAll()->data)->isEmpty(); + } + + function testItDoesNotSaveUnknownFlag() { + FeaturesController::$defaults = []; + + $controller = new FeatureFlagsController(); + $endpoint = new FeatureFlags($controller); + $response = $endpoint->set([ + 'feature-unknown' => false, + ]); + + expect($response->errors[0]['error'])->equals(APIError::BAD_REQUEST); + expect($response->status)->equals(APIResponse::STATUS_BAD_REQUEST); + + $features = FeatureFlag::findMany(); + expect(count($features))->equals(0); + } + + function _after() { + parent::_before(); + FeatureFlag::deleteMany(); + FeaturesController::$defaults = $this->defaults_backup; + } +}