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(); }