diff --git a/tests/integration/Features/FeaturesControllerTest.php b/tests/integration/Features/FeaturesControllerTest.php new file mode 100644 index 0000000000..fe7f4ab4fd --- /dev/null +++ b/tests/integration/Features/FeaturesControllerTest.php @@ -0,0 +1,71 @@ +defaults_backup = FeaturesController::$defaults; + } + + function testItReturnsDefaults() { + FeaturesController::$defaults = [ + 'feature-a' => true, + 'feature-b' => false, + ]; + + $controller = new FeaturesController(); + expect($controller->isSupported('feature-a'))->equals(true); + expect($controller->isSupported('feature-b'))->equals(false); + expect($controller->getAllFlags())->equals([ + 'feature-a' => true, + 'feature-b' => false, + ]); + } + + function testItReturnsDatabaseValue() { + FeaturesController::$defaults = [ + 'feature-a' => true, + ]; + + FeatureFlag::createOrUpdate([ + 'name' => 'feature-a', + 'value' => false, + ]); + + $controller = new FeaturesController(); + expect($controller->isSupported('feature-a'))->equals(false); + expect($controller->getAllFlags())->equals([ + 'feature-a' => false, + ]); + } + + function testItDoesNotReturnUnknownFlag() { + FeaturesController::$defaults = []; + + FeatureFlag::createOrUpdate([ + 'name' => 'feature-unknown', + 'value' => true, + ]); + + $controller = new FeaturesController(); + try { + $controller->isSupported('feature-unknown'); + } catch (\RuntimeException $e) { + expect($e->getMessage())->equals("Unknown feature 'feature-unknown'"); + } + expect($controller->getAllFlags())->isEmpty(); + } + + function _after() { + parent::_before(); + FeatureFlag::deleteMany(); + FeaturesController::$defaults = $this->defaults_backup; + } +}