diff --git a/app/Http/Controllers/Api/V1/MemberController.php b/app/Http/Controllers/Api/V1/MemberController.php index c4d55a50..efde792d 100644 --- a/app/Http/Controllers/Api/V1/MemberController.php +++ b/app/Http/Controllers/Api/V1/MemberController.php @@ -60,6 +60,9 @@ public function index(Organization $organization, MemberIndexRequest $request): $members = Member::query() ->whereBelongsTo($organization, 'organization') ->with(['user']) + ->join('users', 'members.user_id', '=', 'users.id') + ->orderBy('users.name') + ->select('members.*') ->paginate(config('app.pagination_per_page_default')); return MemberCollection::make($members); diff --git a/tests/Unit/Endpoint/Api/V1/MemberEndpointTest.php b/tests/Unit/Endpoint/Api/V1/MemberEndpointTest.php index 7981dbc8..4b312785 100644 --- a/tests/Unit/Endpoint/Api/V1/MemberEndpointTest.php +++ b/tests/Unit/Endpoint/Api/V1/MemberEndpointTest.php @@ -52,6 +52,30 @@ public function test_index_returns_members_of_organization(): void $response->assertStatus(200); } + public function test_index_returns_members_of_organization_sorted_by_name(): void + { + // Arrange + $data = $this->createUserWithPermission([ + 'members:view', + ]); + $members = Member::factory()->forOrganization($data->organization)->createMany(4); + + Passport::actingAs($data->user); + + // Act + $response = $this->getJson(route('api.v1.members.index', $data->organization->getKey())); + + // Assert + $response->assertStatus(200); + // 2 members in $data, 4 members in $members. + $response->assertJsonCount(6, 'data'); + + $memberNames = $members->merge([$data->member, $data->ownerMember])->pluck('user.name')->sort()->values()->all(); + $this->assertEquals($memberNames, $response->json('data.*.name')); + + $this->assertNotEquals($response->json('data.*.id'), $response->json('data.*.user_id')); + } + public function test_update_member_fails_if_user_has_no_permission_to_update_members(): void { // Arrange