Skip to content

Commit d246e94

Browse files
minor #35926 [Routing] Fix some wrong localized routes tests (fancyweb)
This PR was merged into the 4.4 branch. Discussion ---------- [Routing] Fix some wrong localized routes tests | Q | A | ------------- | --- | Branch? | 4.4 | Bug fix? | no | New feature? | no | Deprecations? | no | Tickets | - | License | MIT | Doc PR | - ~~Since #35855, the `_locale` path param is directly substituted so those tests are not valid cases anymore. Instead, the path directly contain the right locale.~~ Actually, the compilation is done after, so instead we need to set the new requirement in all tests to reflect the "reality". #35855 also causes a BC break on one case: ```php $compiledUrlGenerator->generate('foo.fr', ['_locale' => 'en'])) ``` Previously, the generated route would be the `/en/fourchette`. Now that the locale is hardcoded in the route path, it will always be `/fr/fourchette`. I changed `foo` to relevant words because it is easier to understand like that. Commits ------- 99ae55f [Routing] Fix some wrong localized routes tests
2 parents afdd507 + 99ae55f commit d246e94

File tree

3 files changed

+40
-36
lines changed

3 files changed

+40
-36
lines changed

src/Symfony/Component/Routing/Tests/Generator/Dumper/CompiledUrlGeneratorDumperTest.php

+14-14
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ public function testDumpWithRoutes()
8787
public function testDumpWithSimpleLocalizedRoutes()
8888
{
8989
$this->routeCollection->add('test', (new Route('/foo')));
90-
$this->routeCollection->add('test.en', (new Route('/testing/is/fun'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'test'));
91-
$this->routeCollection->add('test.nl', (new Route('/testen/is/leuk'))->setDefault('_locale', 'nl')->setDefault('_canonical_route', 'test'));
90+
$this->routeCollection->add('test.en', (new Route('/testing/is/fun'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'test')->setRequirement('_locale', 'en'));
91+
$this->routeCollection->add('test.nl', (new Route('/testen/is/leuk'))->setDefault('_locale', 'nl')->setDefault('_canonical_route', 'test')->setRequirement('_locale', 'nl'));
9292

9393
$code = $this->generatorDumper->dump();
9494
file_put_contents($this->testTmpFilepath, $code);
@@ -120,7 +120,7 @@ public function testDumpWithRouteNotFoundLocalizedRoutes()
120120
{
121121
$this->expectException('Symfony\Component\Routing\Exception\RouteNotFoundException');
122122
$this->expectExceptionMessage('Unable to generate a URL for the named route "test" as such route does not exist.');
123-
$this->routeCollection->add('test.en', (new Route('/testing/is/fun'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'test'));
123+
$this->routeCollection->add('test.en', (new Route('/testing/is/fun'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'test')->setRequirement('_locale', 'en'));
124124

125125
$code = $this->generatorDumper->dump();
126126
file_put_contents($this->testTmpFilepath, $code);
@@ -131,9 +131,9 @@ public function testDumpWithRouteNotFoundLocalizedRoutes()
131131

132132
public function testDumpWithFallbackLocaleLocalizedRoutes()
133133
{
134-
$this->routeCollection->add('test.en', (new Route('/testing/is/fun'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'test'));
135-
$this->routeCollection->add('test.nl', (new Route('/testen/is/leuk'))->setDefault('_locale', 'nl')->setDefault('_canonical_route', 'test'));
136-
$this->routeCollection->add('test.fr', (new Route('/tester/est/amusant'))->setDefault('_locale', 'fr')->setDefault('_canonical_route', 'test'));
134+
$this->routeCollection->add('test.en', (new Route('/testing/is/fun'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'test')->setRequirement('_locale', 'en'));
135+
$this->routeCollection->add('test.nl', (new Route('/testen/is/leuk'))->setDefault('_locale', 'nl')->setDefault('_canonical_route', 'test')->setRequirement('_locale', 'nl'));
136+
$this->routeCollection->add('test.fr', (new Route('/tester/est/amusant'))->setDefault('_locale', 'fr')->setDefault('_canonical_route', 'test')->setRequirement('_locale', 'fr'));
137137

138138
$code = $this->generatorDumper->dump();
139139
file_put_contents($this->testTmpFilepath, $code);
@@ -234,10 +234,10 @@ public function testDumpWithSchemeRequirement()
234234

235235
public function testDumpWithLocalizedRoutesPreserveTheGoodLocaleInTheUrl()
236236
{
237-
$this->routeCollection->add('foo.en', (new Route('/{_locale}/foo'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'foo'));
238-
$this->routeCollection->add('foo.fr', (new Route('/{_locale}/foo'))->setDefault('_locale', 'fr')->setDefault('_canonical_route', 'foo'));
239-
$this->routeCollection->add('fun.en', (new Route('/fun'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'fun'));
240-
$this->routeCollection->add('fun.fr', (new Route('/amusant'))->setDefault('_locale', 'fr')->setDefault('_canonical_route', 'fun'));
237+
$this->routeCollection->add('foo.en', (new Route('/{_locale}/fork'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'foo')->setRequirement('_locale', 'en'));
238+
$this->routeCollection->add('foo.fr', (new Route('/{_locale}/fourchette'))->setDefault('_locale', 'fr')->setDefault('_canonical_route', 'foo')->setRequirement('_locale', 'fr'));
239+
$this->routeCollection->add('fun.en', (new Route('/fun'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'fun')->setRequirement('_locale', 'en'));
240+
$this->routeCollection->add('fun.fr', (new Route('/amusant'))->setDefault('_locale', 'fr')->setDefault('_canonical_route', 'fun')->setRequirement('_locale', 'fr'));
241241

242242
file_put_contents($this->testTmpFilepath, $this->generatorDumper->dump());
243243

@@ -246,10 +246,10 @@ public function testDumpWithLocalizedRoutesPreserveTheGoodLocaleInTheUrl()
246246

247247
$compiledUrlGenerator = new CompiledUrlGenerator(require $this->testTmpFilepath, $requestContext, null, null);
248248

249-
$this->assertSame('/fr/foo', $compiledUrlGenerator->generate('foo'));
250-
$this->assertSame('/en/foo', $compiledUrlGenerator->generate('foo.en'));
251-
$this->assertSame('/en/foo', $compiledUrlGenerator->generate('foo', ['_locale' => 'en']));
252-
$this->assertSame('/en/foo', $compiledUrlGenerator->generate('foo.fr', ['_locale' => 'en']));
249+
$this->assertSame('/fr/fourchette', $compiledUrlGenerator->generate('foo'));
250+
$this->assertSame('/en/fork', $compiledUrlGenerator->generate('foo.en'));
251+
$this->assertSame('/en/fork', $compiledUrlGenerator->generate('foo', ['_locale' => 'en']));
252+
$this->assertSame('/fr/fourchette', $compiledUrlGenerator->generate('foo.fr', ['_locale' => 'en']));
253253

254254
$this->assertSame('/amusant', $compiledUrlGenerator->generate('fun'));
255255
$this->assertSame('/fun', $compiledUrlGenerator->generate('fun.en'));

src/Symfony/Component/Routing/Tests/Generator/Dumper/PhpGeneratorDumperTest.php

+14-14
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ public function testDumpWithRoutes()
9090
public function testDumpWithSimpleLocalizedRoutes()
9191
{
9292
$this->routeCollection->add('test', (new Route('/foo')));
93-
$this->routeCollection->add('test.en', (new Route('/testing/is/fun'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'test'));
94-
$this->routeCollection->add('test.nl', (new Route('/testen/is/leuk'))->setDefault('_locale', 'nl')->setDefault('_canonical_route', 'test'));
93+
$this->routeCollection->add('test.en', (new Route('/testing/is/fun'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'test')->setRequirement('_locale', 'en'));
94+
$this->routeCollection->add('test.nl', (new Route('/testen/is/leuk'))->setDefault('_locale', 'nl')->setDefault('_canonical_route', 'test')->setRequirement('_locale', 'nl'));
9595

9696
$code = $this->generatorDumper->dump([
9797
'class' => 'SimpleLocalizedProjectUrlGenerator',
@@ -126,7 +126,7 @@ public function testDumpWithRouteNotFoundLocalizedRoutes()
126126
{
127127
$this->expectException('Symfony\Component\Routing\Exception\RouteNotFoundException');
128128
$this->expectExceptionMessage('Unable to generate a URL for the named route "test" as such route does not exist.');
129-
$this->routeCollection->add('test.en', (new Route('/testing/is/fun'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'test'));
129+
$this->routeCollection->add('test.en', (new Route('/testing/is/fun'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'test')->setRequirement('_locale', 'en'));
130130

131131
$code = $this->generatorDumper->dump([
132132
'class' => 'RouteNotFoundLocalizedProjectUrlGenerator',
@@ -140,9 +140,9 @@ public function testDumpWithRouteNotFoundLocalizedRoutes()
140140

141141
public function testDumpWithFallbackLocaleLocalizedRoutes()
142142
{
143-
$this->routeCollection->add('test.en', (new Route('/testing/is/fun'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'test'));
144-
$this->routeCollection->add('test.nl', (new Route('/testen/is/leuk'))->setDefault('_locale', 'nl')->setDefault('_canonical_route', 'test'));
145-
$this->routeCollection->add('test.fr', (new Route('/tester/est/amusant'))->setDefault('_locale', 'fr')->setDefault('_canonical_route', 'test'));
143+
$this->routeCollection->add('test.en', (new Route('/testing/is/fun'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'test')->setRequirement('_locale', 'en'));
144+
$this->routeCollection->add('test.nl', (new Route('/testen/is/leuk'))->setDefault('_locale', 'nl')->setDefault('_canonical_route', 'test')->setRequirement('_locale', 'nl'));
145+
$this->routeCollection->add('test.fr', (new Route('/tester/est/amusant'))->setDefault('_locale', 'fr')->setDefault('_canonical_route', 'test')->setRequirement('_locale', 'fr'));
146146

147147
$code = $this->generatorDumper->dump([
148148
'class' => 'FallbackLocaleLocalizedProjectUrlGenerator',
@@ -253,10 +253,10 @@ public function testDumpWithSchemeRequirement()
253253

254254
public function testDumpWithLocalizedRoutesPreserveTheGoodLocaleInTheUrl()
255255
{
256-
$this->routeCollection->add('foo.en', (new Route('/{_locale}/foo'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'foo'));
257-
$this->routeCollection->add('foo.fr', (new Route('/{_locale}/foo'))->setDefault('_locale', 'fr')->setDefault('_canonical_route', 'foo'));
258-
$this->routeCollection->add('fun.en', (new Route('/fun'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'fun'));
259-
$this->routeCollection->add('fun.fr', (new Route('/amusant'))->setDefault('_locale', 'fr')->setDefault('_canonical_route', 'fun'));
256+
$this->routeCollection->add('foo.en', (new Route('/{_locale}/fork'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'foo')->setRequirement('_locale', 'en'));
257+
$this->routeCollection->add('foo.fr', (new Route('/{_locale}/fourchette'))->setDefault('_locale', 'fr')->setDefault('_canonical_route', 'foo')->setRequirement('_locale', 'fr'));
258+
$this->routeCollection->add('fun.en', (new Route('/fun'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'fun')->setRequirement('_locale', 'en'));
259+
$this->routeCollection->add('fun.fr', (new Route('/amusant'))->setDefault('_locale', 'fr')->setDefault('_canonical_route', 'fun')->setRequirement('_locale', 'fr'));
260260

261261
file_put_contents($this->testTmpFilepath, $this->generatorDumper->dump([
262262
'class' => 'PreserveTheGoodLocaleInTheUrlGenerator',
@@ -268,10 +268,10 @@ public function testDumpWithLocalizedRoutesPreserveTheGoodLocaleInTheUrl()
268268

269269
$phpGenerator = new \PreserveTheGoodLocaleInTheUrlGenerator($requestContext);
270270

271-
$this->assertSame('/fr/foo', $phpGenerator->generate('foo'));
272-
$this->assertSame('/en/foo', $phpGenerator->generate('foo.en'));
273-
$this->assertSame('/en/foo', $phpGenerator->generate('foo', ['_locale' => 'en']));
274-
$this->assertSame('/en/foo', $phpGenerator->generate('foo.fr', ['_locale' => 'en']));
271+
$this->assertSame('/fr/fourchette', $phpGenerator->generate('foo'));
272+
$this->assertSame('/en/fork', $phpGenerator->generate('foo.en'));
273+
$this->assertSame('/en/fork', $phpGenerator->generate('foo', ['_locale' => 'en']));
274+
$this->assertSame('/fr/fourchette', $phpGenerator->generate('foo.fr', ['_locale' => 'en']));
275275

276276
$this->assertSame('/amusant', $phpGenerator->generate('fun'));
277277
$this->assertSame('/fun', $phpGenerator->generate('fun.en'));

src/Symfony/Component/Routing/Tests/Generator/UrlGeneratorTest.php

+12-8
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ public function testGenerateWithDefaultLocale()
171171
foreach (['hr' => '/foo', 'en' => '/bar'] as $locale => $path) {
172172
$localizedRoute = clone $route;
173173
$localizedRoute->setDefault('_locale', $locale);
174+
$localizedRoute->setRequirement('_locale', $locale);
174175
$localizedRoute->setDefault('_canonical_route', $name);
175176
$localizedRoute->setPath($path);
176177
$routes->add($name.'.'.$locale, $localizedRoute);
@@ -195,6 +196,7 @@ public function testGenerateWithOverriddenParameterLocale()
195196
foreach (['hr' => '/foo', 'en' => '/bar'] as $locale => $path) {
196197
$localizedRoute = clone $route;
197198
$localizedRoute->setDefault('_locale', $locale);
199+
$localizedRoute->setRequirement('_locale', $locale);
198200
$localizedRoute->setDefault('_canonical_route', $name);
199201
$localizedRoute->setPath($path);
200202
$routes->add($name.'.'.$locale, $localizedRoute);
@@ -219,6 +221,7 @@ public function testGenerateWithOverriddenParameterLocaleFromRequestContext()
219221
foreach (['hr' => '/foo', 'en' => '/bar'] as $locale => $path) {
220222
$localizedRoute = clone $route;
221223
$localizedRoute->setDefault('_locale', $locale);
224+
$localizedRoute->setRequirement('_locale', $locale);
222225
$localizedRoute->setDefault('_canonical_route', $name);
223226
$localizedRoute->setPath($path);
224227
$routes->add($name.'.'.$locale, $localizedRoute);
@@ -240,18 +243,18 @@ public function testDumpWithLocalizedRoutesPreserveTheGoodLocaleInTheUrl()
240243
{
241244
$routeCollection = new RouteCollection();
242245

243-
$routeCollection->add('foo.en', (new Route('/{_locale}/foo'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'foo'));
244-
$routeCollection->add('foo.fr', (new Route('/{_locale}/foo'))->setDefault('_locale', 'fr')->setDefault('_canonical_route', 'foo'));
245-
$routeCollection->add('fun.en', (new Route('/fun'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'fun'));
246-
$routeCollection->add('fun.fr', (new Route('/amusant'))->setDefault('_locale', 'fr')->setDefault('_canonical_route', 'fun'));
246+
$routeCollection->add('foo.en', (new Route('/{_locale}/fork'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'foo')->setRequirement('_locale', 'en'));
247+
$routeCollection->add('foo.fr', (new Route('/{_locale}/fourchette'))->setDefault('_locale', 'fr')->setDefault('_canonical_route', 'foo')->setRequirement('_locale', 'fr'));
248+
$routeCollection->add('fun.en', (new Route('/fun'))->setDefault('_locale', 'en')->setDefault('_canonical_route', 'fun')->setRequirement('_locale', 'en'));
249+
$routeCollection->add('fun.fr', (new Route('/amusant'))->setDefault('_locale', 'fr')->setDefault('_canonical_route', 'fun')->setRequirement('_locale', 'fr'));
247250

248251
$urlGenerator = $this->getGenerator($routeCollection);
249252
$urlGenerator->getContext()->setParameter('_locale', 'fr');
250253

251-
$this->assertSame('/app.php/fr/foo', $urlGenerator->generate('foo'));
252-
$this->assertSame('/app.php/en/foo', $urlGenerator->generate('foo.en'));
253-
$this->assertSame('/app.php/en/foo', $urlGenerator->generate('foo', ['_locale' => 'en']));
254-
$this->assertSame('/app.php/en/foo', $urlGenerator->generate('foo.fr', ['_locale' => 'en']));
254+
$this->assertSame('/app.php/fr/fourchette', $urlGenerator->generate('foo'));
255+
$this->assertSame('/app.php/en/fork', $urlGenerator->generate('foo.en'));
256+
$this->assertSame('/app.php/en/fork', $urlGenerator->generate('foo', ['_locale' => 'en']));
257+
$this->assertSame('/app.php/fr/fourchette', $urlGenerator->generate('foo.fr', ['_locale' => 'en']));
255258

256259
$this->assertSame('/app.php/amusant', $urlGenerator->generate('fun'));
257260
$this->assertSame('/app.php/fun', $urlGenerator->generate('fun.en'));
@@ -278,6 +281,7 @@ public function testGenerateWithInvalidLocale()
278281
foreach (['hr' => '/foo', 'en' => '/bar'] as $locale => $path) {
279282
$localizedRoute = clone $route;
280283
$localizedRoute->setDefault('_locale', $locale);
284+
$localizedRoute->setRequirement('_locale', $locale);
281285
$localizedRoute->setDefault('_canonical_route', $name);
282286
$localizedRoute->setPath($path);
283287
$routes->add($name.'.'.$locale, $localizedRoute);

0 commit comments

Comments
 (0)