|
@@ -12,6 +12,7 @@
|
|
|
namespace Sonata\AdminBundle\Tests\Route;
|
|
|
|
|
|
use Sonata\AdminBundle\Route\DefaultRouteGenerator;
|
|
|
+use Symfony\Component\Routing\Route;
|
|
|
|
|
|
class DefaultRouteGeneratorTest extends \PHPUnit_Framework_TestCase
|
|
|
{
|
|
@@ -24,4 +25,246 @@ class DefaultRouteGeneratorTest extends \PHPUnit_Framework_TestCase
|
|
|
|
|
|
$this->assertEquals('/foo/bar', $generator->generate('foo_bar'));
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @dataProvider getGenerateUrlTests
|
|
|
+ */
|
|
|
+ public function testGenerateUrl($expected, $name, array $parameters)
|
|
|
+ {
|
|
|
+ $admin = $this->getMock('Sonata\AdminBundle\Admin\AdminInterface');
|
|
|
+ $admin->expects($this->once())->method('isChild')->will($this->returnValue(false));
|
|
|
+ $admin->expects($this->any())->method('getCode')->will($this->returnValue('base.Code.Route'));
|
|
|
+ $admin->expects($this->once())->method('hasParentFieldDescription')->will($this->returnValue(false));
|
|
|
+ $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')));
|
|
|
+
|
|
|
+ $route1 = new Route('/foo');
|
|
|
+ $route1->setDefault('_sonata_name', 'admin_acme_foo');
|
|
|
+
|
|
|
+ $route2 = new Route('/foo/bar');
|
|
|
+ $route2->setDefault('_sonata_name', 'admin_acme_bar');
|
|
|
+
|
|
|
+ $admin->expects($this->once())
|
|
|
+ ->method('getRoute')
|
|
|
+ ->will($this->returnCallback(function($name) use ($route1, $route2) {
|
|
|
+ switch ($name) {
|
|
|
+ case 'base.Code.Route.foo':
|
|
|
+ return $route1;
|
|
|
+ case 'base.Code.Route|foo.bar':
|
|
|
+ return $route2;
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }));
|
|
|
+
|
|
|
+ $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_bar':
|
|
|
+ return '/foo/bar'.$params;
|
|
|
+ }
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }));
|
|
|
+
|
|
|
+ $generator = new DefaultRouteGenerator($router);
|
|
|
+
|
|
|
+ $this->assertEquals($expected, $generator->generateUrl($admin, $name, $parameters));
|
|
|
+ }
|
|
|
+
|
|
|
+ public function getGenerateUrlTests()
|
|
|
+ {
|
|
|
+ return array(
|
|
|
+ array('/foo?abc=a123&efg=e456&default_param=default_val', 'foo', array('default_param'=>'default_val')),
|
|
|
+ array('/foo/bar?abc=a123&efg=e456&default_param=default_val', 'foo.bar', array('default_param'=>'default_val')),
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ public function testGenerateUrlWithException()
|
|
|
+ {
|
|
|
+ $this->setExpectedException('RuntimeException', 'unable to find the route `base.Code.Route.foo`');
|
|
|
+
|
|
|
+ $admin = $this->getMock('Sonata\AdminBundle\Admin\AdminInterface');
|
|
|
+ $admin->expects($this->once())->method('isChild')->will($this->returnValue(false));
|
|
|
+ $admin->expects($this->any())->method('getCode')->will($this->returnValue('base.Code.Route'));
|
|
|
+ $admin->expects($this->once())->method('hasParentFieldDescription')->will($this->returnValue(false));
|
|
|
+ $admin->expects($this->once())->method('hasRequest')->will($this->returnValue(true));
|
|
|
+ $admin->expects($this->once())->method('getPersistentParameters')->will($this->returnValue(array()));
|
|
|
+ $admin->expects($this->once())->method('getRoute')->will($this->returnValue(false));
|
|
|
+
|
|
|
+ $router = $this->getMock('\Symfony\Component\Routing\RouterInterface');
|
|
|
+
|
|
|
+ $generator = new DefaultRouteGenerator($router);
|
|
|
+ $generator->generateUrl($admin, 'foo', array());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @dataProvider getGenerateUrlChildTests
|
|
|
+ */
|
|
|
+ public function testGenerateUrlChild($expected, $name, array $parameters)
|
|
|
+ {
|
|
|
+ $admin = $this->getMock('Sonata\AdminBundle\Admin\AdminInterface');
|
|
|
+ $admin->expects($this->once())->method('isChild')->will($this->returnValue(true));
|
|
|
+ $admin->expects($this->any())->method('getCode')->will($this->returnValue('base.Code.Route'));
|
|
|
+ $admin->expects($this->any())->method('getBaseCodeRoute')->will($this->returnValue('baseChild.Code.Route'));
|
|
|
+ $admin->expects($this->any())->method('getIdParameter')->will($this->returnValue('id'));
|
|
|
+ $admin->expects($this->once())->method('hasParentFieldDescription')->will($this->returnValue(false));
|
|
|
+ $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')));
|
|
|
+
|
|
|
+ $parentAdmin = $this->getMock('Sonata\AdminBundle\Admin\AdminInterface');
|
|
|
+ $parentAdmin->expects($this->any())->method('getIdParameter')->will($this->returnValue('childId'));
|
|
|
+
|
|
|
+ $request = $this->getMock('Symfony\Component\HttpFoundation\Request');
|
|
|
+ $request->expects($this->once())
|
|
|
+ ->method('get')
|
|
|
+ ->will($this->returnCallback(function($key) {
|
|
|
+ if ($key == 'childId') {
|
|
|
+ return '987654';
|
|
|
+ }
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }));
|
|
|
+ $admin->expects($this->any())->method('getRequest')->will($this->returnValue($request));
|
|
|
+
|
|
|
+ $admin->expects($this->any())->method('getParent')->will($this->returnValue($parentAdmin));
|
|
|
+
|
|
|
+ $route1 = new Route('/foo');
|
|
|
+ $route1->setDefault('_sonata_name', 'admin_acme_foo');
|
|
|
+
|
|
|
+ $route2 = new Route('/foo/bar');
|
|
|
+ $route2->setDefault('_sonata_name', 'admin_acme_bar');
|
|
|
+
|
|
|
+ $admin->expects($this->once())
|
|
|
+ ->method('getRoute')
|
|
|
+ ->will($this->returnCallback(function($name) use ($route1, $route2) {
|
|
|
+ switch ($name) {
|
|
|
+ case 'baseChild.Code.Route.foo':
|
|
|
+ return $route1;
|
|
|
+ case 'baseChild.Code.Route.foo.bar':
|
|
|
+ return $route2;
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }));
|
|
|
+
|
|
|
+ $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_bar':
|
|
|
+ return '/foo/bar'.$params;
|
|
|
+ }
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }));
|
|
|
+
|
|
|
+ $generator = new DefaultRouteGenerator($router);
|
|
|
+
|
|
|
+ $this->assertEquals($expected, $generator->generateUrl($admin, $name, $parameters));
|
|
|
+ }
|
|
|
+
|
|
|
+ public function getGenerateUrlChildTests()
|
|
|
+ {
|
|
|
+ return array(
|
|
|
+ array('/foo?abc=a123&efg=e456&default_param=default_val&childId=987654', 'foo', array('id'=>123, 'default_param'=>'default_val')),
|
|
|
+ array('/foo/bar?abc=a123&efg=e456&default_param=default_val&childId=987654', 'foo.bar', array('id'=>123, 'default_param'=>'default_val')),
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @dataProvider getGenerateUrlParentFieldDescriptionTests
|
|
|
+ */
|
|
|
+ public function testGenerateUrlParentFieldDescription($expected, $name, array $parameters)
|
|
|
+ {
|
|
|
+ $admin = $this->getMock('Sonata\AdminBundle\Admin\AdminInterface');
|
|
|
+ $admin->expects($this->once())->method('isChild')->will($this->returnValue(false));
|
|
|
+ $admin->expects($this->any())->method('getCode')->will($this->returnValue('base.Code.Route'));
|
|
|
+ $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')));
|
|
|
+
|
|
|
+ $route1 = new Route('/foo');
|
|
|
+ $route1->setDefault('_sonata_name', 'admin_acme_foo');
|
|
|
+
|
|
|
+ $route2 = new Route('/foo/bar');
|
|
|
+ $route2->setDefault('_sonata_name', 'admin_acme_bar');
|
|
|
+
|
|
|
+ $admin->expects($this->once())
|
|
|
+ ->method('getRoute')
|
|
|
+ ->will($this->returnCallback(function($name) use ($route1, $route2) {
|
|
|
+ switch ($name) {
|
|
|
+ case 'base.Code.Route.foo':
|
|
|
+ return $route1;
|
|
|
+ case 'base.Code.Route|foo.bar':
|
|
|
+ return $route2;
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }));
|
|
|
+
|
|
|
+ $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_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'));
|
|
|
+
|
|
|
+ $fieldDescription->expects($this->any())->method('getAdmin')->will($this->returnValue($parentAdmin));
|
|
|
+ $admin->expects($this->any())->method('getParentFieldDescription')->will($this->returnValue($fieldDescription));
|
|
|
+
|
|
|
+ $generator = new DefaultRouteGenerator($router);
|
|
|
+
|
|
|
+ $this->assertEquals($expected, $generator->generateUrl($admin, $name, $parameters));
|
|
|
+ }
|
|
|
+
|
|
|
+ public function getGenerateUrlParentFieldDescriptionTests()
|
|
|
+ {
|
|
|
+ return array(
|
|
|
+ array('/foo?abc=a123&efg=e456&default_param=default_val&uniqid=foo_uniqueid&code=base.Code.Route&pcode=parent_foo_code&puniqid=parent_foo_uniqueid', 'foo', array('default_param'=>'default_val')),
|
|
|
+ array('/foo/bar?abc=a123&efg=e456&default_param=default_val&uniqid=foo_uniqueid&code=base.Code.Route&pcode=parent_foo_code&puniqid=parent_foo_uniqueid', 'foo.bar', array('default_param'=>'default_val')),
|
|
|
+ );
|
|
|
+ }
|
|
|
}
|