getJson('/api/roles') ->assertStatus(401); }); test('get settings without permission', function () { $user = User::factory()->create(); $this->actingAs($user, ApiTestCase::API_GUARD) ->getJson('/api/roles') ->assertStatus(403); }); test('get roles', function () { Role::factory()->times(4)->create(); $response = $this->actingAs(roleUser(), ApiTestCase::API_GUARD) ->getJson('/api/roles') ->assertOk(); $this->assertCount(7, $response->original); }); test('get role', function () { $userRole = Role::whereName('User')->first(); $this->actingAs(roleUser(), ApiTestCase::API_GUARD) ->getJson("/api/roles/{$userRole->id}") ->assertOk() ->assertJson([ 'data' => (new RoleResource($userRole))->resolve(), ]); }); test('create role', function () { roleUser(); $data = [ 'name' => 'foo', 'display_name' => 'Foo Role', 'description' => 'This is foo role.', ]; $this->actingAs(roleUser(), ApiTestCase::API_GUARD) ->postJson('/api/roles', $data) ->assertStatus(201) ->assertJsonFragment($data); $this->assertDatabaseHas('roles', $data); }); test('create role with invalid name', function () { $this->be(roleUser(), ApiTestCase::API_GUARD); $this->postJson('/api/roles') ->assertStatus(422) ->assertJsonValidationErrors('name'); $this->postJson('/api/roles', ['name' => 'User']) ->assertStatus(422) ->assertJsonValidationErrors('name'); $this->postJson('/api/roles', ['name' => 'foo bar']) ->assertStatus(422) ->assertJsonValidationErrors('name'); }); test('update role', function () { $user = roleUser(); $data = ['name' => 'foo']; $expected = $data + ['id' => $user->role_id]; $this->actingAs($user, ApiTestCase::API_GUARD) ->patchJson("/api/roles/{$user->role_id}", $data) ->assertOk() ->assertJsonFragment($expected); $this->assertDatabaseHas('roles', $expected); }); test('partially update role', function () { $user = roleUser(); $data = [ 'name' => 'foo', 'display_name' => 'Foo Role', 'description' => 'This is foo role.', ]; $expected = $data + ['id' => $user->role_id]; $this->actingAs($user, ApiTestCase::API_GUARD) ->patchJson("/api/roles/{$user->role_id}", $data) ->assertOk() ->assertJsonFragment($expected); $this->assertDatabaseHas('roles', $expected); }); test('remove role', function () { $userRole = Role::whereName('User')->first(); $role = RoleFactory::removable()->withPermissions('roles.manage')->create(); $user = UserFactory::role($role)->create(); $this->actingAs($user, ApiTestCase::API_GUARD) ->deleteJson("/api/roles/{$role->id}") ->assertOk() ->assertJson(['success' => true]); $this->assertDatabaseMissing('roles', ['id' => $role->id]); $this->assertEquals($userRole->id, $user->fresh()->role_id); }); test('remove non removable role', function () { $role = RoleFactory::withPermissions('roles.manage')->create(); $this->actingAs(roleUser(), ApiTestCase::API_GUARD) ->deleteJson("/api/roles/{$role->id}") ->assertForbidden(); }); /** * @return mixed */ function roleUser() { return UserFactory::user()->withPermissions('roles.manage')->create(); }