AdminTest.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  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\Route\RouteCollection;
  13. class PostAdmin extends Admin
  14. {
  15. protected $metadataClass = null;
  16. public function setParentAssociationMapping($associationMapping)
  17. {
  18. $this->parentAssociationMapping = $associationMapping;
  19. }
  20. public function setClassMetaData($classMetaData)
  21. {
  22. $this->classMetaData = $classMetaData;
  23. }
  24. public function getClassMetaData()
  25. {
  26. if ($this->classMetaData) {
  27. return $this->classMetaData;
  28. }
  29. return parent::getClassMetaData();
  30. }
  31. }
  32. class CommentAdmin extends Admin
  33. {
  34. public function setClassnameLabel($label)
  35. {
  36. $this->classnameLabel = $label;
  37. }
  38. public function configureRoutes(RouteCollection $collection)
  39. {
  40. $collection->remove('edit');
  41. }
  42. }
  43. class AdminTest extends \PHPUnit_Framework_TestCase
  44. {
  45. /**
  46. * @covers Sonata\AdminBundle\Admin\Admin::__construct
  47. */
  48. public function testConstructor()
  49. {
  50. $class = 'Application\Sonata\NewsBundle\Entity\Post';
  51. $baseControllerName = 'SonataNewsBundle:PostAdmin';
  52. $admin = new PostAdmin('sonata.post.admin.post', $class, $baseControllerName);
  53. $this->assertInstanceOf('Sonata\AdminBundle\Admin\Admin', $admin);
  54. $this->assertEquals($class, $admin->getClass());
  55. $this->assertEquals($baseControllerName, $admin->getBaseControllerName());
  56. }
  57. /**
  58. * @covers Sonata\AdminBundle\Admin\Admin::hasChild
  59. * @covers Sonata\AdminBundle\Admin\Admin::addChild
  60. * @covers Sonata\AdminBundle\Admin\Admin::getChild
  61. * @covers Sonata\AdminBundle\Admin\Admin::isChild
  62. * @covers Sonata\AdminBundle\Admin\Admin::hasChildren
  63. * @covers Sonata\AdminBundle\Admin\Admin::getChildren
  64. */
  65. public function testChildren()
  66. {
  67. $postAdmin = new PostAdmin('sonata.post.admin.post', 'Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  68. $this->assertFalse($postAdmin->hasChildren());
  69. $this->assertFalse($postAdmin->hasChild('comment'));
  70. $commentAdmin = new CommentAdmin('sonata.post.admin.comment', 'Application\Sonata\NewsBundle\Entity\Comment', 'SonataNewsBundle:CommentAdmin');
  71. $postAdmin->addChild($commentAdmin);
  72. $this->assertTrue($postAdmin->hasChildren());
  73. $this->assertTrue($postAdmin->hasChild('sonata.post.admin.comment'));
  74. $this->assertEquals('sonata.post.admin.comment', $postAdmin->getChild('sonata.post.admin.comment')->getCode());
  75. $this->assertEquals('sonata.post.admin.post|sonata.post.admin.comment', $postAdmin->getChild('sonata.post.admin.comment')->getBaseCodeRoute());
  76. $this->assertEquals($postAdmin, $postAdmin->getChild('sonata.post.admin.comment')->getParent());
  77. $this->assertFalse($postAdmin->isChild());
  78. $this->assertTrue($commentAdmin->isChild());
  79. $this->assertEquals(array('sonata.post.admin.comment' => $commentAdmin), $postAdmin->getChildren());
  80. }
  81. /**
  82. * @covers Sonata\AdminBundle\Admin\Admin::configure
  83. */
  84. public function testConfigure()
  85. {
  86. $admin = new PostAdmin('sonata.post.admin.post', 'Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  87. $this->assertTrue($admin->getUniqid() == "");
  88. $admin->configure();
  89. $this->assertFalse($admin->getUniqid() == "");
  90. $this->assertEquals('post', $admin->getClassnameLabel());
  91. $admin = new CommentAdmin('sonata.post.admin.comment', 'Application\Sonata\NewsBundle\Entity\Comment', 'SonataNewsBundle:CommentAdmin');
  92. $admin->setClassnameLabel('postcomment');
  93. $admin->configure();
  94. $this->assertEquals('postcomment', $admin->getClassnameLabel());
  95. }
  96. public function testConfigureWithValidParentAssociationMapping()
  97. {
  98. $admin = new PostAdmin('sonata.post.admin.post', 'Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  99. $admin->setParentAssociationMapping('Category');
  100. $admin->configure();
  101. $this->assertEquals('Category', $admin->getParentAssociationMapping());
  102. }
  103. public function testGetBaseRoutePattern()
  104. {
  105. $admin = new PostAdmin('sonata.post.admin.post', 'Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  106. $this->assertEquals('/sonata/news/post', $admin->getBaseRoutePattern());
  107. }
  108. public function testGetBaseRoutePatternWithChildAdmin()
  109. {
  110. $postAdmin = new PostAdmin('sonata.post.admin.post', 'Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  111. $commentAdmin = new CommentAdmin('sonata.post.admin.comment', 'Application\Sonata\NewsBundle\Entity\Comment', 'SonataNewsBundle:CommentAdmin');
  112. $commentAdmin->setParent($postAdmin);
  113. $this->assertEquals('/sonata/news/post/{id}/comment', $commentAdmin->getBaseRoutePattern());
  114. }
  115. /**
  116. * @expectedException RuntimeException
  117. */
  118. public function testGetBaseRoutePatternWithUnreconizedClassname()
  119. {
  120. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  121. $admin->getBaseRoutePattern();
  122. }
  123. public function testGetBaseRouteName()
  124. {
  125. $admin = new PostAdmin('sonata.post.admin.post', 'Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  126. $this->assertEquals('admin_sonata_news_post', $admin->getBaseRouteName());
  127. }
  128. public function testGetBaseRouteNameWithChildAdmin()
  129. {
  130. $postAdmin = new PostAdmin('sonata.post.admin.post', 'Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  131. $postAdmin->configure();
  132. $commentAdmin = new CommentAdmin('sonata.post.admin.comment', 'Application\Sonata\NewsBundle\Entity\Comment', 'SonataNewsBundle:CommentAdmin');
  133. $commentAdmin->configure();
  134. $postAdmin->addChild($commentAdmin);
  135. $this->assertEquals('admin_sonata_news_post_comment', $commentAdmin->getBaseRouteName());
  136. $this->assertTrue($postAdmin->hasRoute('show'));
  137. $this->assertTrue($postAdmin->hasRoute('sonata.post.admin.post.show'));
  138. $this->assertTrue($postAdmin->hasRoute('sonata.post.admin.post|sonata.post.admin.comment.show'));
  139. $this->assertFalse($postAdmin->hasRoute('sonata.post.admin.post|sonata.post.admin.comment.edit'));
  140. $this->assertFalse($commentAdmin->hasRoute('edit'));
  141. }
  142. /**
  143. * @expectedException RuntimeException
  144. */
  145. public function testGetBaseRouteNameWithUnreconizedClassname()
  146. {
  147. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  148. $admin->getBaseRouteName();
  149. }
  150. /**
  151. * @covers Sonata\AdminBundle\Admin\Admin::setUniqid
  152. * @covers Sonata\AdminBundle\Admin\Admin::getUniqid
  153. */
  154. public function testUniqid()
  155. {
  156. $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
  157. $uniqid = uniqid();
  158. $admin->setUniqid($uniqid);
  159. $this->assertEquals($uniqid, $admin->getUniqid());
  160. }
  161. }