Skip to content
This repository was archived by the owner on Sep 16, 2021. It is now read-only.

Commit a434d57

Browse files
committed
Fixed defunct route handler merging
1 parent c8f7dda commit a434d57

File tree

4 files changed

+90
-14
lines changed

4 files changed

+90
-14
lines changed

AutoRoute/Mapping/ClassMetadata.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,5 +215,13 @@ public function merge(MergeableInterface $metadata)
215215
foreach ($metadata->getTokenProviders() as $tokenName => $provider) {
216216
$this->addTokenProvider($tokenName, $provider, true);
217217
}
218+
219+
if ($defunctRouteHandler = $metadata->getDefunctRouteHandler()) {
220+
$this->setDefunctRouteHandler($defunctRouteHandler);
221+
}
222+
223+
if ($conflictResolver = $metadata->getConflictResolver()) {
224+
$this->setConflictResolver($conflictResolver);
225+
}
218226
}
219227
}

AutoRoute/Mapping/MetadataFactory.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,6 @@ protected function resolveMetadata($class)
9494
{
9595
$classFqns = class_parents($class);
9696
$classFqns[] = $class;
97-
$classFqns = $classFqns;
9897
$metadatas = array();
9998
$addedClasses = array();
10099

@@ -131,9 +130,10 @@ protected function doResolve($classFqn, array &$addedClasses)
131130
if (isset($this->metadatas[$classFqn])) {
132131
$currentMetadata = $this->metadatas[$classFqn];
133132
$addedClasses[] = $classFqn;
133+
$extendedClass = $currentMetadata->getExtendedClass();
134134

135-
if (isset($this->metadatas[$extend = $currentMetadata->getExtendedClass()])) {
136-
foreach ($this->doResolve($extend, $addedClasses) as $extendData) {
135+
if (isset($this->metadatas[$extendedClass])) {
136+
foreach ($this->doResolve($extendedClass, $addedClasses) as $extendData) {
137137
$metadatas[] = $extendData;
138138
}
139139
}

Tests/Functional/EventListener/AutoRouteListenerTest.php

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -328,16 +328,16 @@ public function provideLeaveRedirect()
328328
'es' => 'Adios todo el mundo',
329329
),
330330
array(
331-
'test/auto-route/articles/en/hello-everybody',
332-
'test/auto-route/articles/fr/bonjour-le-monde',
333-
'test/auto-route/articles/de/gutentag',
334-
'test/auto-route/articles/es/hola-todo-el-mundo',
331+
'test/auto-route/seo-articles/en/hello-everybody',
332+
'test/auto-route/seo-articles/fr/bonjour-le-monde',
333+
'test/auto-route/seo-articles/de/gutentag',
334+
'test/auto-route/seo-articles/es/hola-todo-el-mundo',
335335
),
336336
array(
337-
'test/auto-route/articles/en/goodbye-everybody',
338-
'test/auto-route/articles/fr/aurevoir-le-monde',
339-
'test/auto-route/articles/de/aud-weidersehn',
340-
'test/auto-route/articles/es/adios-todo-el-mundo',
337+
'test/auto-route/seo-articles/en/goodbye-everybody',
338+
'test/auto-route/seo-articles/fr/aurevoir-le-monde',
339+
'test/auto-route/seo-articles/de/aud-weidersehn',
340+
'test/auto-route/seo-articles/es/adios-todo-el-mundo',
341341
),
342342
),
343343
);
@@ -369,9 +369,6 @@ public function testLeaveRedirect($data, $updatedData, $expectedRedirectRoutePat
369369
$this->getDm()->persist($article);
370370
$this->getDm()->flush();
371371

372-
// additional flush -- maybe we should handle this with an event listener of some sort?
373-
$this->getDm()->flush();
374-
375372
foreach ($expectedRedirectRoutePaths as $originalPath) {
376373
$redirectRoute = $this->getDm()->find('Symfony\Cmf\Bundle\RoutingBundle\Model\RedirectRoute', $originalPath);
377374
$this->assertNotNull($redirectRoute, 'Redirect exists for: ' . $originalPath);

Tests/Unit/AutoRoute/Mapping/MetadataFactoryTest.php

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,77 @@ public function testStoreAndGetClassMetadata()
3838
$this->assertSame($classMetadata, $this->factory->getMetadataForClass('stdClass'));
3939
}
4040

41+
public function provideTestMerge()
42+
{
43+
return array(
44+
array(
45+
array(
46+
'defunctRouteHandler' => null,
47+
'conflictResolver' => null,
48+
),
49+
array(
50+
'defunctRouteHandler' => null,
51+
'conflictResolver' => null,
52+
),
53+
array(
54+
'defunctRouteHandler' => null,
55+
'conflictResolver' => null,
56+
),
57+
),
58+
59+
array(
60+
array(
61+
'defunctRouteHandler' => array('name' => 'defunct1'),
62+
'conflictResolver' => array('name' => 'conflict1'),
63+
),
64+
array(
65+
'defunctRouteHandler' => null,
66+
'conflictResolver' => null,
67+
),
68+
array(
69+
'defunctRouteHandler' => array('name' => 'defunct1'),
70+
'conflictResolver' => array('name' => 'conflict1'),
71+
),
72+
),
73+
74+
array(
75+
array(
76+
'defunctRouteHandler' => null,
77+
'conflictResolver' => null,
78+
),
79+
array(
80+
'defunctRouteHandler' => array('name' => 'defunct1'),
81+
'conflictResolver' => array('name' => 'conflict1'),
82+
),
83+
array(
84+
'defunctRouteHandler' => array('name' => 'defunct1'),
85+
'conflictResolver' => array('name' => 'conflict1'),
86+
),
87+
),
88+
);
89+
}
90+
91+
/**
92+
* @dataProvider provideTestMerge
93+
*/
94+
public function testMerge($parentData, $childData, $expectedData)
95+
{
96+
$parentMetadata = new ClassMetadata('Symfony\Cmf\Bundle\RoutingAutoBundle\Tests\Resources\Fixtures\ParentClass');
97+
$parentMetadata->setDefunctRouteHandler($parentData['defunctRouteHandler']);
98+
$parentMetadata->setConflictResolver($parentData['conflictResolver']);
99+
100+
$childMetadata = new ClassMetadata('Symfony\Cmf\Bundle\RoutingAutoBundle\Tests\Resources\Fixtures\ChildClass');
101+
$childMetadata->setDefunctRouteHandler($childData['defunctRouteHandler']);
102+
$childMetadata->setConflictResolver($childData['conflictResolver']);
103+
104+
$this->factory->addMetadatas(array($childMetadata, $parentMetadata));
105+
106+
$resolvedMetadata = $this->factory->getMetadataForClass('Symfony\Cmf\Bundle\RoutingAutoBundle\Tests\Resources\Fixtures\ChildClass');
107+
108+
$this->assertSame($expectedData['defunctRouteHandler'], $resolvedMetadata->getDefunctRouteHandler());
109+
$this->assertSame($expectedData['conflictResolver'], $resolvedMetadata->getConflictResolver());
110+
}
111+
41112
public function testMergingParentClasses()
42113
{
43114
$childMetadata = new ClassMetadata('Symfony\Cmf\Bundle\RoutingAutoBundle\Tests\Resources\Fixtures\ChildClass');

0 commit comments

Comments
 (0)