fix(person): report honest totals on the non-paged top-N persons path
The legacy sort=documentCount path wrapped its result with paged(top, 0, safeSize, top.size()), so totalElements/pageSize looked like a paged slice of a larger set when in fact the top-N query returns the complete result. Add a dedicated PersonSearchResult.topN factory that reports reality — totalElements = returned count, pageSize = that count, totalPages = 1 (0 when empty) — and pin both the populated and empty semantics with controller tests. Refs #667 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -175,6 +175,36 @@ class PersonControllerTest {
|
||||
.andExpect(jsonPath("$.items[0].firstName").value("Käthe"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithMockUser(authorities = "READ_ALL")
|
||||
void getPersons_topByDocumentCount_isNonPaged_totalElementsEqualsReturnedCount() throws Exception {
|
||||
// The top-N dashboard path is deliberately NON-paged: it returns the complete result
|
||||
// (no further page exists), so totalElements equals the number of rows returned and
|
||||
// totalPages is 1. Pinned so nobody "fixes" it into a misleading paged total.
|
||||
when(personService.findTopByDocumentCount(50))
|
||||
.thenReturn(List.of(mockPersonSummary("Käthe", "Raddatz"),
|
||||
mockPersonSummary("Hans", "Müller")));
|
||||
|
||||
mockMvc.perform(get("/api/persons").param("sort", "documentCount"))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("$.items.length()").value(2))
|
||||
.andExpect(jsonPath("$.totalElements").value(2))
|
||||
.andExpect(jsonPath("$.pageNumber").value(0))
|
||||
.andExpect(jsonPath("$.pageSize").value(2))
|
||||
.andExpect(jsonPath("$.totalPages").value(1));
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithMockUser(authorities = "READ_ALL")
|
||||
void getPersons_topByDocumentCount_emptyResult_reportsZeroPages() throws Exception {
|
||||
when(personService.findTopByDocumentCount(50)).thenReturn(Collections.emptyList());
|
||||
|
||||
mockMvc.perform(get("/api/persons").param("sort", "documentCount"))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("$.totalElements").value(0))
|
||||
.andExpect(jsonPath("$.totalPages").value(0));
|
||||
}
|
||||
|
||||
private PersonSummaryDTO mockPersonSummary(String firstName, String lastName) {
|
||||
return new PersonSummaryDTO() {
|
||||
public java.util.UUID getId() { return UUID.randomUUID(); }
|
||||
|
||||
Reference in New Issue
Block a user