public function testGenerate() { $router = $this->getMock('\\Symfony\\Component\\Routing\\RouterInterface'); $router->expects($this->once())->method('generate')->will($this->returnValue('/foo/bar')); $generator = new DefaultRouteGenerator($router); $this->assertEquals('/foo/bar', $generator->generate('foo_bar')); }
/** * @dataProvider getGenerateUrlParentFieldDescriptionTests */ public function testGenerateUrlParentFieldDescription($expected, $name, array $parameters) { $childCollection = new RouteCollection('base.Code.Parent|base.Code.Child', 'admin_acme_child', '/foo/', 'BundleName:ControllerName'); $childCollection->add('bar'); $collection = new RouteCollection('base.Code.Parent', 'admin_acme', '/', 'BundleName:ControllerName'); $collection->add('foo'); $collection->addCollection($childCollection); $admin = $this->getMock('Sonata\\AdminBundle\\Admin\\AdminInterface'); $admin->expects($this->any())->method('isChild')->will($this->returnValue(false)); $admin->expects($this->any())->method('getCode')->will($this->returnValue('base.Code.Parent')); // embeded admin (not nested ...) $admin->expects($this->once())->method('hasParentFieldDescription')->will($this->returnValue(true)); $admin->expects($this->once())->method('hasRequest')->will($this->returnValue(true)); $admin->expects($this->any())->method('getUniqid')->will($this->returnValue('foo_uniqueid')); $admin->expects($this->any())->method('getCode')->will($this->returnValue('foo_code')); $admin->expects($this->once())->method('getPersistentParameters')->will($this->returnValue(array('abc' => 'a123', 'efg' => 'e456'))); $admin->expects($this->any())->method('getExtensions')->will($this->returnValue(array())); $admin->expects($this->any())->method('getRoutes')->will($this->returnValue($collection)); $router = $this->getMock('Symfony\\Component\\Routing\\RouterInterface'); $router->expects($this->once())->method('generate')->will($this->returnCallback(function ($name, array $parameters = array()) { $params = ''; if (!empty($parameters)) { $params .= '?' . http_build_query($parameters); } switch ($name) { case 'admin_acme_foo': return '/foo' . $params; case 'admin_acme_child_bar': return '/foo/bar' . $params; } return null; })); $fieldDescription = $this->getMock('Sonata\\AdminBundle\\Admin\\FieldDescriptionInterface'); $fieldDescription->expects($this->once())->method('getOption')->will($this->returnValue(array())); $parentAdmin = $this->getMock('Sonata\\AdminBundle\\Admin\\AdminInterface'); $parentAdmin->expects($this->any())->method('getUniqid')->will($this->returnValue('parent_foo_uniqueid')); $parentAdmin->expects($this->any())->method('getCode')->will($this->returnValue('parent_foo_code')); $parentAdmin->expects($this->any())->method('getExtensions')->will($this->returnValue(array())); $fieldDescription->expects($this->any())->method('getAdmin')->will($this->returnValue($parentAdmin)); $admin->expects($this->any())->method('getParentFieldDescription')->will($this->returnValue($fieldDescription)); $cache = new RoutesCache($this->cacheTempFolder, true); $generator = new DefaultRouteGenerator($router, $cache); $this->assertEquals($expected, $generator->generateUrl($admin, $name, $parameters)); }
/** * @dataProvider getGenerateUrlLoadCacheTests */ public function testGenerateUrlLoadCache($expected, $name, array $parameters) { $childCollection = new RouteCollection('base.Code.Parent|base.Code.Child', 'admin_acme_child', '/foo', 'BundleName:ControllerName'); $childCollection->add('bar'); $collection = new RouteCollection('base.Code.Parent', 'admin_acme', '/', 'BundleName:ControllerName'); $collection->add('foo'); $collection->addCollection($childCollection); $standaloneCollection = new RouteCollection('base.Code.Child', 'admin_acme_child_standalone', '/', 'BundleName:ControllerName'); $standaloneCollection->add('bar'); $admin = $this->getMock('Sonata\\AdminBundle\\Admin\\AdminInterface'); $admin->expects($this->any())->method('isChild')->will($this->returnValue(true)); $admin->expects($this->any())->method('getCode')->will($this->returnValue('base.Code.Child')); $admin->expects($this->any())->method('getBaseCodeRoute')->will($this->returnValue('base.Code.Parent|base.Code.Child')); $admin->expects($this->any())->method('getIdParameter')->will($this->returnValue('id')); $admin->expects($this->any())->method('hasParentFieldDescription')->will($this->returnValue(false)); $admin->expects($this->any())->method('hasRequest')->will($this->returnValue(true)); $admin->expects($this->any())->method('getUniqid')->will($this->returnValue('foo_uniqueid')); $admin->expects($this->any())->method('getPersistentParameters')->will($this->returnValue(array('abc' => 'a123', 'efg' => 'e456'))); $admin->expects($this->any())->method('getRoutes')->will($this->returnValue($childCollection)); $admin->expects($this->any())->method('getExtensions')->will($this->returnValue(array())); $parentAdmin = $this->getMock('Sonata\\AdminBundle\\Admin\\AdminInterface'); $parentAdmin->expects($this->any())->method('getIdParameter')->will($this->returnValue('childId')); $parentAdmin->expects($this->any())->method('getRoutes')->will($this->returnValue($collection)); $parentAdmin->expects($this->any())->method('getCode')->will($this->returnValue('base.Code.Parent')); $parentAdmin->expects($this->any())->method('getExtensions')->will($this->returnValue(array())); // no request attached in this test, so this will not be used $parentAdmin->expects($this->never())->method('getPersistentParameters')->will($this->returnValue(array('from' => 'parent'))); $request = $this->getMock('Symfony\\Component\\HttpFoundation\\Request'); $request->attributes = $this->getMock('Symfony\\Component\\HttpFoundation\\ParameterBag'); $request->attributes->expects($this->any())->method('has')->will($this->returnValue(true)); $request->attributes->expects($this->any())->method('get')->will($this->returnCallback(function ($key) { if ($key == 'childId') { return '987654'; } return; })); $admin->expects($this->any())->method('getRequest')->will($this->returnValue($request)); $admin->expects($this->any())->method('getParent')->will($this->returnValue($parentAdmin)); $standaloneAdmin = $this->getMock('Sonata\\AdminBundle\\Admin\\AdminInterface'); $standaloneAdmin->expects($this->any())->method('isChild')->will($this->returnValue(false)); $standaloneAdmin->expects($this->any())->method('getCode')->will($this->returnValue('base.Code.Child')); $standaloneAdmin->expects($this->once())->method('hasParentFieldDescription')->will($this->returnValue(false)); $standaloneAdmin->expects($this->once())->method('hasRequest')->will($this->returnValue(true)); $standaloneAdmin->expects($this->any())->method('getUniqid')->will($this->returnValue('foo_uniqueid')); $standaloneAdmin->expects($this->once())->method('getPersistentParameters')->will($this->returnValue(array('abc' => 'a123', 'efg' => 'e456'))); $standaloneAdmin->expects($this->any())->method('getRoutes')->will($this->returnValue($standaloneCollection)); $standaloneAdmin->expects($this->any())->method('getExtensions')->will($this->returnValue(array())); $router = $this->getMock('\\Symfony\\Component\\Routing\\RouterInterface'); $router->expects($this->exactly(2))->method('generate')->will($this->returnCallback(function ($name, array $parameters = array()) { $params = ''; if (!empty($parameters)) { $params .= '?' . http_build_query($parameters); } switch ($name) { case 'admin_acme_child_bar': return '/foo/bar' . $params; case 'admin_acme_child_standalone_bar': return '/bar' . $params; } return; })); $cache = new RoutesCache($this->cacheTempFolder, true); $generator = new DefaultRouteGenerator($router, $cache); // Generate once to populate cache $generator->generateUrl($admin, 'bar', $parameters); $this->assertEquals($expected, $generator->generateUrl($standaloneAdmin, $name, $parameters)); }