From bd3dcc31cef593f23def631a8e38c2cb8432127d Mon Sep 17 00:00:00 2001 From: Fabrice Gangler <fabrice.gangler@adullact.org> Date: Mon, 24 Mar 2025 00:41:16 +0100 Subject: [PATCH] test(organisation): allow URL wihtout slug or with not valid slug - One organization page without slug redirect to valid url - One organization page with bad slug redirect to valid url --- .../OrganizationDisplayController.php | 23 ++++++++++ .../FunctionalTestOrganizationPagesTest.php | 45 +++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/webapp/src/Controller/Organization/OrganizationDisplayController.php b/webapp/src/Controller/Organization/OrganizationDisplayController.php index 49a976d..b7acb5e 100644 --- a/webapp/src/Controller/Organization/OrganizationDisplayController.php +++ b/webapp/src/Controller/Organization/OrganizationDisplayController.php @@ -66,6 +66,29 @@ public function displayOneOrganizationPageAllowToChangeLocaleInUrl( } + #[Route( + path: [ + 'en' => '/{_locale}/organization/{id}/', + 'fr' => '/{_locale}/organisation/{id}/', + ], + name: 'app_anonymous_organization_display_one_organization_without_slug', + methods: ['GET', 'HEAD'] + )] + public function oneOrganizatioUrlWithoutSlugRedirectToValidUrl( + string $_locale, + Organization $organization, + ): RedirectResponse { + $newUrl = $this->generateUrl('app_anonymous_organization_display_one_organization', [ + '_locale' => $_locale, + 'id' => $organization->getId(), + 'slug' => $organization->getSlug(), + ]); + return new RedirectResponse( + url: $newUrl, + status: Response::HTTP_PERMANENTLY_REDIRECT // 308 Permanent Redirect + ); + } + #[Route( path: [ 'en' => '/{_locale}/organization/{id}/{slug}/', diff --git a/webapp/tests/Functional/Organization/FunctionalTestOrganizationPagesTest.php b/webapp/tests/Functional/Organization/FunctionalTestOrganizationPagesTest.php index e00537f..e11c006 100644 --- a/webapp/tests/Functional/Organization/FunctionalTestOrganizationPagesTest.php +++ b/webapp/tests/Functional/Organization/FunctionalTestOrganizationPagesTest.php @@ -27,6 +27,7 @@ use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; /** + * @group allow_mutation_testing_by_infection * @group gogogo */ class FunctionalTestOrganizationPagesTest extends WebTestCase @@ -94,4 +95,48 @@ public function testOneOrganizationPageAllowToChangeLocaleInUrl(): void expectedNewRoute: 'app_anonymous_organization_display_one_organization', ); } + + + public function testOneOrganizationPageWithoutSlugRedirectToValidUrl(): void + { + $organizationId = AppOrganizationFixtures::ORGANIZATIONS[3]['id']; + $organizationSlug = AppOrganizationFixtures::ORGANIZATIONS[$organizationId]['slug']; + $client = static::createClient(); + $this->checkRedirectionToNewUrl( + client: $client, + currentUrl: "/en/organization/$organizationId/", + expectedNewUrl: "/en/organization/$organizationId/$organizationSlug/", + expectedCurrentRoute: 'app_anonymous_organization_display_one_organization_without_slug', + expectedNewRoute: 'app_anonymous_organization_display_one_organization', + ); + $this->checkRedirectionToNewUrl( + client: $client, + currentUrl: "/fr/organisation/$organizationId/", + expectedNewUrl: "/fr/organisation/$organizationId/$organizationSlug/", + expectedCurrentRoute: 'app_anonymous_organization_display_one_organization_without_slug', + expectedNewRoute: 'app_anonymous_organization_display_one_organization', + ); + } + + public function testOneOrganizationPageWithBadSlugRedirectToValidUrl(): void + { + $organizationId = AppOrganizationFixtures::ORGANIZATIONS[3]['id']; + $organizationSlug = AppOrganizationFixtures::ORGANIZATIONS[$organizationId]['slug']; + $client = static::createClient(); + $this->checkRedirectionToNewUrl( + client: $client, + currentUrl: "/en/organization/$organizationId/not-valid-slug/", + expectedNewUrl: "/en/organization/$organizationId/$organizationSlug/", + expectedCurrentRoute: 'app_anonymous_organization_display_one_organization', + expectedNewRoute: 'app_anonymous_organization_display_one_organization', + ); + $this->checkRedirectionToNewUrl( + client: $client, + currentUrl: "/fr/organisation/$organizationId/not-valid-slug/", + expectedNewUrl: "/fr/organisation/$organizationId/$organizationSlug/", + expectedCurrentRoute: 'app_anonymous_organization_display_one_organization', + expectedNewRoute: 'app_anonymous_organization_display_one_organization', + ); + } + } -- GitLab