AdminTest.php 41 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066
  1. <?php
  2. /*
  3. * This file is part of the Sonata package.
  4. *
  5. * (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Sonata\AdminBundle\Tests\Admin;
  11. use Sonata\AdminBundle\Admin\Admin;
  12. use Sonata\AdminBundle\Tests\Fixtures\Entity\FooToString;
  13. use Sonata\AdminBundle\Tests\Fixtures\Entity\FooToStringNull;
  14. use Sonata\AdminBundle\Tests\Fixtures\Admin\PostAdmin;
  15. use Sonata\AdminBundle\Tests\Fixtures\Admin\CommentAdmin;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Sonata\AdminBundle\Admin\AdminInterface;
  18. class AdminTest extends \PHPUnit_Framework_TestCase
  19. {
  20. /**
  21. * @covers Sonata\AdminBundle\Admin\Admin::__construct
  22. */
  23. public function testConstructor()
  24. {
  25. $class = 'Application\Sonata\NewsBundle\Entity\Post';
  26. $baseControllerName = 'SonataNewsBundle:PostAdmin';
  27. $admin = new PostAdmin('sonata.post.admin.post', $class, $baseControllerName);
  28. $this->assertInstanceOf('Sonata\AdminBundle\Admin\Admin', $admin);
  29. $this->assertEquals($class, $admin->getClass());
  30. $this->assertEquals($baseControllerName, $admin->getBaseControllerName());
  31. }
  32. /**
  33. * @covers Sonata\AdminBundle\Admin\Admin::hasChild
  34. * @covers Sonata\AdminBundle\Admin\Admin::addChild
  35. * @covers Sonata\AdminBundle\Admin\Admin::getChild
  36. * @covers Sonata\AdminBundle\Admin\Admin::isChild
  37. * @covers Sonata\AdminBundle\Admin\Admin::hasChildren
  38. * @covers Sonata\AdminBundle\Admin\Admin::getChildren
  39. */
  40. public function testChildren()
  41. {
  42. $postAdmin = new PostAdmin('sonata.post.admin.post', 'Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  43. $this->assertFalse($postAdmin->hasChildren());
  44. $this->assertFalse($postAdmin->hasChild('comment'));
  45. $commentAdmin = new CommentAdmin('sonata.post.admin.comment', 'Application\Sonata\NewsBundle\Entity\Comment', 'SonataNewsBundle:CommentAdmin');
  46. $postAdmin->addChild($commentAdmin);
  47. $this->assertTrue($postAdmin->hasChildren());
  48. $this->assertTrue($postAdmin->hasChild('sonata.post.admin.comment'));
  49. $this->assertEquals('sonata.post.admin.comment', $postAdmin->getChild('sonata.post.admin.comment')->getCode());
  50. $this->assertEquals('sonata.post.admin.post|sonata.post.admin.comment', $postAdmin->getChild('sonata.post.admin.comment')->getBaseCodeRoute());
  51. $this->assertEquals($postAdmin, $postAdmin->getChild('sonata.post.admin.comment')->getParent());
  52. $this->assertFalse($postAdmin->isChild());
  53. $this->assertTrue($commentAdmin->isChild());
  54. $this->assertEquals(array('sonata.post.admin.comment' => $commentAdmin), $postAdmin->getChildren());
  55. }
  56. /**
  57. * @covers Sonata\AdminBundle\Admin\Admin::configure
  58. */
  59. public function testConfigure()
  60. {
  61. $admin = new PostAdmin('sonata.post.admin.post', 'Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  62. $this->assertNotNull($admin->getUniqid());
  63. $admin->initialize();
  64. $this->assertNotNull($admin->getUniqid());
  65. $this->assertEquals('Post', $admin->getClassnameLabel());
  66. $admin = new CommentAdmin('sonata.post.admin.comment', 'Application\Sonata\NewsBundle\Entity\Comment', 'SonataNewsBundle:CommentAdmin');
  67. $admin->setClassnameLabel('postcomment');
  68. $admin->initialize();
  69. $this->assertEquals('postcomment', $admin->getClassnameLabel());
  70. }
  71. public function testConfigureWithValidParentAssociationMapping()
  72. {
  73. $admin = new PostAdmin('sonata.post.admin.post', 'Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  74. $admin->setParentAssociationMapping('Category');
  75. $admin->initialize();
  76. $this->assertEquals('Category', $admin->getParentAssociationMapping());
  77. }
  78. public function provideGetBaseRoutePattern()
  79. {
  80. return array(
  81. array(
  82. 'Application\Sonata\NewsBundle\Entity\Post',
  83. '/sonata/news/post'
  84. ),
  85. array(
  86. 'Application\Sonata\NewsBundle\Document\Post',
  87. '/sonata/news/post'
  88. ),
  89. array(
  90. 'MyApplication\MyBundle\Entity\Post',
  91. '/myapplication/my/post'
  92. ),
  93. array(
  94. 'MyApplication\MyBundle\Entity\Post\Category',
  95. '/myapplication/my/post-category'
  96. ),
  97. array(
  98. 'MyApplication\MyBundle\Entity\Product\Category',
  99. '/myapplication/my/product-category'
  100. ),
  101. array(
  102. 'MyApplication\MyBundle\Entity\Other\Product\Category',
  103. '/myapplication/my/other-product-category'
  104. ),
  105. array(
  106. 'Symfony\Cmf\Bundle\FooBundle\Document\Menu',
  107. '/cmf/foo/menu'
  108. ),
  109. array(
  110. 'Symfony\Cmf\Bundle\FooBundle\Doctrine\Phpcr\Menu',
  111. '/cmf/foo/menu'
  112. ),
  113. array(
  114. 'Symfony\Bundle\BarBarBundle\Doctrine\Phpcr\Menu',
  115. '/symfony/barbar/menu'
  116. ),
  117. array(
  118. 'Symfony\Bundle\BarBarBundle\Doctrine\Phpcr\Menu\Item',
  119. '/symfony/barbar/menu-item'
  120. ),
  121. array(
  122. 'Symfony\Cmf\Bundle\FooBundle\Doctrine\Orm\Menu',
  123. '/cmf/foo/menu'
  124. ),
  125. array(
  126. 'Symfony\Cmf\Bundle\FooBundle\Doctrine\MongoDB\Menu',
  127. '/cmf/foo/menu'
  128. ),
  129. array(
  130. 'Symfony\Cmf\Bundle\FooBundle\Doctrine\CouchDB\Menu',
  131. '/cmf/foo/menu'
  132. ),
  133. );
  134. }
  135. /**
  136. * @dataProvider provideGetBaseRoutePattern
  137. */
  138. public function testGetBaseRoutePattern($objFqn, $expected)
  139. {
  140. $admin = new PostAdmin('sonata.post.admin.post', $objFqn, 'SonataNewsBundle:PostAdmin');
  141. $this->assertEquals($expected, $admin->getBaseRoutePattern());
  142. }
  143. public function testGetBaseRoutePatternWithChildAdmin()
  144. {
  145. $postAdmin = new PostAdmin('sonata.post.admin.post', 'Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  146. $commentAdmin = new CommentAdmin('sonata.post.admin.comment', 'Application\Sonata\NewsBundle\Entity\Comment', 'SonataNewsBundle:CommentAdmin');
  147. $commentAdmin->setParent($postAdmin);
  148. $this->assertEquals('/sonata/news/post/{id}/comment', $commentAdmin->getBaseRoutePattern());
  149. }
  150. /**
  151. * @expectedException RuntimeException
  152. */
  153. public function testGetBaseRoutePatternWithUnreconizedClassname()
  154. {
  155. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  156. $admin->getBaseRoutePattern();
  157. }
  158. public function provideGetBaseRouteName()
  159. {
  160. return array(
  161. array(
  162. 'Application\Sonata\NewsBundle\Entity\Post',
  163. 'admin_sonata_news_post'
  164. ),
  165. array(
  166. 'Application\Sonata\NewsBundle\Document\Post',
  167. 'admin_sonata_news_post'
  168. ),
  169. array(
  170. 'MyApplication\MyBundle\Entity\Post',
  171. 'admin_myapplication_my_post'
  172. ),
  173. array(
  174. 'MyApplication\MyBundle\Entity\Post\Category',
  175. 'admin_myapplication_my_post_category'
  176. ),
  177. array(
  178. 'MyApplication\MyBundle\Entity\Product\Category',
  179. 'admin_myapplication_my_product_category'
  180. ),
  181. array(
  182. 'MyApplication\MyBundle\Entity\Other\Product\Category',
  183. 'admin_myapplication_my_other_product_category'
  184. ),
  185. array(
  186. 'Symfony\Cmf\Bundle\FooBundle\Document\Menu',
  187. 'admin_cmf_foo_menu'
  188. ),
  189. array(
  190. 'Symfony\Cmf\Bundle\FooBundle\Doctrine\Phpcr\Menu',
  191. 'admin_cmf_foo_menu'
  192. ),
  193. array(
  194. 'Symfony\Bundle\BarBarBundle\Doctrine\Phpcr\Menu',
  195. 'admin_symfony_barbar_menu'
  196. ),
  197. array(
  198. 'Symfony\Bundle\BarBarBundle\Doctrine\Phpcr\Menu\Item',
  199. 'admin_symfony_barbar_menu_item'
  200. ),
  201. array(
  202. 'Symfony\Cmf\Bundle\FooBundle\Doctrine\Orm\Menu',
  203. 'admin_cmf_foo_menu'
  204. ),
  205. array(
  206. 'Symfony\Cmf\Bundle\FooBundle\Doctrine\MongoDB\Menu',
  207. 'admin_cmf_foo_menu'
  208. ),
  209. array(
  210. 'Symfony\Cmf\Bundle\FooBundle\Doctrine\CouchDB\Menu',
  211. 'admin_cmf_foo_menu'
  212. ),
  213. );
  214. }
  215. /**
  216. * @dataProvider provideGetBaseRouteName
  217. */
  218. public function testGetBaseRouteName($objFqn, $expected)
  219. {
  220. $admin = new PostAdmin('sonata.post.admin.post', $objFqn, 'SonataNewsBundle:PostAdmin');
  221. $this->assertEquals($expected, $admin->getBaseRouteName());
  222. }
  223. public function testGetBaseRouteNameWithChildAdmin()
  224. {
  225. $pathInfo = new \Sonata\AdminBundle\Route\PathInfoBuilder($this->getMock('Sonata\AdminBundle\Model\AuditManagerInterface'));
  226. $postAdmin = new PostAdmin('sonata.post.admin.post', 'Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  227. $postAdmin->setRouteBuilder($pathInfo);
  228. $postAdmin->initialize();
  229. $commentAdmin = new CommentAdmin('sonata.post.admin.comment', 'Application\Sonata\NewsBundle\Entity\Comment', 'SonataNewsBundle:CommentAdmin');
  230. $commentAdmin->setRouteBuilder($pathInfo);
  231. $commentAdmin->initialize();
  232. $postAdmin->addChild($commentAdmin);
  233. $this->assertEquals('admin_sonata_news_post_comment', $commentAdmin->getBaseRouteName());
  234. $this->assertTrue($postAdmin->hasRoute('show'));
  235. $this->assertTrue($postAdmin->hasRoute('sonata.post.admin.post.show'));
  236. $this->assertTrue($postAdmin->hasRoute('sonata.post.admin.post|sonata.post.admin.comment.show'));
  237. $this->assertTrue($postAdmin->hasRoute('sonata.post.admin.comment.list'));
  238. $this->assertFalse($postAdmin->hasRoute('sonata.post.admin.post|sonata.post.admin.comment.edit'));
  239. $this->assertFalse($commentAdmin->hasRoute('edit'));
  240. }
  241. /**
  242. * @expectedException RuntimeException
  243. */
  244. public function testGetBaseRouteNameWithUnreconizedClassname()
  245. {
  246. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  247. $admin->getBaseRouteName();
  248. }
  249. /**
  250. * @covers Sonata\AdminBundle\Admin\Admin::setUniqid
  251. * @covers Sonata\AdminBundle\Admin\Admin::getUniqid
  252. */
  253. public function testUniqid()
  254. {
  255. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  256. $uniqid = uniqid();
  257. $admin->setUniqid($uniqid);
  258. $this->assertEquals($uniqid, $admin->getUniqid());
  259. }
  260. public function testToString()
  261. {
  262. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  263. $s = new \stdClass();
  264. $this->assertNotEmpty($admin->toString($s));
  265. $s = new FooToString;
  266. $this->assertEquals('salut', $admin->toString($s));
  267. // To string method is implemented, but returns null
  268. $s = new FooToStringNull;
  269. $this->assertNotEmpty($admin->toString($s));
  270. $this->assertEquals("", $admin->toString(false));
  271. }
  272. public function testIsAclEnabled()
  273. {
  274. $postAdmin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  275. $this->assertFalse($postAdmin->isAclEnabled());
  276. $commentAdmin = new CommentAdmin('sonata.post.admin.comment', 'Application\Sonata\NewsBundle\Entity\Comment', 'SonataNewsBundle:CommentAdmin');
  277. $commentAdmin->setSecurityHandler($this->getMock('Sonata\AdminBundle\Security\Handler\AclSecurityHandlerInterface'));
  278. $this->assertTrue($commentAdmin->isAclEnabled());
  279. }
  280. /**
  281. * @covers Sonata\AdminBundle\Admin\Admin::getSubClasses
  282. * @covers Sonata\AdminBundle\Admin\Admin::getSubClass
  283. * @covers Sonata\AdminBundle\Admin\Admin::setSubClasses
  284. * @covers Sonata\AdminBundle\Admin\Admin::hasSubClass
  285. * @covers Sonata\AdminBundle\Admin\Admin::hasActiveSubClass
  286. * @covers Sonata\AdminBundle\Admin\Admin::getActiveSubClass
  287. * @covers Sonata\AdminBundle\Admin\Admin::getActiveSubclassCode
  288. * @covers Sonata\AdminBundle\Admin\Admin::getClass
  289. */
  290. public function testSubClass()
  291. {
  292. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  293. $this->assertFalse($admin->hasSubClass('test'));
  294. $this->assertFalse($admin->hasActiveSubClass());
  295. $this->assertCount(0, $admin->getSubClasses());
  296. $this->assertNull($admin->getActiveSubClass());
  297. $this->assertNull($admin->getActiveSubclassCode());
  298. $this->assertEquals('NewsBundle\Entity\Post', $admin->getClass());
  299. // Just for the record, if there is no inheritance set, the getSubject is not used
  300. // the getSubject can also lead to some issue
  301. $admin->setSubject(new \stdClass());
  302. $this->assertEquals('stdClass', $admin->getClass());
  303. $admin->setSubClasses(array('extended1' => 'NewsBundle\Entity\PostExtended1', 'extended2' => 'NewsBundle\Entity\PostExtended2'));
  304. $this->assertFalse($admin->hasSubClass('test'));
  305. $this->assertTrue($admin->hasSubClass('extended1'));
  306. $this->assertFalse($admin->hasActiveSubClass());
  307. $this->assertCount(2, $admin->getSubClasses());
  308. $this->assertNull($admin->getActiveSubClass());
  309. $this->assertNull($admin->getActiveSubclassCode());
  310. $this->assertEquals('stdClass', $admin->getClass());
  311. $request = new \Symfony\Component\HttpFoundation\Request(array('subclass' => 'extended1'));
  312. $admin->setRequest($request);
  313. $this->assertFalse($admin->hasSubClass('test'));
  314. $this->assertTrue($admin->hasSubClass('extended1'));
  315. $this->assertTrue($admin->hasActiveSubClass());
  316. $this->assertCount(2, $admin->getSubClasses());
  317. $this->assertEquals('stdClass', $admin->getActiveSubClass());
  318. $this->assertEquals('extended1', $admin->getActiveSubclassCode());
  319. $this->assertEquals('stdClass', $admin->getClass());
  320. $request->query->set('subclass', 'inject');
  321. $this->assertNull($admin->getActiveSubclassCode());
  322. }
  323. /**
  324. * @expectedException RuntimeException
  325. */
  326. public function testNonExistantSubclass()
  327. {
  328. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  329. $admin->setRequest(new \Symfony\Component\HttpFoundation\Request(array('subclass' => 'inject')));
  330. $admin->setSubClasses(array('extended1' => 'NewsBundle\Entity\PostExtended1', 'extended2' => 'NewsBundle\Entity\PostExtended2'));
  331. $this->assertTrue($admin->hasActiveSubClass());
  332. $admin->getActiveSubClass();
  333. }
  334. public function testGetPerPageOptions()
  335. {
  336. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  337. $this->assertEquals(array(15, 25, 50, 100, 150, 200), $admin->getPerPageOptions());
  338. $admin->setPerPageOptions(array(500, 1000));
  339. $this->assertEquals(array(500, 1000), $admin->getPerPageOptions());
  340. }
  341. public function testGetLabelTranslatorStrategy()
  342. {
  343. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  344. $this->assertNull($admin->getLabelTranslatorStrategy());
  345. $labelTranslatorStrategy = $this->getMock('Sonata\AdminBundle\Translator\LabelTranslatorStrategyInterface');
  346. $admin->setLabelTranslatorStrategy($labelTranslatorStrategy);
  347. $this->assertEquals($labelTranslatorStrategy, $admin->getLabelTranslatorStrategy());
  348. }
  349. public function testGetRouteBuilder()
  350. {
  351. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  352. $this->assertNull($admin->getRouteBuilder());
  353. $routeBuilder = $this->getMock('Sonata\AdminBundle\Builder\RouteBuilderInterface');
  354. $admin->setRouteBuilder($routeBuilder);
  355. $this->assertEquals($routeBuilder, $admin->getRouteBuilder());
  356. }
  357. public function testGetMenuFactory()
  358. {
  359. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  360. $this->assertNull($admin->getMenuFactory());
  361. $menuFactory = $this->getMock('Knp\Menu\FactoryInterface');
  362. $admin->setMenuFactory($menuFactory);
  363. $this->assertEquals($menuFactory, $admin->getMenuFactory());
  364. }
  365. public function testGetExtensions()
  366. {
  367. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  368. $this->assertEquals(array(), $admin->getExtensions());
  369. $adminExtension1 = $this->getMock('Sonata\AdminBundle\Admin\AdminExtensionInterface');
  370. $adminExtension2 = $this->getMock('Sonata\AdminBundle\Admin\AdminExtensionInterface');
  371. $admin->addExtension($adminExtension1);
  372. $admin->addExtension($adminExtension2);
  373. $this->assertEquals(array($adminExtension1, $adminExtension2), $admin->getExtensions());
  374. }
  375. public function testGetFilterTheme()
  376. {
  377. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  378. $this->assertEquals(array(), $admin->getFilterTheme());
  379. $admin->setFilterTheme(array('FooTheme'));
  380. $this->assertEquals(array('FooTheme'), $admin->getFilterTheme());
  381. }
  382. public function testGetFormTheme()
  383. {
  384. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  385. $this->assertEquals(array(), $admin->getFormTheme());
  386. $admin->setFormTheme(array('FooTheme'));
  387. $this->assertEquals(array('FooTheme'), $admin->getFormTheme());
  388. }
  389. public function testGetValidator()
  390. {
  391. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  392. $this->assertNull($admin->getValidator());
  393. $validator = $this->getMock('Symfony\Component\Validator\ValidatorInterface');
  394. $admin->setValidator($validator);
  395. $this->assertEquals($validator, $admin->getValidator());
  396. }
  397. public function testGetSecurityHandler()
  398. {
  399. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  400. $this->assertNull($admin->getSecurityHandler());
  401. $securityHandler = $this->getMock('Sonata\AdminBundle\Security\Handler\SecurityHandlerInterface');
  402. $admin->setSecurityHandler($securityHandler);
  403. $this->assertEquals($securityHandler, $admin->getSecurityHandler());
  404. }
  405. public function testGetSecurityInformation()
  406. {
  407. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  408. $this->assertEquals(array(), $admin->getSecurityInformation());
  409. $securityInformation = array('ROLE_FOO', 'ROLE_BAR');
  410. $admin->setSecurityInformation($securityInformation);
  411. $this->assertEquals($securityInformation, $admin->getSecurityInformation());
  412. }
  413. public function testGetManagerType()
  414. {
  415. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  416. $this->assertNull($admin->getManagerType());
  417. $admin->setManagerType('foo_orm');
  418. $this->assertEquals('foo_orm', $admin->getManagerType());
  419. }
  420. public function testGetModelManager()
  421. {
  422. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  423. $this->assertNull($admin->getModelManager());
  424. $modelManager = $this->getMock('Sonata\AdminBundle\Model\ModelManagerInterface');
  425. $admin->setModelManager($modelManager);
  426. $this->assertEquals($modelManager, $admin->getModelManager());
  427. }
  428. public function testGetBaseCodeRoute()
  429. {
  430. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  431. $this->assertSame('', $admin->getBaseCodeRoute());
  432. $admin->setBaseCodeRoute('foo');
  433. $this->assertEquals('foo', $admin->getBaseCodeRoute());
  434. }
  435. public function testGetRouteGenerator()
  436. {
  437. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  438. $this->assertNull($admin->getRouteGenerator());
  439. $routeGenerator = $this->getMock('Sonata\AdminBundle\Route\RouteGeneratorInterface');
  440. $admin->setRouteGenerator($routeGenerator);
  441. $this->assertEquals($routeGenerator, $admin->getRouteGenerator());
  442. }
  443. public function testGetConfigurationPool()
  444. {
  445. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  446. $this->assertNull($admin->getConfigurationPool());
  447. $pool = $this->getMockBuilder('Sonata\AdminBundle\Admin\Pool')
  448. ->disableOriginalConstructor()
  449. ->getMock();
  450. $admin->setConfigurationPool($pool);
  451. $this->assertEquals($pool, $admin->getConfigurationPool());
  452. }
  453. public function testGetShowBuilder()
  454. {
  455. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  456. $this->assertNull($admin->getShowBuilder());
  457. $showBuilder = $this->getMock('Sonata\AdminBundle\Builder\ShowBuilderInterface');
  458. $admin->setShowBuilder($showBuilder);
  459. $this->assertEquals($showBuilder, $admin->getShowBuilder());
  460. }
  461. public function testGetListBuilder()
  462. {
  463. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  464. $this->assertNull($admin->getListBuilder());
  465. $listBuilder = $this->getMock('Sonata\AdminBundle\Builder\ListBuilderInterface');
  466. $admin->setListBuilder($listBuilder);
  467. $this->assertEquals($listBuilder, $admin->getListBuilder());
  468. }
  469. public function testGetDatagridBuilder()
  470. {
  471. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  472. $this->assertNull($admin->getDatagridBuilder());
  473. $datagridBuilder = $this->getMock('Sonata\AdminBundle\Builder\DatagridBuilderInterface');
  474. $admin->setDatagridBuilder($datagridBuilder);
  475. $this->assertEquals($datagridBuilder, $admin->getDatagridBuilder());
  476. }
  477. public function testGetFormContractor()
  478. {
  479. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  480. $this->assertNull($admin->getFormContractor());
  481. $formContractor = $this->getMock('Sonata\AdminBundle\Builder\FormContractorInterface');
  482. $admin->setFormContractor($formContractor);
  483. $this->assertEquals($formContractor, $admin->getFormContractor());
  484. }
  485. public function testGetRequest()
  486. {
  487. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  488. $this->assertFalse($admin->hasRequest());
  489. $request = new Request();
  490. $admin->setRequest($request);
  491. $this->assertEquals($request, $admin->getRequest());
  492. $this->assertTrue($admin->hasRequest());
  493. }
  494. public function testGetRequestWithException()
  495. {
  496. $this->setExpectedException('RuntimeException', 'The Request object has not been set');
  497. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  498. $admin->getRequest();
  499. }
  500. public function testGetTranslationDomain()
  501. {
  502. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  503. $this->assertEquals('messages', $admin->getTranslationDomain());
  504. $admin->setTranslationDomain('foo');
  505. $this->assertEquals('foo', $admin->getTranslationDomain());
  506. }
  507. public function testGetTranslator()
  508. {
  509. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  510. $this->assertNull($admin->getTranslator());
  511. $translator = $this->getMock('Symfony\Component\Translation\TranslatorInterface');
  512. $admin->setTranslator($translator);
  513. $this->assertEquals($translator, $admin->getTranslator());
  514. }
  515. public function testGetShowGroups()
  516. {
  517. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  518. $this->assertEquals(false, $admin->getShowGroups());
  519. $groups = array('foo', 'bar', 'baz');
  520. $admin->setShowGroups($groups);
  521. $this->assertSame($groups, $admin->getShowGroups());
  522. }
  523. public function testGetFormGroups()
  524. {
  525. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  526. $this->assertEquals(false, $admin->getFormGroups());
  527. $groups = array('foo', 'bar', 'baz');
  528. $admin->setFormGroups($groups);
  529. $this->assertSame($groups, $admin->getFormGroups());
  530. }
  531. public function testGetMaxPageLinks()
  532. {
  533. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  534. $this->assertEquals(25, $admin->getMaxPageLinks());
  535. $admin->setMaxPageLinks(14);
  536. $this->assertSame(14, $admin->getMaxPageLinks());
  537. }
  538. public function testGetMaxPerPage()
  539. {
  540. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  541. $this->assertEquals(25, $admin->getMaxPerPage());
  542. $admin->setMaxPerPage(94);
  543. $this->assertSame(94, $admin->getMaxPerPage());
  544. }
  545. public function testGetLabel()
  546. {
  547. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  548. $this->assertNull($admin->getLabel());
  549. $admin->setLabel('FooLabel');
  550. $this->assertSame('FooLabel', $admin->getLabel());
  551. }
  552. public function testGetBaseController()
  553. {
  554. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  555. $this->assertEquals('SonataNewsBundle:PostAdmin', $admin->getBaseControllerName());
  556. $admin->setBaseControllerName('SonataNewsBundle:FooAdmin');
  557. $this->assertSame('SonataNewsBundle:FooAdmin', $admin->getBaseControllerName());
  558. }
  559. public function testGetTemplates()
  560. {
  561. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  562. $this->assertEquals(array(), $admin->getTemplates());
  563. $templates = array(
  564. 'list' => 'FooAdminBundle:CRUD:list.html.twig',
  565. 'show' => 'FooAdminBundle:CRUD:show.html.twig',
  566. 'edit' => 'FooAdminBundle:CRUD:edit.html.twig'
  567. );
  568. $admin->setTemplates($templates);
  569. $this->assertSame($templates, $admin->getTemplates());
  570. }
  571. public function testGetTemplate1()
  572. {
  573. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  574. $this->assertNull($admin->getTemplate('edit'));
  575. $templates = array(
  576. 'list' => 'FooAdminBundle:CRUD:list.html.twig',
  577. 'show' => 'FooAdminBundle:CRUD:show.html.twig',
  578. 'edit' => 'FooAdminBundle:CRUD:edit.html.twig'
  579. );
  580. $admin->setTemplate('edit', 'FooAdminBundle:CRUD:edit.html.twig');
  581. $admin->setTemplate('show', 'FooAdminBundle:CRUD:show.html.twig');
  582. $this->assertEquals('FooAdminBundle:CRUD:edit.html.twig', $admin->getTemplate('edit'));
  583. $this->assertEquals('FooAdminBundle:CRUD:show.html.twig', $admin->getTemplate('show'));
  584. }
  585. public function testGetTemplate2()
  586. {
  587. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  588. $this->assertNull($admin->getTemplate('edit'));
  589. $templates = array(
  590. 'list' => 'FooAdminBundle:CRUD:list.html.twig',
  591. 'show' => 'FooAdminBundle:CRUD:show.html.twig',
  592. 'edit' => 'FooAdminBundle:CRUD:edit.html.twig'
  593. );
  594. $admin->setTemplates($templates);
  595. $this->assertEquals('FooAdminBundle:CRUD:edit.html.twig', $admin->getTemplate('edit'));
  596. $this->assertEquals('FooAdminBundle:CRUD:show.html.twig', $admin->getTemplate('show'));
  597. }
  598. public function testGetIdParameter()
  599. {
  600. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  601. $this->assertEquals('id', $admin->getIdParameter());
  602. $this->assertFalse($admin->isChild());
  603. $parentAdmin = new PostAdmin('sonata.post.admin.post_parent', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostParentAdmin');
  604. $admin->setParent($parentAdmin);
  605. $this->assertTrue($admin->isChild());
  606. $this->assertEquals('childId', $admin->getIdParameter());
  607. }
  608. public function testGetExportFormats()
  609. {
  610. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  611. $this->assertEquals(array('json', 'xml', 'csv', 'xls'), $admin->getExportFormats());
  612. }
  613. public function testGetUrlsafeIdentifier()
  614. {
  615. $admin = new PostAdmin('sonata.post.admin.post', 'Acme\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  616. $entity = new \stdClass();
  617. $modelManager = $this->getMock('Sonata\AdminBundle\Model\ModelManagerInterface');
  618. $modelManager->expects($this->once())
  619. ->method('getUrlsafeIdentifier')
  620. ->with($this->equalTo($entity))
  621. ->will($this->returnValue('foo'));
  622. $admin->setModelManager($modelManager);
  623. $this->assertEquals('foo', $admin->getUrlsafeIdentifier($entity));
  624. }
  625. public function testDeterminedPerPageValue()
  626. {
  627. $admin = new PostAdmin('sonata.post.admin.post', 'Acme\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  628. $this->assertFalse($admin->determinedPerPageValue('foo'));
  629. $this->assertFalse($admin->determinedPerPageValue(123));
  630. $this->assertTrue($admin->determinedPerPageValue(15));
  631. $this->assertTrue($admin->determinedPerPageValue(25));
  632. $this->assertTrue($admin->determinedPerPageValue(50));
  633. $this->assertTrue($admin->determinedPerPageValue(100));
  634. $this->assertTrue($admin->determinedPerPageValue(150));
  635. $this->assertTrue($admin->determinedPerPageValue(200));
  636. $admin->setPerPageOptions(array(101, 102, 103));
  637. $this->assertFalse($admin->determinedPerPageValue(15));
  638. $this->assertFalse($admin->determinedPerPageValue(25));
  639. $this->assertFalse($admin->determinedPerPageValue(200));
  640. $this->assertTrue($admin->determinedPerPageValue(101));
  641. $this->assertTrue($admin->determinedPerPageValue(102));
  642. $this->assertTrue($admin->determinedPerPageValue(103));
  643. }
  644. public function testIsGranted()
  645. {
  646. $admin = new PostAdmin('sonata.post.admin.post', 'Acme\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  647. $entity = new \stdClass();
  648. $securityHandler=$this->getMock('Sonata\AdminBundle\Security\Handler\AclSecurityHandlerInterface');
  649. $securityHandler->expects($this->any())
  650. ->method('isGranted')
  651. ->will($this->returnCallback(function (AdminInterface $adminIn, $attributes, $object = nul) use ($admin, $entity) {
  652. if ($admin == $adminIn && $attributes == 'FOO') {
  653. if (($object == $admin) || ($object == $entity)) {
  654. return true;
  655. }
  656. }
  657. return false;
  658. }));
  659. $admin->setSecurityHandler($securityHandler);
  660. $this->assertTrue($admin->isGranted('FOO'));
  661. $this->assertTrue($admin->isGranted('FOO', $entity));
  662. $this->assertFalse($admin->isGranted('BAR'));
  663. $this->assertFalse($admin->isGranted('BAR', $entity));
  664. }
  665. public function testSupportsPreviewMode()
  666. {
  667. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  668. $this->assertFalse($admin->supportsPreviewMode());
  669. }
  670. public function testGetPermissionsShow()
  671. {
  672. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  673. $this->assertEquals(array('LIST'), $admin->getPermissionsShow(Admin::CONTEXT_DASHBOARD));
  674. $this->assertEquals(array('LIST'), $admin->getPermissionsShow(Admin::CONTEXT_MENU));
  675. $this->assertEquals(array('LIST'), $admin->getPermissionsShow('foo'));
  676. }
  677. public function testShowIn()
  678. {
  679. $admin = new PostAdmin('sonata.post.admin.post', 'Acme\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  680. $securityHandler=$this->getMock('Sonata\AdminBundle\Security\Handler\AclSecurityHandlerInterface');
  681. $securityHandler->expects($this->any())
  682. ->method('isGranted')
  683. ->will($this->returnCallback(function (AdminInterface $adminIn, $attributes, $object = nul) use ($admin) {
  684. if ($admin == $adminIn && $attributes == array('LIST')) {
  685. return true;
  686. }
  687. return false;
  688. }));
  689. $admin->setSecurityHandler($securityHandler);
  690. $this->assertTrue($admin->showIn(Admin::CONTEXT_DASHBOARD));
  691. $this->assertTrue($admin->showIn(Admin::CONTEXT_MENU));
  692. $this->assertTrue($admin->showIn('foo'));
  693. }
  694. public function testGetObjectIdentifier()
  695. {
  696. $admin = new PostAdmin('sonata.post.admin.post', 'Acme\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  697. $this->assertEquals('sonata.post.admin.post', $admin->getObjectIdentifier());
  698. }
  699. public function testTransWithNoTranslator()
  700. {
  701. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  702. $this->assertEquals('foo', $admin->trans('foo'));
  703. }
  704. public function testTrans()
  705. {
  706. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  707. $admin->setTranslationDomain('fooMessageDomain');
  708. $translator = $this->getMock('Symfony\Component\Translation\TranslatorInterface');
  709. $admin->setTranslator($translator);
  710. $translator->expects($this->once())
  711. ->method('trans')
  712. ->with($this->equalTo('foo'), $this->equalTo(array()), $this->equalTo('fooMessageDomain'))
  713. ->will($this->returnValue('fooTranslated'));
  714. $this->assertEquals('fooTranslated', $admin->trans('foo'));
  715. }
  716. public function testTransWithMessageDomain()
  717. {
  718. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  719. $translator = $this->getMock('Symfony\Component\Translation\TranslatorInterface');
  720. $admin->setTranslator($translator);
  721. $translator->expects($this->once())
  722. ->method('trans')
  723. ->with($this->equalTo('foo'), $this->equalTo(array('name'=>'Andrej')), $this->equalTo('fooMessageDomain'))
  724. ->will($this->returnValue('fooTranslated'));
  725. $this->assertEquals('fooTranslated', $admin->trans('foo', array('name'=>'Andrej'), 'fooMessageDomain'));
  726. }
  727. public function testTransChoiceWithNoTranslator()
  728. {
  729. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  730. $this->assertEquals('foo', $admin->transChoice('foo', 2));
  731. }
  732. public function testTransChoice()
  733. {
  734. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  735. $admin->setTranslationDomain('fooMessageDomain');
  736. $translator = $this->getMock('Symfony\Component\Translation\TranslatorInterface');
  737. $admin->setTranslator($translator);
  738. $translator->expects($this->once())
  739. ->method('transChoice')
  740. ->with($this->equalTo('foo'), $this->equalTo(2), $this->equalTo(array()), $this->equalTo('fooMessageDomain'))
  741. ->will($this->returnValue('fooTranslated'));
  742. $this->assertEquals('fooTranslated', $admin->transChoice('foo', 2));
  743. }
  744. public function testTransChoiceWithMessageDomain()
  745. {
  746. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  747. $translator = $this->getMock('Symfony\Component\Translation\TranslatorInterface');
  748. $admin->setTranslator($translator);
  749. $translator->expects($this->once())
  750. ->method('transChoice')
  751. ->with($this->equalTo('foo'), $this->equalTo(2), $this->equalTo(array('name'=>'Andrej')), $this->equalTo('fooMessageDomain'))
  752. ->will($this->returnValue('fooTranslated'));
  753. $this->assertEquals('fooTranslated', $admin->transChoice('foo', 2, array('name'=>'Andrej'), 'fooMessageDomain'));
  754. }
  755. public function testSetPersistFilters()
  756. {
  757. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  758. $this->assertAttributeEquals(false, 'persistFilters', $admin);
  759. $admin->setPersistFilters(true);
  760. $this->assertAttributeEquals(true, 'persistFilters', $admin);
  761. }
  762. public function testGetRootCode()
  763. {
  764. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  765. $this->assertEquals('sonata.post.admin.post', $admin->getRootCode());
  766. $parentAdmin = new PostAdmin('sonata.post.admin.post.parent', 'NewsBundle\Entity\PostParent', 'SonataNewsBundle:PostParentAdmin');
  767. $parentFieldDescription = $this->getMock('Sonata\AdminBundle\Admin\FieldDescriptionInterface');
  768. $parentFieldDescription->expects($this->once())
  769. ->method('getAdmin')
  770. ->will($this->returnValue($parentAdmin));
  771. $this->assertNull($admin->getParentFieldDescription());
  772. $admin->setParentFieldDescription($parentFieldDescription);
  773. $this->assertEquals($parentFieldDescription, $admin->getParentFieldDescription());
  774. $this->assertEquals('sonata.post.admin.post.parent', $admin->getRootCode());
  775. }
  776. public function testGetRoot()
  777. {
  778. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  779. $this->assertEquals($admin, $admin->getRoot());
  780. $parentAdmin = new PostAdmin('sonata.post.admin.post.parent', 'NewsBundle\Entity\PostParent', 'SonataNewsBundle:PostParentAdmin');
  781. $parentFieldDescription = $this->getMock('Sonata\AdminBundle\Admin\FieldDescriptionInterface');
  782. $parentFieldDescription->expects($this->once())
  783. ->method('getAdmin')
  784. ->will($this->returnValue($parentAdmin));
  785. $this->assertNull($admin->getParentFieldDescription());
  786. $admin->setParentFieldDescription($parentFieldDescription);
  787. $this->assertEquals($parentFieldDescription, $admin->getParentFieldDescription());
  788. $this->assertEquals($parentAdmin, $admin->getRoot());
  789. }
  790. public function testGetExportFields()
  791. {
  792. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  793. $modelManager = $this->getMock('Sonata\AdminBundle\Model\ModelManagerInterface');
  794. $modelManager->expects($this->once())
  795. ->method('getExportFields')
  796. ->with($this->equalTo('NewsBundle\Entity\Post'))
  797. ->will($this->returnValue(array('foo', 'bar')));
  798. $admin->setModelManager($modelManager);
  799. $this->assertSame(array('foo', 'bar'), $admin->getExportFields());
  800. }
  801. public function testGetPersistentParametersWithNoExtension()
  802. {
  803. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  804. $this->assertEmpty($admin->getPersistentParameters());
  805. }
  806. /**
  807. * @expectedException \RuntimeException
  808. */
  809. public function testGetPersistentParametersWithInvalidExtension()
  810. {
  811. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  812. $extension = $this->getMock('Sonata\AdminBundle\Admin\AdminExtensionInterface');
  813. $extension->expects($this->once())->method('getPersistentParameters')->will($this->returnValue(null));
  814. $admin->addExtension($extension);
  815. $admin->getPersistentParameters();
  816. }
  817. public function testGetPersistentParametersWithValidExtension()
  818. {
  819. $expected = array(
  820. 'context' => 'foobar'
  821. );
  822. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  823. $extension = $this->getMock('Sonata\AdminBundle\Admin\AdminExtensionInterface');
  824. $extension->expects($this->once())->method('getPersistentParameters')->will($this->returnValue($expected));
  825. $admin->addExtension($extension);
  826. $this->assertEquals($expected, $admin->getPersistentParameters());
  827. }
  828. }