Laraland/tests/functional/ApiPermissionsCest.php
2018-07-30 09:26:17 +07:00

154 lines
3.7 KiB
PHP

<?php
use App\Admin;
use Laravel\Passport\Passport;
use App\Permission;
use Spatie\Permission\Models\Role;
class ApiPermissionsCest
{
private $endpoint = '/api/permissions';
private function initDatabase()
{
Artisan::call('migrate');
Artisan::call('db:seed');
Artisan::call('passport:client', ['--password' => true, '--name' => 'laraland']);
}
public function _before(FunctionalTester $I)
{
$this->initDatabase();
Passport::actingAs(Admin::find(1));
$I->seeAuthentication('api');
}
public function _after(FunctionalTester $I)
{
}
public function getAllPermissions(FunctionalTester $I)
{
$permission = Permission::find(1);
$I->sendGET($this->endpoint);
$I->seeResponseContainsJson([
'data' => [
['name' => $permission->name]
]
]);
}
public function getSinglePermission(FunctionalTester $I)
{
$permission = Permission::find(1);
$I->sendGET($this->endpoint . '/' . $permission->id);
$I->seeResponseContainsJson([
'data' => [
'name' => $permission->name
]
]);
}
public function storePermission(FunctionalTester $I)
{
Auth::user()->givePermissionTo('create-permission');
$permission = [
'name' => 'maintenance',
'guard_name' => 'web'
];
$I->sendPOST($this->endpoint, $permission);
$I->seeResponseContainsJson([
'data' => [
'name' => $permission['name'],
'guard_name' => $permission['guard_name']
]
]);
}
public function updatePermission(FunctionalTester $I)
{
Auth::user()->givePermissionTo('update-permission');
$permission = Permission::find(1);
$I->sendPUT($this->endpoint . '/' . $permission->id, [
'name' => 'maintenance',
'guard_name' => $permission->guard_name
]);
$I->seeResponseContainsJson([
'data' => [
'name' => 'maintenance'
]
]);
}
public function deletePermission(FunctionalTester $I)
{
$permission = Permission::find(1);
$I->sendDELETE($this->endpoint . '/' . $permission->id);
$I->seeResponseCodeIsSuccessful();
$I->seeResponseContains('deleted');
}
public function attachRole(FunctionalTester $I)
{
$permission = Permission::find(1);
$role = Role::find(1);
$I->sendPATCH($this->endpoint . '/' . $permission->id . '/attach-role/' . $role->id);
$I->seeResponseContainsJson([
'data' => [
'roles' => [
['name' => $role->name]
]
]
]);
}
public function attachMultiRoles(FunctionalTester $I)
{
$permission = Permission::find(1);
$roles = [1, 2, 3];
$I->sendPATCH($this->endpoint . '/' . $permission->id . '/attach-roles', $roles);
$I->seeResponseContainsJson([
'data' => [
'roles' => [
['id' => $roles[0]],
['id' => $roles[1]],
['id' => $roles[2]]
]
]
]);
}
public function removeRole(FunctionalTester $I)
{
$permission = Permission::find(1);
$role = Role::find(1);
$permission->assignRole($role);
$I->sendPATCH($this->endpoint . '/' . $permission->id . '/remove-role/' . $role->id);
$I->dontSeeResponseContainsJson([
'data' => [
['name' => $role->name]
]
]);
}
}