PermissionsTest.php 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <?php
  2. use Encore\Admin\Auth\Database\Administrator;
  3. use Encore\Admin\Auth\Database\Permission;
  4. use Encore\Admin\Auth\Database\Role;
  5. class PermissionsTest extends TestCase
  6. {
  7. public function setUp()
  8. {
  9. parent::setUp();
  10. $this->be(Administrator::first(), 'admin');
  11. }
  12. public function testPermissionsIndex()
  13. {
  14. $this->assertTrue(Administrator::first()->isAdministrator());
  15. $this->visit('admin/auth/permissions')
  16. ->see('Permissions');
  17. }
  18. public function testAddAndDeletePermissions()
  19. {
  20. $this->visit('admin/auth/permissions/create')
  21. ->see('Permissions')
  22. ->submitForm('Submit', ['slug' => 'can-edit', 'name' => 'Can edit', 'http_path' => 'users/1/edit', 'http_method' => ['GET']])
  23. ->seePageIs('admin/auth/permissions')
  24. ->visit('admin/auth/permissions/create')
  25. ->see('Permissions')
  26. ->submitForm('Submit', ['slug' => 'can-delete', 'name' => 'Can delete', 'http_path' => 'users/1', 'http_method' => ['DELETE']])
  27. ->seePageIs('admin/auth/permissions')
  28. ->seeInDatabase(config('admin.database.permissions_table'), ['slug' => 'can-edit', 'name' => 'Can edit', 'http_path' => 'users/1/edit', 'http_method' => 'GET'])
  29. ->seeInDatabase(config('admin.database.permissions_table'), ['slug' => 'can-delete', 'name' => 'Can delete', 'http_path' => 'users/1', 'http_method' => 'DELETE'])
  30. ->assertEquals(7, Permission::count());
  31. $this->assertTrue(Administrator::first()->can('can-edit'));
  32. $this->assertTrue(Administrator::first()->can('can-delete'));
  33. $this->delete('admin/auth/permissions/6')
  34. ->assertEquals(6, Permission::count());
  35. $this->delete('admin/auth/permissions/7')
  36. ->assertEquals(5, Permission::count());
  37. }
  38. public function testAddPermissionToRole()
  39. {
  40. $this->visit('admin/auth/permissions/create')
  41. ->see('Permissions')
  42. ->submitForm('Submit', ['slug' => 'can-create', 'name' => 'Can Create', 'http_path' => 'users/create', 'http_method' => ['GET']])
  43. ->seePageIs('admin/auth/permissions');
  44. $this->assertEquals(6, Permission::count());
  45. $this->visit('admin/auth/roles/1/edit')
  46. ->see('Edit')
  47. ->submitForm('Submit', ['permissions' => [1]])
  48. ->seePageIs('admin/auth/roles')
  49. ->seeInDatabase(config('admin.database.role_permissions_table'), ['role_id' => 1, 'permission_id' => 1]);
  50. }
  51. public function testAddPermissionToUser()
  52. {
  53. $this->visit('admin/auth/permissions/create')
  54. ->see('Permissions')
  55. ->submitForm('Submit', ['slug' => 'can-create', 'name' => 'Can Create', 'http_path' => 'users/create', 'http_method' => ['GET']])
  56. ->seePageIs('admin/auth/permissions');
  57. $this->assertEquals(6, Permission::count());
  58. $this->visit('admin/auth/users/1/edit')
  59. ->see('Edit')
  60. ->submitForm('Submit', ['permissions' => [1], 'roles' => [1]])
  61. ->seePageIs('admin/auth/users')
  62. ->seeInDatabase(config('admin.database.user_permissions_table'), ['user_id' => 1, 'permission_id' => 1])
  63. ->seeInDatabase(config('admin.database.role_users_table'), ['user_id' => 1, 'role_id' => 1]);
  64. }
  65. public function testAddUserAndAssignPermission()
  66. {
  67. $user = [
  68. 'username' => 'Test',
  69. 'name' => 'Name',
  70. 'password' => '123456',
  71. 'password_confirmation' => '123456',
  72. ];
  73. $this->visit('admin/auth/users/create')
  74. ->see('Create')
  75. ->submitForm('Submit', $user)
  76. ->seePageIs('admin/auth/users')
  77. ->seeInDatabase(config('admin.database.users_table'), ['username' => 'Test']);
  78. $this->assertFalse(Administrator::find(2)->isAdministrator());
  79. $this->visit('admin/auth/permissions/create')
  80. ->see('Permissions')
  81. ->submitForm('Submit', ['slug' => 'can-update', 'name' => 'Can Update', 'http_path' => 'users/*/edit', 'http_method' => ['GET']])
  82. ->seePageIs('admin/auth/permissions');
  83. $this->assertEquals(6, Permission::count());
  84. $this->visit('admin/auth/permissions/create')
  85. ->see('Permissions')
  86. ->submitForm('Submit', ['slug' => 'can-remove', 'name' => 'Can Remove', 'http_path' => 'users/*', 'http_method' => ['DELETE']])
  87. ->seePageIs('admin/auth/permissions');
  88. $this->assertEquals(7, Permission::count());
  89. $this->visit('admin/auth/users/2/edit')
  90. ->see('Edit')
  91. ->submitForm('Submit', ['permissions' => [6]])
  92. ->seePageIs('admin/auth/users')
  93. ->seeInDatabase(config('admin.database.user_permissions_table'), ['user_id' => 2, 'permission_id' => 6]);
  94. $this->assertTrue(Administrator::find(2)->can('can-update'));
  95. $this->assertTrue(Administrator::find(2)->cannot('can-remove'));
  96. $this->visit('admin/auth/users/2/edit')
  97. ->see('Edit')
  98. ->submitForm('Submit', ['permissions' => [7]])
  99. ->seePageIs('admin/auth/users')
  100. ->seeInDatabase(config('admin.database.user_permissions_table'), ['user_id' => 2, 'permission_id' => 7]);
  101. $this->assertTrue(Administrator::find(2)->can('can-remove'));
  102. $this->visit('admin/auth/users/2/edit')
  103. ->see('Edit')
  104. ->submitForm('Submit', ['permissions' => []])
  105. ->seePageIs('admin/auth/users')
  106. ->missingFromDatabase(config('admin.database.user_permissions_table'), ['user_id' => 2, 'permission_id' => 6])
  107. ->missingFromDatabase(config('admin.database.user_permissions_table'), ['user_id' => 2, 'permission_id' => 7]);
  108. $this->assertTrue(Administrator::find(2)->cannot('can-update'));
  109. $this->assertTrue(Administrator::find(2)->cannot('can-remove'));
  110. }
  111. public function testPermissionThroughRole()
  112. {
  113. $user = [
  114. 'username' => 'Test',
  115. 'name' => 'Name',
  116. 'password' => '123456',
  117. 'password_confirmation' => '123456',
  118. ];
  119. // 1.add a user
  120. $this->visit('admin/auth/users/create')
  121. ->see('Create')
  122. ->submitForm('Submit', $user)
  123. ->seePageIs('admin/auth/users')
  124. ->seeInDatabase(config('admin.database.users_table'), ['username' => 'Test']);
  125. $this->assertFalse(Administrator::find(2)->isAdministrator());
  126. // 2.add a role
  127. $this->visit('admin/auth/roles/create')
  128. ->see('Roles')
  129. ->submitForm('Submit', ['slug' => 'developer', 'name' => 'Developer...'])
  130. ->seePageIs('admin/auth/roles')
  131. ->seeInDatabase(config('admin.database.roles_table'), ['slug' => 'developer', 'name' => 'Developer...'])
  132. ->assertEquals(2, Role::count());
  133. $this->assertFalse(Administrator::find(2)->isRole('developer'));
  134. // 3.assign role to user
  135. $this->visit('admin/auth/users/2/edit')
  136. ->see('Edit')
  137. ->submitForm('Submit', ['roles' => [2]])
  138. ->seePageIs('admin/auth/users')
  139. ->seeInDatabase(config('admin.database.role_users_table'), ['user_id' => 2, 'role_id' => 2]);
  140. $this->assertTrue(Administrator::find(2)->isRole('developer'));
  141. // 4.add a permission
  142. $this->visit('admin/auth/permissions/create')
  143. ->see('Permissions')
  144. ->submitForm('Submit', ['slug' => 'can-remove', 'name' => 'Can Remove', 'http_path' => 'users/*', 'http_method' => ['DELETE']])
  145. ->seePageIs('admin/auth/permissions');
  146. $this->assertEquals(6, Permission::count());
  147. $this->assertTrue(Administrator::find(2)->cannot('can-remove'));
  148. // 5.assign permission to role
  149. $this->visit('admin/auth/roles/2/edit')
  150. ->see('Edit')
  151. ->submitForm('Submit', ['permissions' => [6]])
  152. ->seePageIs('admin/auth/roles')
  153. ->seeInDatabase(config('admin.database.role_permissions_table'), ['role_id' => 2, 'permission_id' => 6]);
  154. $this->assertTrue(Administrator::find(2)->can('can-remove'));
  155. }
  156. public function testEditPermission()
  157. {
  158. $this->visit('admin/auth/permissions/create')
  159. ->see('Permissions')
  160. ->submitForm('Submit', ['slug' => 'can-edit', 'name' => 'Can edit', 'http_path' => 'users/1/edit', 'http_method' => ['GET']])
  161. ->seePageIs('admin/auth/permissions')
  162. ->seeInDatabase(config('admin.database.permissions_table'), ['slug' => 'can-edit'])
  163. ->seeInDatabase(config('admin.database.permissions_table'), ['name' => 'Can edit'])
  164. ->assertEquals(6, Permission::count());
  165. $this->visit('admin/auth/permissions/1/edit')
  166. ->see('Permissions')
  167. ->submitForm('Submit', ['slug' => 'can-delete'])
  168. ->seePageIs('admin/auth/permissions')
  169. ->seeInDatabase(config('admin.database.permissions_table'), ['slug' => 'can-delete'])
  170. ->assertEquals(6, Permission::count());
  171. }
  172. }