AddDependencyCallsCompilerPassTest.php 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723
  1. <?php
  2. /*
  3. * This file is part of the Sonata Project 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\DependencyInjection;
  11. use Sonata\AdminBundle\DependencyInjection\Compiler\AddDependencyCallsCompilerPass;
  12. use Sonata\AdminBundle\DependencyInjection\SonataAdminExtension;
  13. use Symfony\Component\DependencyInjection\ContainerBuilder;
  14. use Symfony\Component\DependencyInjection\DefinitionDecorator;
  15. /**
  16. * @author Tiago Garcia
  17. */
  18. class AddDependencyCallsCompilerPassTest extends \PHPUnit_Framework_TestCase
  19. {
  20. /** @var SonataAdminExtension $extension */
  21. private $extension;
  22. /** @var array $config */
  23. private $config;
  24. public function setUp()
  25. {
  26. parent::setUp();
  27. $this->extension = new SonataAdminExtension();
  28. $this->config = $this->getConfig();
  29. }
  30. public function testTranslatorDisabled()
  31. {
  32. $this->setExpectedException(
  33. 'RuntimeException', 'The "translator" service is not yet enabled.
  34. It\'s required by SonataAdmin to display all labels properly.
  35. To learn how to enable the translator service please visit:
  36. http://symfony.com/doc/current/translation.html#configuration
  37. '
  38. );
  39. $container = $this->getContainer();
  40. $container->removeAlias('translator');
  41. $this->extension->load(array($this->config), $container);
  42. $compilerPass = new AddDependencyCallsCompilerPass();
  43. $compilerPass->process($container);
  44. $container->compile();
  45. }
  46. /**
  47. * @covers \Sonata\AdminBundle\DependencyInjection\Compiler\AddDependencyCallsCompilerPass::process
  48. */
  49. public function testProcessParsingFullValidConfig()
  50. {
  51. $container = $this->getContainer();
  52. $this->extension->load(array($this->config), $container);
  53. $compilerPass = new AddDependencyCallsCompilerPass();
  54. $compilerPass->process($container);
  55. $container->compile();
  56. $this->assertTrue($container->hasParameter('sonata.admin.configuration.dashboard_groups'));
  57. $dashboardGroupsSettings = $container->getParameter('sonata.admin.configuration.dashboard_groups');
  58. $this->assertArrayHasKey('sonata_group_one', $dashboardGroupsSettings);
  59. $this->assertArrayHasKey('label', $dashboardGroupsSettings['sonata_group_one']);
  60. $this->assertArrayHasKey('label_catalogue', $dashboardGroupsSettings['sonata_group_one']);
  61. $this->assertArrayHasKey('items', $dashboardGroupsSettings['sonata_group_one']);
  62. $this->assertArrayHasKey('item_adds', $dashboardGroupsSettings['sonata_group_one']);
  63. $this->assertArrayHasKey('roles', $dashboardGroupsSettings['sonata_group_one']);
  64. $this->assertSame('Group One Label', $dashboardGroupsSettings['sonata_group_one']['label']);
  65. $this->assertSame('SonataAdminBundle', $dashboardGroupsSettings['sonata_group_one']['label_catalogue']);
  66. $this->assertSame(false, $dashboardGroupsSettings['sonata_group_one']['on_top']);
  67. $this->assertSame(true, $dashboardGroupsSettings['sonata_group_three']['on_top']);
  68. $this->assertArrayHasKey('admin', $dashboardGroupsSettings['sonata_group_one']['items'][0]);
  69. $this->assertArrayHasKey('route', $dashboardGroupsSettings['sonata_group_one']['items'][0]);
  70. $this->assertArrayHasKey('label', $dashboardGroupsSettings['sonata_group_one']['items'][0]);
  71. $this->assertArrayHasKey('route_params', $dashboardGroupsSettings['sonata_group_one']['items'][0]);
  72. $this->assertContains('sonata_post_admin', $dashboardGroupsSettings['sonata_group_one']['items'][0]);
  73. $this->assertArrayHasKey('admin', $dashboardGroupsSettings['sonata_group_one']['items'][1]);
  74. $this->assertArrayHasKey('route', $dashboardGroupsSettings['sonata_group_one']['items'][1]);
  75. $this->assertArrayHasKey('label', $dashboardGroupsSettings['sonata_group_one']['items'][1]);
  76. $this->assertArrayHasKey('route_params', $dashboardGroupsSettings['sonata_group_one']['items'][1]);
  77. $this->assertContains('blog_name', $dashboardGroupsSettings['sonata_group_one']['items'][1]);
  78. $this->assertContains('Blog', $dashboardGroupsSettings['sonata_group_one']['items'][1]);
  79. $this->assertSame('', $dashboardGroupsSettings['sonata_group_one']['items'][1]['admin']);
  80. $this->assertSame('blog_name', $dashboardGroupsSettings['sonata_group_one']['items'][1]['route']);
  81. $this->assertSame('Blog', $dashboardGroupsSettings['sonata_group_one']['items'][1]['label']);
  82. $this->assertSame(array(), $dashboardGroupsSettings['sonata_group_one']['items'][1]['route_params']);
  83. $this->assertArrayHasKey('admin', $dashboardGroupsSettings['sonata_group_one']['items'][2]);
  84. $this->assertArrayHasKey('route', $dashboardGroupsSettings['sonata_group_one']['items'][2]);
  85. $this->assertArrayHasKey('label', $dashboardGroupsSettings['sonata_group_one']['items'][2]);
  86. $this->assertArrayHasKey('route_params', $dashboardGroupsSettings['sonata_group_one']['items'][2]);
  87. $this->assertContains('blog_article', $dashboardGroupsSettings['sonata_group_one']['items'][2]);
  88. $this->assertContains('Article', $dashboardGroupsSettings['sonata_group_one']['items'][2]);
  89. $this->assertSame('', $dashboardGroupsSettings['sonata_group_one']['items'][2]['admin']);
  90. $this->assertSame('blog_article', $dashboardGroupsSettings['sonata_group_one']['items'][2]['route']);
  91. $this->assertSame('Article', $dashboardGroupsSettings['sonata_group_one']['items'][2]['label']);
  92. $this->assertSame(array('articleId' => 3), $dashboardGroupsSettings['sonata_group_one']['items'][2]['route_params']);
  93. $this->assertContains('sonata_news_admin', $dashboardGroupsSettings['sonata_group_one']['item_adds']);
  94. $this->assertContains('ROLE_ONE', $dashboardGroupsSettings['sonata_group_one']['roles']);
  95. $this->assertArrayHasKey('sonata_group_two', $dashboardGroupsSettings);
  96. $this->assertArrayHasKey('provider', $dashboardGroupsSettings['sonata_group_two']);
  97. $this->assertContains('my_menu', $dashboardGroupsSettings['sonata_group_two']['provider']);
  98. }
  99. /**
  100. * @covers \Sonata\AdminBundle\DependencyInjection\Compiler\AddDependencyCallsCompilerPass::process
  101. */
  102. public function testProcessResultingConfig()
  103. {
  104. $container = $this->getContainer();
  105. $this->extension->load(array($this->config), $container);
  106. $compilerPass = new AddDependencyCallsCompilerPass();
  107. $compilerPass->process($container);
  108. $container->compile();
  109. $this->assertTrue($container->hasDefinition('sonata.admin.pool'));
  110. $this->assertTrue($container->hasDefinition('sonata_post_admin'));
  111. $this->assertTrue($container->hasDefinition('sonata_article_admin'));
  112. $this->assertTrue($container->hasDefinition('sonata_news_admin'));
  113. $pool = $container->get('sonata.admin.pool');
  114. $adminServiceIds = $pool->getAdminServiceIds();
  115. $adminGroups = $pool->getAdminGroups();
  116. $adminClasses = $pool->getAdminClasses();
  117. $this->assertContains('sonata_post_admin', $adminServiceIds);
  118. $this->assertContains('sonata_article_admin', $adminServiceIds);
  119. $this->assertContains('sonata_news_admin', $adminServiceIds);
  120. $this->assertArrayHasKey('sonata_group_one', $adminGroups);
  121. $this->assertArrayHasKey('label', $adminGroups['sonata_group_one']);
  122. $this->assertArrayHasKey('label_catalogue', $adminGroups['sonata_group_one']);
  123. $this->assertArrayHasKey('items', $adminGroups['sonata_group_one']);
  124. $this->assertArrayHasKey('item_adds', $adminGroups['sonata_group_one']);
  125. $this->assertArrayHasKey('roles', $adminGroups['sonata_group_one']);
  126. $this->assertSame('Group One Label', $adminGroups['sonata_group_one']['label']);
  127. $this->assertSame('SonataAdminBundle', $adminGroups['sonata_group_one']['label_catalogue']);
  128. $this->assertSame(false, $adminGroups['sonata_group_one']['on_top']);
  129. $this->assertSame(true, $adminGroups['sonata_group_three']['on_top']);
  130. $this->assertContains('sonata_post_admin', $adminGroups['sonata_group_one']['items'][0]['admin']);
  131. $this->assertContains('sonata_news_admin', $adminGroups['sonata_group_one']['items']);
  132. $this->assertContains('sonata_news_admin', $adminGroups['sonata_group_one']['item_adds']);
  133. $this->assertFalse(in_array('sonata_article_admin', $adminGroups['sonata_group_one']['items']));
  134. $this->assertContains('ROLE_ONE', $adminGroups['sonata_group_one']['roles']);
  135. $this->assertArrayHasKey('sonata_group_two', $adminGroups);
  136. $this->assertArrayHasKey('provider', $adminGroups['sonata_group_two']);
  137. $this->assertContains('my_menu', $adminGroups['sonata_group_two']['provider']);
  138. $this->assertArrayHasKey('Sonata\AdminBundle\Tests\DependencyInjection\Post', $adminClasses);
  139. $this->assertContains('sonata_post_admin', $adminClasses['Sonata\AdminBundle\Tests\DependencyInjection\Post']);
  140. $this->assertArrayHasKey('Sonata\AdminBundle\Tests\DependencyInjection\Article', $adminClasses);
  141. $this->assertContains('sonata_article_admin', $adminClasses['Sonata\AdminBundle\Tests\DependencyInjection\Article']);
  142. $this->assertArrayHasKey('Sonata\AdminBundle\Tests\DependencyInjection\News', $adminClasses);
  143. $this->assertContains('sonata_news_admin', $adminClasses['Sonata\AdminBundle\Tests\DependencyInjection\News']);
  144. $newsRouteBuilderMethodCall = current(array_filter(
  145. $container->getDefinition('sonata_news_admin')->getMethodCalls(),
  146. function ($element) {
  147. return $element[0] == 'setRouteBuilder';
  148. }
  149. ));
  150. $this->assertSame(
  151. 'sonata.admin.route.path_info',
  152. (string) $newsRouteBuilderMethodCall[1][0],
  153. 'The news admin uses the orm, and should therefore use the path_info router.'
  154. );
  155. $articleRouteBuilderMethodCall = current(array_filter(
  156. $container->getDefinition('sonata_article_admin')->getMethodCalls(),
  157. function ($element) {
  158. return $element[0] == 'setRouteBuilder';
  159. }
  160. ));
  161. $this->assertSame(
  162. 'sonata.admin.route.path_info_slashes',
  163. (string) $articleRouteBuilderMethodCall[1][0],
  164. 'The article admin uses the odm, and should therefore use the path_info_slashes router.'
  165. );
  166. }
  167. public function testProcessSortAdmins()
  168. {
  169. $container = $this->getContainer();
  170. $config = $this->config;
  171. $config['options']['sort_admins'] = true;
  172. unset($config['dashboard']['groups']);
  173. $this->extension->load(array($config), $container);
  174. $compilerPass = new AddDependencyCallsCompilerPass();
  175. $compilerPass->process($container);
  176. $container->compile();
  177. // use array_values to check groups position
  178. $adminGroups = array_values($container->get('sonata.admin.pool')->getAdminGroups());
  179. $this->assertSame('sonata_group_one', $adminGroups['0']['label'], 'second group in configuration, first in list');
  180. $this->assertSame('1 Entry', $adminGroups[0]['items'][0]['label'], 'second entry for group in configuration, first in list');
  181. }
  182. public function testProcessGroupNameAsParameter()
  183. {
  184. $config = array(
  185. 'dashboard' => array(
  186. 'groups' => array(
  187. '%sonata.admin.parameter.groupname%' => array(),
  188. ),
  189. ),
  190. );
  191. $container = $this->getContainer();
  192. $container->setParameter('sonata.admin.parameter.groupname', 'resolved_group_name');
  193. $this->extension->load(array($config), $container);
  194. $compilerPass = new AddDependencyCallsCompilerPass();
  195. $compilerPass->process($container);
  196. $container->compile();
  197. $adminGroups = $container->get('sonata.admin.pool')->getAdminGroups();
  198. $this->assertArrayHasKey('resolved_group_name', $adminGroups);
  199. $this->assertFalse(array_key_exists('%sonata.admin.parameter.groupname%', $adminGroups));
  200. }
  201. public function testApplyTemplatesConfiguration()
  202. {
  203. $container = $this->getContainer();
  204. $this->extension->load(array($this->getConfig()), $container);
  205. $compilerPass = new AddDependencyCallsCompilerPass();
  206. $compilerPass->process($container);
  207. $callsPostAdmin = $container->getDefinition('sonata_post_admin')->getMethodCalls();
  208. foreach ($callsPostAdmin as $call) {
  209. list($name, $parameters) = $call;
  210. switch ($name) {
  211. case 'setTemplates':
  212. $this->assertSame('foobar.twig.html', $parameters[0]['user_block']);
  213. $this->assertSame('SonataAdminBundle:Pager:results.html.twig', $parameters[0]['pager_results']);
  214. $this->assertSame('SonataAdminBundle:Button:create_button.html.twig', $parameters[0]['button_create']);
  215. break;
  216. case 'setLabel':
  217. $this->assertSame('-', $parameters[0]);
  218. break;
  219. case 'setPagerType':
  220. $this->assertSame('default', $parameters[0]);
  221. break;
  222. }
  223. }
  224. $callsNewsAdmin = $container->getDefinition('sonata_news_admin')->getMethodCalls();
  225. foreach ($callsNewsAdmin as $call) {
  226. list($name, $parameters) = $call;
  227. switch ($name) {
  228. case 'setTemplates':
  229. $this->assertSame('foo.twig.html', $parameters[0]['user_block']);
  230. $this->assertSame('SonataAdminBundle:Pager:simple_pager_results.html.twig', $parameters[0]['pager_results']);
  231. break;
  232. case 'setLabel':
  233. $this->assertSame('Foo', $parameters[0]);
  234. break;
  235. case 'setPagerType':
  236. $this->assertSame('simple', $parameters[0]);
  237. break;
  238. }
  239. }
  240. }
  241. public function testApplyShowMosaicButtonConfiguration()
  242. {
  243. $container = $this->getContainer();
  244. $this->extension->load(array($this->getConfig()), $container);
  245. $compilerPass = new AddDependencyCallsCompilerPass();
  246. $compilerPass->process($container);
  247. $callsReportOneAdmin = $container->getDefinition('sonata_report_one_admin')->getMethodCalls();
  248. foreach ($callsReportOneAdmin as $call) {
  249. list($name, $parameters) = $call;
  250. if ($name == 'showMosaicButton') {
  251. $this->assertSame(false, $parameters[0]);
  252. }
  253. }
  254. $callsReportTwoAdmin = $container->getDefinition('sonata_report_two_admin')->getMethodCalls();
  255. foreach ($callsReportTwoAdmin as $call) {
  256. list($name, $parameters) = $call;
  257. if ($name == 'showMosaicButton') {
  258. $this->assertSame(true, $parameters[0]);
  259. }
  260. }
  261. }
  262. public function testProcessMultipleOnTopOptions()
  263. {
  264. $container = $this->getContainer();
  265. $config = $this->config;
  266. $this->assertArrayHasKey('sonata_group_four', $config['dashboard']['groups']);
  267. $config['dashboard']['groups']['sonata_group_four']['items'][] = array(
  268. 'route' => 'blog_article',
  269. 'label' => 'Article',
  270. 'route_params' => array('articleId' => 3),
  271. );
  272. $this->extension->load(array($config), $container);
  273. $compilerPass = new AddDependencyCallsCompilerPass();
  274. try {
  275. $compilerPass->process($container);
  276. } catch (\RuntimeException $e) {
  277. $this->assertSame('You can\'t use "on_top" option with multiple same name groups.', $e->getMessage());
  278. return;
  279. }
  280. $this->fail('An expected exception has not been raised.');
  281. }
  282. public function testProcessMultipleOnTopOptionsAdditionalGroup()
  283. {
  284. $container = $this->getContainer();
  285. $config = $this->config;
  286. $config['dashboard']['groups']['sonata_group_five'] = array(
  287. 'label' => 'Group One Label',
  288. 'label_catalogue' => 'SonataAdminBundle',
  289. 'on_top' => true,
  290. 'items' => array(
  291. 'sonata_post_admin',
  292. array(
  293. 'route' => 'blog_name',
  294. 'label' => 'Blog',
  295. ),
  296. array(
  297. 'route' => 'blog_article',
  298. 'label' => 'Article',
  299. 'route_params' => array('articleId' => 3),
  300. ),
  301. ),
  302. 'item_adds' => array(
  303. 'sonata_news_admin',
  304. ),
  305. 'roles' => array('ROLE_ONE'),
  306. );
  307. $this->extension->load(array($config), $container);
  308. $compilerPass = new AddDependencyCallsCompilerPass();
  309. try {
  310. $compilerPass->process($container);
  311. } catch (\RuntimeException $e) {
  312. $this->assertSame('You can\'t use "on_top" option with multiple same name groups.', $e->getMessage());
  313. return;
  314. }
  315. $this->fail('An expected exception has not been raised.');
  316. }
  317. public function testProcessMultipleOnTopOptionsInServiceDefinition()
  318. {
  319. $container = $this->getContainer();
  320. $config = $this->config;
  321. $config['dashboard']['groups'] = array();
  322. $this->extension->load(array($config), $container);
  323. $compilerPass = new AddDependencyCallsCompilerPass();
  324. $container
  325. ->register('sonata_report_one_admin')
  326. ->setClass('Sonata\AdminBundle\Tests\DependencyInjection\MockAdmin')
  327. ->setArguments(array('', 'Sonata\AdminBundle\Tests\DependencyInjection\ReportOne', 'SonataAdminBundle:CRUD'))
  328. ->addTag('sonata.admin', array('group' => 'sonata_report_group', 'manager_type' => 'orm', 'on_top' => true));
  329. try {
  330. $compilerPass->process($container);
  331. } catch (\RuntimeException $e) {
  332. $this->assertSame('You can\'t use "on_top" option with multiple same name groups.', $e->getMessage());
  333. return;
  334. }
  335. $this->fail('An expected exception has not been raised.');
  336. }
  337. public function testProcessMultipleOnTopOptionsInServiceDefinition1()
  338. {
  339. $container = $this->getContainer();
  340. $config = $this->config;
  341. $config['dashboard']['groups'] = array();
  342. $this->extension->load(array($config), $container);
  343. $compilerPass = new AddDependencyCallsCompilerPass();
  344. $container
  345. ->register('sonata_report_two_admin')
  346. ->setClass('Sonata\AdminBundle\Tests\DependencyInjection\MockAdmin')
  347. ->setArguments(array('', 'Sonata\AdminBundle\Tests\DependencyInjection\ReportOne', 'SonataAdminBundle:CRUD'))
  348. ->addTag('sonata.admin', array('group' => 'sonata_report_group', 'manager_type' => 'orm', 'on_top' => false));
  349. try {
  350. $compilerPass->process($container);
  351. } catch (\RuntimeException $e) {
  352. $this->assertSame('You can\'t use "on_top" option with multiple same name groups.', $e->getMessage());
  353. return;
  354. }
  355. $this->fail('An expected exception has not been raised.');
  356. }
  357. public function testProcessMultipleOnTopOptionsInServiceDefinition2()
  358. {
  359. $container = $this->getContainer();
  360. $config = $this->config;
  361. $config['dashboard']['groups'] = array();
  362. $this->extension->load(array($config), $container);
  363. $compilerPass = new AddDependencyCallsCompilerPass();
  364. $container
  365. ->register('sonata_document_one_admin')
  366. ->setClass('Sonata\AdminBundle\Tests\DependencyInjection\MockAdmin')
  367. ->setArguments(array('', 'Sonata\AdminBundle\Tests\DependencyInjection\ReportOne', 'SonataAdminBundle:CRUD'))
  368. ->addTag('sonata.admin', array('group' => 'sonata_document_group', 'manager_type' => 'orm', 'on_top' => false));
  369. $container
  370. ->register('sonata_document_two_admin')
  371. ->setClass('Sonata\AdminBundle\Tests\DependencyInjection\MockAdmin')
  372. ->setArguments(array('', 'Sonata\AdminBundle\Tests\DependencyInjection\ReportOne', 'SonataAdminBundle:CRUD'))
  373. ->addTag('sonata.admin', array('group' => 'sonata_document_group', 'manager_type' => 'orm', 'on_top' => false));
  374. try {
  375. $compilerPass->process($container);
  376. } catch (\RuntimeException $e) {
  377. $this->fail('An expected exception has been raised.');
  378. }
  379. }
  380. public function testProcessAbstractAdminServiceInServiceDefinition()
  381. {
  382. $container = $this->getContainer();
  383. $config = $this->config;
  384. $config['dashboard']['groups'] = array();
  385. $this->extension->load(array($config), $container);
  386. $compilerPass = new AddDependencyCallsCompilerPass();
  387. $container
  388. ->register('sonata_abstract_post_admin')
  389. ->setArguments(array('', 'Sonata\AdminBundle\Tests\DependencyInjection\Post', ''))
  390. ->setAbstract(true);
  391. $adminDefinition = new DefinitionDecorator('sonata_abstract_post_admin');
  392. $adminDefinition
  393. ->setClass('Sonata\AdminBundle\Tests\DependencyInjection\MockAbstractServiceAdmin')
  394. ->setArguments(array(0 => 'extra_argument_1'))
  395. ->addTag('sonata.admin', array('group' => 'sonata_post_one_group', 'manager_type' => 'orm'));
  396. $adminTwoDefinition = new DefinitionDecorator('sonata_abstract_post_admin');
  397. $adminTwoDefinition
  398. ->setClass('Sonata\AdminBundle\Tests\DependencyInjection\MockAbstractServiceAdmin')
  399. ->setArguments(array(0 => 'extra_argument_2', 'index_0' => 'should_not_override'))
  400. ->addTag('sonata.admin', array('group' => 'sonata_post_two_group', 'manager_type' => 'orm'));
  401. $container->addDefinitions(array(
  402. 'sonata_post_one_admin' => $adminDefinition,
  403. 'sonata_post_two_admin' => $adminTwoDefinition,
  404. ));
  405. $compilerPass->process($container);
  406. $container->compile();
  407. $pool = $container->get('sonata.admin.pool');
  408. $adminServiceIds = $pool->getAdminServiceIds();
  409. $this->assertContains('sonata_post_one_admin', $adminServiceIds);
  410. $this->assertContains('sonata_post_two_admin', $adminServiceIds);
  411. $this->assertTrue($container->hasDefinition('sonata_post_one_admin'));
  412. $this->assertTrue($container->hasDefinition('sonata_post_two_admin'));
  413. $definition = $container->getDefinition('sonata_post_one_admin');
  414. $this->assertSame('sonata_post_one_admin', $definition->getArgument(0));
  415. $this->assertSame('Sonata\AdminBundle\Tests\DependencyInjection\Post', $definition->getArgument(1));
  416. $this->assertSame('SonataAdminBundle:CRUD', $definition->getArgument(2));
  417. $this->assertSame('extra_argument_1', $definition->getArgument(3));
  418. $definition = $container->getDefinition('sonata_post_two_admin');
  419. $this->assertSame('sonata_post_two_admin', $definition->getArgument(0));
  420. $this->assertSame('Sonata\AdminBundle\Tests\DependencyInjection\Post', $definition->getArgument(1));
  421. $this->assertSame('SonataAdminBundle:CRUD', $definition->getArgument(2));
  422. $this->assertSame('extra_argument_2', $definition->getArgument(3));
  423. }
  424. /**
  425. * @return array
  426. */
  427. protected function getConfig()
  428. {
  429. $config = array(
  430. 'dashboard' => array(
  431. 'groups' => array(
  432. 'sonata_group_one' => array(
  433. 'label' => 'Group One Label',
  434. 'label_catalogue' => 'SonataAdminBundle',
  435. 'items' => array(
  436. 'sonata_post_admin',
  437. array(
  438. 'route' => 'blog_name',
  439. 'label' => 'Blog',
  440. ),
  441. array(
  442. 'route' => 'blog_article',
  443. 'label' => 'Article',
  444. 'route_params' => array('articleId' => 3),
  445. ),
  446. ),
  447. 'item_adds' => array(
  448. 'sonata_news_admin',
  449. ),
  450. 'roles' => array('ROLE_ONE'),
  451. ),
  452. 'sonata_group_two' => array(
  453. 'provider' => 'my_menu',
  454. ),
  455. 'sonata_group_three' => array(
  456. 'on_top' => true,
  457. ),
  458. 'sonata_group_four' => array(
  459. 'on_top' => true,
  460. 'label' => 'Group Four Label',
  461. 'label_catalogue' => 'SonataAdminBundle',
  462. 'items' => array(
  463. 'sonata_post_admin',
  464. ),
  465. ),
  466. ),
  467. ),
  468. 'admin_services' => array(
  469. 'sonata_post_admin' => array(
  470. 'templates' => array(
  471. 'view' => array('user_block' => 'foobar.twig.html'),
  472. ),
  473. ),
  474. 'sonata_news_admin' => array(
  475. 'label' => 'Foo',
  476. 'pager_type' => 'simple',
  477. 'templates' => array(
  478. 'view' => array('user_block' => 'foo.twig.html'),
  479. ),
  480. ),
  481. ),
  482. );
  483. return $config;
  484. }
  485. private function getContainer()
  486. {
  487. $container = new ContainerBuilder();
  488. $container->setParameter('kernel.bundles', array(
  489. 'SonataCoreBundle' => true,
  490. 'KnpMenuBundle' => true,
  491. ));
  492. $container->setParameter('kernel.cache_dir', '/tmp');
  493. $container->setParameter('kernel.debug', true);
  494. // Add dependencies for SonataAdminBundle (these services will never get called so dummy classes will do)
  495. $container
  496. ->register('twig')
  497. ->setClass('Symfony\Bundle\FrameworkBundle\Templating\EngineInterface');
  498. $container
  499. ->register('templating')
  500. ->setClass('Symfony\Bundle\FrameworkBundle\Templating\EngineInterface');
  501. $container
  502. ->register('translator')
  503. ->setClass('Symfony\Bundle\FrameworkBundle\Translation\TranslatorInterface');
  504. $container
  505. ->register('validator')
  506. ->setClass('Symfony\Bundle\FrameworkBundle\Validator\Validator');
  507. $container
  508. ->register('validator.validator_factory')
  509. ->setClass('Symfony\Bundle\FrameworkBundle\Validator\ConstraintValidatorFactory');
  510. $container
  511. ->register('router')
  512. ->setClass('Symfony\Component\Routing\RouterInterface');
  513. $container
  514. ->register('property_accessor')
  515. ->setClass('Symfony\Component\PropertyAccess\PropertyAccessor');
  516. $container
  517. ->register('form.factory')
  518. ->setClass('Symfony\Component\Form\FormFactoryInterface');
  519. foreach (array(
  520. 'doctrine_phpcr' => 'PHPCR',
  521. 'orm' => 'ORM', ) as $key => $bundleSubstring) {
  522. $container
  523. ->register(sprintf('sonata.admin.manager.%s', $key))
  524. ->setClass(sprintf(
  525. 'Sonata\Doctrine%sAdminBundle\Model\ModelManager',
  526. $bundleSubstring
  527. ));
  528. $container
  529. ->register(sprintf('sonata.admin.builder.%s_form', $key))
  530. ->setClass(sprintf(
  531. 'Sonata\Doctrine%sAdminBundle\Builder\FormContractor',
  532. $bundleSubstring
  533. ));
  534. $container
  535. ->register(sprintf('sonata.admin.builder.%s_show', $key))
  536. ->setClass(sprintf(
  537. 'Sonata\Doctrine%sAdminBundle\Builder\ShowBuilder',
  538. $bundleSubstring
  539. ));
  540. $container
  541. ->register(sprintf('sonata.admin.builder.%s_list', $key))
  542. ->setClass(sprintf(
  543. 'Sonata\Doctrine%sAdminBundle\Builder\ListBuilder',
  544. $bundleSubstring
  545. ));
  546. $container
  547. ->register(sprintf('sonata.admin.builder.%s_datagrid', $key))
  548. ->setClass(sprintf(
  549. 'Sonata\Doctrine%sAdminBundle\Builder\DatagridBuilder',
  550. $bundleSubstring
  551. ));
  552. }
  553. $container
  554. ->register('sonata.admin.route.path_info_slashes')
  555. ->setClass('Sonata\DoctrinePHPCRAdminBundle\Route\PathInfoBuilderSlashes');
  556. $container
  557. ->register('sonata.admin.route.cache')
  558. ->setClass('Sonata\AdminBundle\Route\RoutesCache');
  559. $container
  560. ->register('knp_menu.factory')
  561. ->setClass('Knp\Menu\Silex\RouterAwareFactory');
  562. $container
  563. ->register('knp_menu.menu_provider')
  564. ->setClass('Knp\Menu\Provider\MenuProviderInterface');
  565. $container
  566. ->register('knp_menu.matcher')
  567. ->setClass('Knp\Menu\Matcher\MatcherInterface');
  568. $container
  569. ->register('event_dispatcher')
  570. ->setClass('Symfony\Component\EventDispatcher\EventDispatcherInterface');
  571. // Add admin definition's
  572. $container
  573. ->register('sonata_news_admin')
  574. ->setClass('Sonata\AdminBundle\Tests\DependencyInjection\MockAdmin')
  575. ->setArguments(array('', 'Sonata\AdminBundle\Tests\DependencyInjection\News', 'SonataAdminBundle:CRUD'))
  576. ->addTag('sonata.admin', array('group' => 'sonata_group_two', 'label' => '5 Entry', 'manager_type' => 'orm'));
  577. $container
  578. ->register('sonata_post_admin')
  579. ->setClass('Sonata\AdminBundle\Tests\DependencyInjection\MockAdmin')
  580. ->setArguments(array('', 'Sonata\AdminBundle\Tests\DependencyInjection\Post', 'SonataAdminBundle:CRUD'))
  581. ->addTag('sonata.admin', array('group' => 'sonata_group_one', 'manager_type' => 'orm'));
  582. $container
  583. ->register('sonata_article_admin')
  584. ->setClass('Sonata\AdminBundle\Tests\DependencyInjection\MockAdmin')
  585. ->setArguments(array('', 'Sonata\AdminBundle\Tests\DependencyInjection\Article', 'SonataAdminBundle:CRUD'))
  586. ->addTag('sonata.admin', array('group' => 'sonata_group_one', 'label' => '1 Entry', 'manager_type' => 'doctrine_phpcr'));
  587. $container
  588. ->register('sonata_report_admin')
  589. ->setClass('Sonata\AdminBundle\Tests\DependencyInjection\MockAdmin')
  590. ->setArguments(array('', 'Sonata\AdminBundle\Tests\DependencyInjection\Report', 'SonataAdminBundle:CRUD'))
  591. ->addTag('sonata.admin', array('group' => 'sonata_report_group', 'manager_type' => 'orm', 'on_top' => true));
  592. $container
  593. ->register('sonata_report_one_admin')
  594. ->setClass('Sonata\AdminBundle\Tests\DependencyInjection\MockAdmin')
  595. ->setArguments(array('', 'Sonata\AdminBundle\Tests\DependencyInjection\ReportOne', 'SonataAdminBundle:CRUD'))
  596. ->addTag('sonata.admin', array('group' => 'sonata_report_one_group', 'manager_type' => 'orm', 'show_mosaic_button' => false));
  597. $container
  598. ->register('sonata_report_two_admin')
  599. ->setClass('Sonata\AdminBundle\Tests\DependencyInjection\MockAdmin')
  600. ->setArguments(array('', 'Sonata\AdminBundle\Tests\DependencyInjection\ReportTwo', 'SonataAdminBundle:CRUD'))
  601. ->addTag('sonata.admin', array('group' => 'sonata_report_two_group', 'manager_type' => 'orm', 'show_mosaic_button' => true));
  602. // translator
  603. $container
  604. ->register('translator.default')
  605. ->setClass('Symfony\Bundle\FrameworkBundle\Translation\Translator');
  606. $container->setAlias('translator', 'translator.default');
  607. return $container;
  608. }
  609. }