AdminObjectAclDataTest.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  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\Util;
  11. use Sonata\AdminBundle\Util\AdminObjectAclData;
  12. /**
  13. * @author Kévin Dunglas <kevin@les-tilleuls.coop>
  14. */
  15. class AdminObjectAclDataTest extends \PHPUnit_Framework_TestCase
  16. {
  17. public function testGetAdmin()
  18. {
  19. $adminObjectAclData = $this->createAdminObjectAclData();
  20. $this->isInstanceOf('Sonata\AdminBundle\Admin\AdminInterface', $adminObjectAclData->getAdmin());
  21. }
  22. public function testGetObject()
  23. {
  24. $adminObjectAclData = $this->createAdminObjectAclData();
  25. $this->isInstanceOf('stdClass', $adminObjectAclData->getObject());
  26. }
  27. public function testGetAclUsers()
  28. {
  29. $adminObjectAclData = $this->createAdminObjectAclData();
  30. $this->assertInstanceOf('ArrayIterator', $adminObjectAclData->getAclUsers());
  31. }
  32. public function testGetAclRoles()
  33. {
  34. $adminObjectAclData = $this->createAdminObjectAclData();
  35. $this->assertInstanceOf('ArrayIterator', $adminObjectAclData->getAclRoles());
  36. }
  37. public function testSetAcl()
  38. {
  39. $acl = $this->getMockBuilder('Symfony\Component\Security\Acl\Domain\Acl')
  40. ->disableOriginalConstructor()
  41. ->getMock();
  42. $adminObjectAclData = $this->createAdminObjectAclData();
  43. $ret = $adminObjectAclData->setAcl($acl);
  44. $this->assertSame($adminObjectAclData, $ret);
  45. return $adminObjectAclData;
  46. }
  47. /**
  48. * @depends testSetAcl
  49. */
  50. public function testGetAcl($adminObjectAclData)
  51. {
  52. $this->isInstanceOf('Symfony\Component\Security\Acl\Domain\Acl', $adminObjectAclData->getAcl());
  53. }
  54. public function testGetMasks()
  55. {
  56. $adminObjectAclData = $this->createAdminObjectAclData();
  57. $this->assertInternalType('array', $adminObjectAclData->getMasks());
  58. foreach ($adminObjectAclData->getMasks() as $key => $mask) {
  59. $this->assertInternalType('string', $key);
  60. $this->assertInternalType('int', $mask);
  61. }
  62. }
  63. /**
  64. * @group legacy
  65. */
  66. public function testSetForm()
  67. {
  68. $form = $this->getMockBuilder('\Symfony\Component\Form\Form')
  69. ->disableOriginalConstructor()
  70. ->getMock();
  71. $adminObjectAclData = $this->createAdminObjectAclData();
  72. $ret = $adminObjectAclData->setAclUsersForm($form);
  73. $this->assertSame($adminObjectAclData, $ret);
  74. return $adminObjectAclData;
  75. }
  76. /**
  77. * @depends testSetForm
  78. *
  79. * @group legacy
  80. */
  81. public function testGetForm($adminObjectAclData)
  82. {
  83. $this->isInstanceOf('Symfony\Component\Form\Form', $adminObjectAclData->getAclUsersForm());
  84. }
  85. public function testSetAclUsersForm()
  86. {
  87. $form = $this->getMockBuilder('\Symfony\Component\Form\Form')
  88. ->disableOriginalConstructor()
  89. ->getMock();
  90. $adminObjectAclData = $this->createAdminObjectAclData();
  91. $ret = $adminObjectAclData->setAclUsersForm($form);
  92. $this->assertSame($adminObjectAclData, $ret);
  93. return $adminObjectAclData;
  94. }
  95. /**
  96. * @depends testSetAclUsersForm
  97. */
  98. public function testGetAclUsersForm($adminObjectAclData)
  99. {
  100. $this->isInstanceOf('Symfony\Component\Form\Form', $adminObjectAclData->getAclUsersForm());
  101. }
  102. public function testSetAclRolesForm()
  103. {
  104. $form = $this->getMockBuilder('\Symfony\Component\Form\Form')
  105. ->disableOriginalConstructor()
  106. ->getMock();
  107. $adminObjectAclData = $this->createAdminObjectAclData();
  108. $ret = $adminObjectAclData->setAclRolesForm($form);
  109. $this->assertSame($adminObjectAclData, $ret);
  110. return $adminObjectAclData;
  111. }
  112. /**
  113. * @depends testSetAclRolesForm
  114. */
  115. public function testGetAclRolesForm($adminObjectAclData)
  116. {
  117. $this->isInstanceOf('Symfony\Component\Form\Form', $adminObjectAclData->getAclRolesForm());
  118. }
  119. public function testGetPermissions()
  120. {
  121. $adminObjectAclData = $this->createAdminObjectAclData();
  122. $this->assertInternalType('array', $adminObjectAclData->getPermissions());
  123. foreach ($adminObjectAclData->getPermissions() as $permission) {
  124. $this->assertInternalType('string', $permission);
  125. }
  126. }
  127. public function testGetUserPermissions()
  128. {
  129. $adminObjectAclDataOwner = $this->createAdminObjectAclData();
  130. $this->assertInternalType('array', $adminObjectAclDataOwner->getUserPermissions());
  131. foreach ($adminObjectAclDataOwner->getUserPermissions() as $permission) {
  132. $this->assertInternalType('string', $permission);
  133. }
  134. $this->assertTrue(false !== array_search('OWNER', $adminObjectAclDataOwner->getUserPermissions()));
  135. $this->assertTrue(false !== array_search('MASTER', $adminObjectAclDataOwner->getUserPermissions()));
  136. $adminObjectAclData = $this->createAdminObjectAclData(false);
  137. $this->assertInternalType('array', $adminObjectAclData->getUserPermissions());
  138. foreach ($adminObjectAclData->getUserPermissions() as $permission) {
  139. $this->assertInternalType('string', $permission);
  140. }
  141. $this->assertFalse(array_search('OWNER', $adminObjectAclData->getUserPermissions()));
  142. $this->assertFalse(array_search('MASTER', $adminObjectAclData->getUserPermissions()));
  143. }
  144. public function testIsOwner()
  145. {
  146. $adminObjectAclDataOwner = $this->createAdminObjectAclData();
  147. $this->assertTrue($adminObjectAclDataOwner->isOwner());
  148. $adminObjectAclData = $this->createAdminObjectAclData(false);
  149. $this->assertFalse($adminObjectAclData->isOwner());
  150. }
  151. public function testGetSecurityHandler()
  152. {
  153. $adminObjectAclData = $this->createAdminObjectAclData();
  154. $this->isInstanceOf('Sonata\AdminBundle\Security\Handler\AclSecurityHandlerInterface', $adminObjectAclData->getSecurityHandler());
  155. }
  156. public function testGetSecurityInformation()
  157. {
  158. $adminObjectAclData = $this->createAdminObjectAclData();
  159. $this->assertSame(array(), $adminObjectAclData->getSecurityInformation());
  160. }
  161. protected static function createAclUsers()
  162. {
  163. return new \ArrayIterator();
  164. }
  165. protected static function createAclRoles()
  166. {
  167. return new \ArrayIterator();
  168. }
  169. protected function createAdminObjectAclData($isOwner = true)
  170. {
  171. return new AdminObjectAclData($this->createAdmin($isOwner), new \stdClass(), self::createAclUsers(), '\Symfony\Component\Security\Acl\Permission\MaskBuilder', self::createAclRoles());
  172. }
  173. protected function createAdmin($isOwner = true)
  174. {
  175. $securityHandler = $this->getMockForAbstractClass('Sonata\AdminBundle\Security\Handler\AclSecurityHandlerInterface');
  176. $securityHandler->expects($this->any())
  177. ->method('getObjectPermissions')
  178. ->will($this->returnValue(array('VIEW', 'EDIT', 'DELETE', 'UNDELETE', 'OPERATOR', 'MASTER', 'OWNER')))
  179. ;
  180. $securityHandler->expects($this->any())
  181. ->method('buildSecurityInformation')
  182. ->with($this->isInstanceOf('Sonata\AdminBundle\Admin\AdminInterface'))
  183. ->will($this->returnValue(array()))
  184. ;
  185. $admin = $this->getMockForAbstractClass('Sonata\AdminBundle\Admin\AdminInterface');
  186. $admin->expects($this->any())
  187. ->method('isGranted')
  188. ->will($this->returnValue($isOwner))
  189. ;
  190. $admin->expects($this->any())
  191. ->method('getSecurityHandler')
  192. ->will($this->returnValue($securityHandler))
  193. ;
  194. return $admin;
  195. }
  196. }