133 lines
3.8 KiB
PHP
133 lines
3.8 KiB
PHP
<?php
|
|
|
|
use App\Http\Resources\PermissionResource;
|
|
use App\Models\Permission;
|
|
use App\Models\User;
|
|
use Facades\Tests\Setup\UserFactory;
|
|
use Tests\Feature\ApiTestCase;
|
|
|
|
test('unauthenticated', function () {
|
|
$this->getJson('/api/permissions')->assertStatus(401);
|
|
});
|
|
|
|
test('get users without permission', function () {
|
|
$user = User::factory()->create();
|
|
|
|
$this->actingAs($user, ApiTestCase::API_GUARD)
|
|
->getJson('/api/permissions')
|
|
->assertForbidden();
|
|
});
|
|
|
|
test('get permissions', function () {
|
|
Permission::factory()->times(3)->create();
|
|
|
|
$response = $this->actingAs(permissionUser(), ApiTestCase::API_GUARD)
|
|
->getJson('/api/permissions')
|
|
->assertOk();
|
|
|
|
// 7 default permissions + 3 newly created
|
|
$this->assertCount(10, $response->original);
|
|
});
|
|
|
|
test('get permission', function () {
|
|
$permission = Permission::factory()->create();
|
|
|
|
$this->actingAs(permissionUser(), ApiTestCase::API_GUARD)
|
|
->getJson("/api/permissions/{$permission->id}")
|
|
->assertOk()
|
|
->assertJson([
|
|
'data' => (new PermissionResource($permission))->toArray(request()),
|
|
]);
|
|
});
|
|
|
|
test('create permission', function () {
|
|
$data = [
|
|
'name' => 'foo',
|
|
'display_name' => 'Foo Permission',
|
|
'description' => 'This is foo permission.',
|
|
];
|
|
|
|
$this->actingAs(permissionUser(), ApiTestCase::API_GUARD)
|
|
->postJson('/api/permissions', $data)
|
|
->assertStatus(201)
|
|
->assertJsonFragment($data);
|
|
|
|
$this->assertDatabaseHas('permissions', $data);
|
|
});
|
|
|
|
test('create permission with invalid name', function () {
|
|
$this->actingAs(permissionUser(), ApiTestCase::API_GUARD)
|
|
->postJson('/api/permissions')
|
|
->assertStatus(422)
|
|
->assertJsonValidationErrors('name');
|
|
|
|
$existingPermission = Permission::first();
|
|
|
|
$this->postJson('/api/permissions', ['name' => $existingPermission->name])
|
|
->assertStatus(422)
|
|
->assertJsonValidationErrors('name');
|
|
|
|
$this->postJson('/api/permissions', ['name' => 'foo bar'])
|
|
->assertStatus(422)
|
|
->assertJsonValidationErrors('name');
|
|
});
|
|
|
|
test('partially update permission', function () {
|
|
permissionUser();
|
|
|
|
$permission = Permission::factory()->create();
|
|
|
|
$data = ['name' => 'foo'];
|
|
$expected = $data + ['id' => $permission->id];
|
|
|
|
$this->actingAs(permissionUser(), ApiTestCase::API_GUARD)
|
|
->patchJson("/api/permissions/{$permission->id}", $data)
|
|
->assertJsonFragment($expected);
|
|
|
|
$this->assertDatabaseHas('permissions', $expected);
|
|
});
|
|
|
|
test('update permission', function () {
|
|
$permission = Permission::factory()->create();
|
|
|
|
$data = [
|
|
'name' => 'foo',
|
|
'display_name' => 'Foo Role',
|
|
'description' => 'This is foo role.',
|
|
];
|
|
$expected = $data + ['id' => $permission->id];
|
|
|
|
$this->actingAs(permissionUser(), ApiTestCase::API_GUARD)
|
|
->patchJson("/api/permissions/{$permission->id}", $data)
|
|
->assertJsonFragment($expected);
|
|
|
|
$this->assertDatabaseHas('permissions', $expected);
|
|
});
|
|
|
|
test('remove permission', function () {
|
|
$permission = Permission::factory()->create(['removable' => true]);
|
|
|
|
$this->actingAs(permissionUser(), ApiTestCase::API_GUARD)
|
|
->deleteJson("/api/permissions/{$permission->id}")
|
|
->assertOk()
|
|
->assertJson(['success' => true]);
|
|
|
|
$this->assertDatabaseMissing('permissions', ['id' => $permission->id]);
|
|
});
|
|
|
|
test('remove non removable permission', function () {
|
|
$permission = Permission::factory()->create(['removable' => false]);
|
|
|
|
$this->actingAs(permissionUser(), ApiTestCase::API_GUARD)
|
|
->deleteJson("/api/permissions/{$permission->id}")
|
|
->assertStatus(403);
|
|
});
|
|
|
|
/**
|
|
* @return mixed
|
|
*/
|
|
function permissionUser()
|
|
{
|
|
return UserFactory::user()->withPermissions('permissions.manage')->create();
|
|
}
|