From 57259e41955ee309e495f4f8079acd5daa88b842 Mon Sep 17 00:00:00 2001 From: Marcel Date: Mon, 18 May 2026 22:22:50 +0200 Subject: [PATCH] test(document): add query-count assertion for findAll(Spec) non-paginated path MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit List findAll(Specification) is called in DocumentService for receiver-sort, sender-sort, and conversation queries but had no query-count coverage. Asserts ≤5 statements for 5 docs with @EntityGraph(Document.list). Co-Authored-By: Claude Sonnet 4.6 --- .../document/DocumentRepositoryTest.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentRepositoryTest.java b/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentRepositoryTest.java index fee22881..4b2d1b70 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentRepositoryTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentRepositoryTest.java @@ -586,6 +586,32 @@ class DocumentRepositoryTest { .isLessThanOrEqualTo(5); } + @Test + void findAll_withSpecOnly_appliesEntityGraphInAtMostFiveStatements() { + Person sender = personRepository.save(Person.builder().firstName("Otto").lastName("SoSender").build()); + Tag tag = tagRepository.save(Tag.builder().name("SoTag").build()); + for (int i = 0; i < 5; i++) { + documentRepository.save(Document.builder() + .title("SoDoc " + i).originalFilename("sodoc_" + i + ".pdf") + .status(DocumentStatus.UPLOADED) + .sender(sender) + .tags(new HashSet<>(Set.of(tag))) + .build()); + } + entityManager.flush(); + entityManager.clear(); + Statistics stats = entityManagerFactory.unwrap(SessionFactory.class).getStatistics(); + stats.setStatisticsEnabled(true); + stats.clear(); + + Specification allDocs = (root, query, cb) -> null; + documentRepository.findAll(allDocs); + + assertThat(stats.getPrepareStatementCount()) + .as("@EntityGraph(Document.list) via findAll(Spec) must not N+1 sender for 5 docs") + .isLessThanOrEqualTo(5); + } + // ─── seeding helpers ───────────────────────────────────────────────────── private Document uploaded(String title) {