PermissionsTest.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. namespace Tests\Feature;
  3. use Dcat\Admin\Models\Administrator;
  4. use Dcat\Admin\Models\Permission;
  5. use Dcat\Admin\Models\Role;
  6. use Tests\TestCase;
  7. class PermissionsTest extends TestCase
  8. {
  9. protected $login = true;
  10. public function testPermissionsIndex()
  11. {
  12. $this->assertTrue(Administrator::first()->isAdministrator());
  13. $this->visit('admin/auth/permissions')
  14. ->see('Permissions');
  15. }
  16. public function testAddAndDeletePermissions()
  17. {
  18. $this->visit('admin/auth/permissions/create')
  19. ->see('Permissions')
  20. ->submitForm('Submit', ['slug' => 'can-edit', 'name' => 'Can edit', 'http_path' => ['users/1/edit'], 'http_method' => ['GET']])
  21. ->seePageIs('admin/auth/permissions')
  22. ->visit('admin/auth/permissions/create')
  23. ->see('Permissions')
  24. ->submitForm('Submit', ['slug' => 'can-delete', 'name' => 'Can delete', 'http_path' => ['users/1'], 'http_method' => ['DELETE']])
  25. ->seePageIs('admin/auth/permissions')
  26. ->seeInDatabase(config('admin.database.permissions_table'), ['slug' => 'can-edit', 'name' => 'Can edit', 'http_path' => 'users/1/edit', 'http_method' => 'GET'])
  27. ->seeInDatabase(config('admin.database.permissions_table'), ['slug' => 'can-delete', 'name' => 'Can delete', 'http_path' => 'users/1', 'http_method' => 'DELETE'])
  28. ->assertEquals(8, Permission::count());
  29. $this->assertTrue(Administrator::first()->can('can-edit'));
  30. $this->assertTrue(Administrator::first()->can('can-delete'));
  31. $this->delete('admin/auth/permissions/7')
  32. ->assertEquals(7, Permission::count());
  33. $this->delete('admin/auth/permissions/8')
  34. ->assertEquals(6, Permission::count());
  35. }
  36. public function testAddPermissionToRole()
  37. {
  38. $this->visit('admin/auth/permissions/create')
  39. ->see('Permissions')
  40. ->submitForm('Submit', ['slug' => 'can-create', 'name' => 'Can Create', 'http_path' => ['users/create'], 'http_method' => ['GET']])
  41. ->seePageIs('admin/auth/permissions');
  42. $this->assertEquals(7, Permission::count());
  43. $this->visit('admin/auth/roles/1/edit')
  44. ->see('Edit')
  45. ->submitForm('Submit', ['permissions' => 1])
  46. ->seePageIs('admin/auth/roles')
  47. ->seeInDatabase(config('admin.database.role_permissions_table'), ['role_id' => 1, 'permission_id' => 1]);
  48. }
  49. public function testPermissionThroughRole()
  50. {
  51. $user = [
  52. 'username' => 'Test',
  53. 'name' => 'Name',
  54. 'password' => '123456',
  55. 'password_confirmation' => '123456',
  56. ];
  57. // 1.add a user
  58. $this->visit('admin/auth/users/create')
  59. ->see('Create')
  60. ->submitForm('Submit', $user)
  61. ->seePageIs('admin/auth/users')
  62. ->seeInDatabase(config('admin.database.users_table'), ['username' => 'Test']);
  63. $this->assertFalse(Administrator::find(2)->isAdministrator());
  64. // 2.add a role
  65. $this->visit('admin/auth/roles/create')
  66. ->see('Roles')
  67. ->submitForm('Submit', ['slug' => 'developer', 'name' => 'Developer...'])
  68. ->seePageIs('admin/auth/roles')
  69. ->seeInDatabase(config('admin.database.roles_table'), ['slug' => 'developer', 'name' => 'Developer...'])
  70. ->assertEquals(2, Role::count());
  71. $this->assertFalse(Administrator::find(2)->isRole('developer'));
  72. // 3.assign role to user
  73. $this->visit('admin/auth/users/2/edit')
  74. ->see('Edit')
  75. ->submitForm('Submit', ['roles' => [2]])
  76. ->seePageIs('admin/auth/users')
  77. ->seeInDatabase(config('admin.database.role_users_table'), ['user_id' => 2, 'role_id' => 2]);
  78. $this->assertTrue(Administrator::find(2)->isRole('developer'));
  79. // 4.add a permission
  80. $this->visit('admin/auth/permissions/create')
  81. ->see('Permissions')
  82. ->submitForm('Submit', ['slug' => 'can-remove', 'name' => 'Can Remove', 'http_path' => ['users/*'], 'http_method' => ['DELETE']])
  83. ->seePageIs('admin/auth/permissions');
  84. $this->assertEquals(7, Permission::count());
  85. $this->assertTrue(Administrator::find(2)->cannot('can-remove'));
  86. // 5.assign permission to role
  87. $this->visit('admin/auth/roles/2/edit')
  88. ->see('Edit')
  89. ->submitForm('Submit', ['permissions' => 7])
  90. ->seePageIs('admin/auth/roles')
  91. ->seeInDatabase(config('admin.database.role_permissions_table'), ['role_id' => 2, 'permission_id' => 7]);
  92. $this->assertTrue(Administrator::find(2)->can('can-remove'));
  93. }
  94. public function testEditPermission()
  95. {
  96. $this->visit('admin/auth/permissions/create')
  97. ->see('Permissions')
  98. ->submitForm('Submit', ['slug' => 'can-edit', 'name' => 'Can edit', 'http_path' => ['users/1/edit'], 'http_method' => ['GET']])
  99. ->seePageIs('admin/auth/permissions')
  100. ->seeInDatabase(config('admin.database.permissions_table'), ['slug' => 'can-edit'])
  101. ->seeInDatabase(config('admin.database.permissions_table'), ['name' => 'Can edit'])
  102. ->assertEquals(7, Permission::count());
  103. $this->visit('admin/auth/permissions/1/edit')
  104. ->see('Permissions')
  105. ->submitForm('Submit', ['slug' => 'can-delete'])
  106. ->seePageIs('admin/auth/permissions')
  107. ->seeInDatabase(config('admin.database.permissions_table'), ['slug' => 'can-delete'])
  108. ->assertEquals(7, Permission::count());
  109. }
  110. }