feat(community): add GET /admin/memberships endpoint with tests

This commit is contained in:
Bernhard Müller 2026-07-23 13:59:53 +02:00
parent 0092301ef4
commit 3fbf717bd5
2 changed files with 115 additions and 0 deletions

View File

@ -54,6 +54,14 @@ public class MembershipController {
return ResponseEntity.ok(membershipService.getPendingMemberships()); return ResponseEntity.ok(membershipService.getPendingMemberships());
} }
@GetMapping("/admin/memberships")
@PreAuthorize("hasRole('ADMIN')")
@io.swagger.v3.oas.annotations.Operation(summary = "Alle Mitgliedschaften abrufen")
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "Liste aller Mitgliedschaften")
public ResponseEntity<List<PendingMembershipResponse>> getAllMemberships() {
return ResponseEntity.ok(membershipService.getAllMemberships());
}
@PutMapping("/admin/memberships/{id}/approve") @PutMapping("/admin/memberships/{id}/approve")
@PreAuthorize("hasRole('ADMIN')") @PreAuthorize("hasRole('ADMIN')")
public ResponseEntity<Void> approveMembership(@PathVariable UUID id) { public ResponseEntity<Void> approveMembership(@PathVariable UUID id) {

View File

@ -0,0 +1,107 @@
package at.mueller.eeg.backend.community.api;
import at.mueller.eeg.backend.community.api.dto.PendingMembershipResponse;
import at.mueller.eeg.backend.community.service.MembershipService;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.http.ResponseEntity;
import java.time.LocalDate;
import java.util.List;
import java.util.UUID;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
@ExtendWith(MockitoExtension.class)
class MembershipControllerTest {
@Mock
private MembershipService membershipService;
@InjectMocks
private MembershipController membershipController;
@Test
void getPendingMemberships() {
PendingMembershipResponse response = new PendingMembershipResponse(
UUID.randomUUID(), "user@example.com", "Max", "Mustermann",
"AT000000123456", "Test-Community", 1, "PENDING",
null, null
);
when(membershipService.getPendingMemberships()).thenReturn(List.of(response));
ResponseEntity<List<PendingMembershipResponse>> result = membershipController.getPendingMemberships();
assertEquals(200, result.getStatusCode().value());
assertEquals(1, result.getBody().size());
assertEquals("PENDING", result.getBody().get(0).status());
verify(membershipService).getPendingMemberships();
}
@Test
void getPendingMemberships_empty() {
when(membershipService.getPendingMemberships()).thenReturn(List.of());
ResponseEntity<List<PendingMembershipResponse>> result = membershipController.getPendingMemberships();
assertEquals(200, result.getStatusCode().value());
assertTrue(result.getBody().isEmpty());
}
@Test
void getAllMemberships() {
PendingMembershipResponse pending = new PendingMembershipResponse(
UUID.randomUUID(), "pending@example.com", "Anna", "Test",
"AT000000111111", "Community A", 1, "PENDING",
null, null
);
PendingMembershipResponse active = new PendingMembershipResponse(
UUID.randomUUID(), "active@example.com", "Bob", "Test",
"AT000000222222", "Community B", 2, "ACTIVE",
LocalDate.of(2025, 1, 15), null
);
when(membershipService.getAllMemberships()).thenReturn(List.of(pending, active));
ResponseEntity<List<PendingMembershipResponse>> result = membershipController.getAllMemberships();
assertEquals(200, result.getStatusCode().value());
assertEquals(2, result.getBody().size());
assertEquals("PENDING", result.getBody().get(0).status());
assertEquals("ACTIVE", result.getBody().get(1).status());
verify(membershipService).getAllMemberships();
}
@Test
void getAllMemberships_empty() {
when(membershipService.getAllMemberships()).thenReturn(List.of());
ResponseEntity<List<PendingMembershipResponse>> result = membershipController.getAllMemberships();
assertEquals(200, result.getStatusCode().value());
assertTrue(result.getBody().isEmpty());
}
@Test
void getAllMemberships_mixedStatuses() {
List<PendingMembershipResponse> mixed = List.of(
new PendingMembershipResponse(UUID.randomUUID(), "a@x.com", "A", "B",
"AT001", "C1", 1, "PENDING", null, null),
new PendingMembershipResponse(UUID.randomUUID(), "b@x.com", "C", "D",
"AT002", "C2", 1, "ACTIVE", LocalDate.of(2025, 6, 1), null),
new PendingMembershipResponse(UUID.randomUUID(), "c@x.com", "E", "F",
"AT003", "C3", 2, "INACTIVE", null, LocalDate.of(2025, 3, 1))
);
when(membershipService.getAllMemberships()).thenReturn(mixed);
ResponseEntity<List<PendingMembershipResponse>> result = membershipController.getAllMemberships();
assertEquals(3, result.getBody().size());
assertEquals("PENDING", result.getBody().get(0).status());
assertEquals("ACTIVE", result.getBody().get(1).status());
assertEquals("INACTIVE", result.getBody().get(2).status());
}
}