repository = $this->di_container->get(FeatureFlagsRepository::class); $table_name = $this->entity_manager->getClassMetadata(FeatureFlagEntity::class)->getTableName(); $this->entity_manager->getConnection()->executeUpdate("TRUNCATE $table_name"); } function testItReturnsDefaults() { $endpoint = $this->createEndpointWithFeatureDefaults([ 'feature-a' => true, 'feature-b' => false, ]); expect($endpoint->getAll()->data)->equals([ [ 'name' => 'feature-a', 'value' => true, 'default' => true, ], [ 'name' => 'feature-b', 'value' => false, 'default' => false, ], ]); } function testItReturnsDatabaseValue() { $this->repository->createOrUpdate([ 'name' => 'feature-a', 'value' => false, ]); $endpoint = $this->createEndpointWithFeatureDefaults([ 'feature-a' => true, ]); expect($endpoint->getAll()->data)->equals([ [ 'name' => 'feature-a', 'value' => false, 'default' => true, ], ]); } function testItSetsDatabaseValue() { $endpoint = $this->createEndpointWithFeatureDefaults([ 'feature-a' => true, ]); $endpoint->set([ 'feature-a' => false, ]); $this->entity_manager->clear(); $features = $this->repository->findBy(['name' => 'feature-a']); expect($features)->count(1); expect($features[0]->getName())->equals('feature-a'); expect($features[0]->getValue())->equals(false); } function testItUpdatesDatabaseValue() { $this->repository->createOrUpdate([ 'name' => 'feature-a', 'value' => false, ]); $endpoint = $this->createEndpointWithFeatureDefaults([ 'feature-a' => true, ]); $endpoint->set([ 'feature-a' => true, ]); $this->entity_manager->clear(); $features = $this->repository->findBy(['name' => 'feature-a']); expect(count($features))->equals(1); expect($features[0]->getName())->equals('feature-a'); expect($features[0]->getValue())->equals(true); } function testItDoesNotReturnUnknownFlag() { $this->repository->createOrUpdate([ 'name' => 'feature-unknown', 'value' => true, ]); $endpoint = $this->createEndpointWithFeatureDefaults([]); expect($endpoint->getAll()->data)->isEmpty(); } function testItDoesNotSaveUnknownFlag() { $endpoint = $this->createEndpointWithFeatureDefaults([]); $response = $endpoint->set([ 'feature-unknown' => false, ]); expect($response->errors[0]['error'])->equals(APIError::BAD_REQUEST); expect($response->status)->equals(APIResponse::STATUS_BAD_REQUEST); $features = $this->repository->findAll(); expect(count($features))->equals(0); } /** @return FeatureFlags */ private function createEndpointWithFeatureDefaults(array $defaults) { $features_controller = $this->make(FeaturesController::class, [ 'defaults' => $defaults, ]); $feature_flags = Stub::make(FeatureFlagsController::class, [ 'features_controller' => $features_controller, 'feature_flags_repository' => $this->di_container->get(FeatureFlagsRepository::class), ]); return new FeatureFlags($features_controller, $feature_flags); } }