diff --git a/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentServiceSortTest.java b/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentServiceSortTest.java index c2f703cf..f7c4564f 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentServiceSortTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentServiceSortTest.java @@ -124,6 +124,41 @@ class DocumentServiceSortTest { assertThat(result.items().get(0).document().getId()).isEqualTo(id1); } + // ─── RELEVANCE sort — overflow guard ───────────────────────────────────── + + @Test + void searchDocuments_relevance_returns_empty_when_offset_exceeds_maxInt() { + // offset = pageNumber * pageSize; choose values so offset > Integer.MAX_VALUE + Pageable hugePage = org.springframework.data.domain.PageRequest.of(Integer.MAX_VALUE / 10 + 1, 10); + + DocumentSearchResult result = documentService.searchDocuments( + "Brief", null, null, null, null, null, null, null, + DocumentSort.RELEVANCE, null, null, hugePage); + + assertThat(result.items()).isEmpty(); + verify(documentRepository, never()).findFtsPageRaw(anyString(), anyInt(), anyInt()); + } + + // ─── toFtsPage — UUID-as-String JDBC driver variance ──────────────────── + + @Test + void searchDocuments_relevance_handles_string_uuid_from_jdbc_driver() { + String stringId = "11111111-1111-1111-1111-111111111111"; + UUID uuidId = UUID.fromString(stringId); + // Simulate a JDBC driver that returns the id column as String instead of UUID + List ftsRows = new ArrayList<>(); + ftsRows.add(new Object[]{stringId, 0.5d, 1L}); + when(documentRepository.findFtsPageRaw(anyString(), anyInt(), anyInt())).thenReturn(ftsRows); + when(documentRepository.findAllById(any())).thenReturn(List.of(doc(uuidId))); + + DocumentSearchResult result = documentService.searchDocuments( + "Brief", null, null, null, null, null, null, null, + DocumentSort.RELEVANCE, null, null, PAGE); + + assertThat(result.items()).hasSize(1); + assertThat(result.items().get(0).document().getId()).isEqualTo(uuidId); + } + // ─── RELEVANCE sort — text + active filter ──────────────────────────────── @Test