From 508408265e117d8fb3f6d74c587bbc0ea659dd22 Mon Sep 17 00:00:00 2001 From: Sybio Date: Wed, 28 Aug 2024 12:40:53 +0200 Subject: [PATCH] test: repeatable attributes/annotations --- .../Controller/DefaultController.php | 32 +++++++++++++ tests/Fixtures/App/config/routing.yml | 17 +++++++ .../Controller/DefaultControllerTest.php | 48 +++++++++++++++++++ 3 files changed, 97 insertions(+) diff --git a/tests/Fixtures/App/TestBundle/Controller/DefaultController.php b/tests/Fixtures/App/TestBundle/Controller/DefaultController.php index f6378ba..215e640 100644 --- a/tests/Fixtures/App/TestBundle/Controller/DefaultController.php +++ b/tests/Fixtures/App/TestBundle/Controller/DefaultController.php @@ -62,6 +62,24 @@ public function annotationFooDisabled() return new Response('DefaultController::annotationFooDisabledAction'); } + /** + * @Feature("foo", enabled=true) + * @Feature("bar", enabled=true) + */ + public function annotationFooEnabledBarEnabled() + { + return new Response('DefaultController::annotationFooEnabledBarEnabledAction'); + } + + /** + * @Feature("foo", enabled=true) + * @Feature("bar", enabled=false) + */ + public function annotationFooEnabledBarDisabled() + { + return new Response('DefaultController::annotationFooEnabledBarDisabledAction'); + } + #[Feature(name: 'foo')] public function attributeFooEnabled() { @@ -73,4 +91,18 @@ public function attributeFooDisabled() { return new Response('DefaultController::attributeFooDisabledAction'); } + + #[Feature(name: 'foo', enabled: true)] + #[Feature(name: 'bar', enabled: true)] + public function attributeFooEnabledBarEnabled() + { + return new Response('DefaultController::attributeFooEnabledBarEnabledAction'); + } + + #[Feature(name: 'foo', enabled: true)] + #[Feature(name: 'bar', enabled: false)] + public function attributeFooEnabledBarDisabled() + { + return new Response('DefaultController::attributeFooEnabledBarDisabledAction'); + } } diff --git a/tests/Fixtures/App/config/routing.yml b/tests/Fixtures/App/config/routing.yml index cc87df9..7e4c247 100644 --- a/tests/Fixtures/App/config/routing.yml +++ b/tests/Fixtures/App/config/routing.yml @@ -32,6 +32,15 @@ annotation_configuration_disabled: path: /annotation/disabled defaults: { _controller: Novaway\Bundle\FeatureFlagBundle\Tests\Fixtures\App\TestBundle\Controller\DefaultController::annotationFooDisabled } +annotation_configuration_bar_enabled_foo_enabled: + path: /annotation/bar/enabled/foo/enabled + defaults: { _controller: Novaway\Bundle\FeatureFlagBundle\Tests\Fixtures\App\TestBundle\Controller\DefaultController::annotationFooEnabledBarEnabled } + +annotation_configuration_bar_enabled_foo_disabled: + path: /annotation/bar/enabled/foo/disabled + defaults: { _controller: Novaway\Bundle\FeatureFlagBundle\Tests\Fixtures\App\TestBundle\Controller\DefaultController::annotationFooEnabledBarDisabled } + + attribute_class_disabled: path: /attribute/class/disabled defaults: { _controller: Novaway\Bundle\FeatureFlagBundle\Tests\Fixtures\App\TestBundle\Controller\AttributeClassDisabledController } @@ -43,3 +52,11 @@ attribute_configuration_enabled: attribute_configuration_disabled: path: /attribute/disabled defaults: { _controller: Novaway\Bundle\FeatureFlagBundle\Tests\Fixtures\App\TestBundle\Controller\DefaultController::attributeFooDisabled } + +attribute_configuration_bar_enabled_foo_enabled: + path: /attribute/bar/enabled/foo/enabled + defaults: { _controller: Novaway\Bundle\FeatureFlagBundle\Tests\Fixtures\App\TestBundle\Controller\DefaultController::attributeFooEnabledBarEnabled } + +attribute_configuration_bar_enabled_foo_disabled: + path: /attribute/bar/enabled/foo/disabled + defaults: { _controller: Novaway\Bundle\FeatureFlagBundle\Tests\Fixtures\App\TestBundle\Controller\DefaultController::attributeFooEnabledBarDisabled } diff --git a/tests/Functional/Controller/DefaultControllerTest.php b/tests/Functional/Controller/DefaultControllerTest.php index 9ca2d05..36a7aa1 100644 --- a/tests/Functional/Controller/DefaultControllerTest.php +++ b/tests/Functional/Controller/DefaultControllerTest.php @@ -83,6 +83,30 @@ public function testAnnotationFooDisabledAction() static::assertSame(404, static::$client->getResponse()->getStatusCode()); } + /** + * @requires PHP >= 8.0 + */ + public function testTwoAnnotationsFooEnabledBarEnabledHasNoAccessBecauseFeatureFooIsEnabledButFeatureBarIsDisabled() + { + static::$client->request('GET', '/annotation/bar/enabled/foo/enabled'); + + static::assertSame(404, static::$client->getResponse()->getStatusCode()); + } + + /** + * @requires PHP >= 8.0 + */ + public function testTwoAnnotationsFooEnabledBarDisabledHasAccessBecauseFeatureFooIsEnabledAndFeatureBarIsDisabled() + { + $crawler = static::$client->request('GET', '/annotation/bar/enabled/foo/disabled'); + + static::assertSame(200, static::$client->getResponse()->getStatusCode()); + static::assertGreaterThan( + 0, + $crawler->filter('html:contains("DefaultController::annotationFooEnabledBarDisabledAction")')->count(), + ); + } + /** * @requires PHP >= 8.0 */ @@ -106,4 +130,28 @@ public function testAttributeFooDisabledAction() static::assertSame(404, static::$client->getResponse()->getStatusCode()); } + + /** + * @requires PHP >= 8.0 + */ + public function testTwoAttributesFooEnabledBarEnabledHasNoAccessBecauseFeatureFooIsEnabledButFeatureBarIsDisabled() + { + static::$client->request('GET', '/attribute/bar/enabled/foo/enabled'); + + static::assertSame(404, static::$client->getResponse()->getStatusCode()); + } + + /** + * @requires PHP >= 8.0 + */ + public function testTwoAttributesFooEnabledBarDisabledHasAccessBecauseFeatureFooIsEnabledAndFeatureBarIsDisabled() + { + $crawler = static::$client->request('GET', '/attribute/bar/enabled/foo/disabled'); + + static::assertSame(200, static::$client->getResponse()->getStatusCode()); + static::assertGreaterThan( + 0, + $crawler->filter('html:contains("DefaultController::attributeFooEnabledBarDisabledAction")')->count(), + ); + } }