From f564c30ae2f7ff1102e819e5d95e845de74f1fd5 Mon Sep 17 00:00:00 2001 From: Marcel Date: Mon, 18 May 2026 19:01:14 +0200 Subject: [PATCH] test(document): add query-count assertion for findAll(Pageable) path Adds failing test: findAll(Pageable) must not N+1 sender for 5 docs. Without @EntityGraph override for this overload, each document triggers a separate SELECT for its lazy sender. Co-Authored-By: Claude Sonnet 4.6 --- .../document/DocumentRepositoryTest.java | 25 +++++++++++++++++++ 1 file changed, 25 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 abaa9a5b..40337077 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentRepositoryTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentRepositoryTest.java @@ -560,6 +560,31 @@ class DocumentRepositoryTest { .isLessThanOrEqualTo(2); } + @Test + void findAll_withPageable_loadsSenderWithoutNPlusOne() { + Person sender = personRepository.save(Person.builder().firstName("Maria").lastName("RaSender").build()); + Tag tag = tagRepository.save(Tag.builder().name("RaTag2").build()); + for (int i = 0; i < 5; i++) { + documentRepository.save(Document.builder() + .title("RaDoc2 " + i).originalFilename("radoc2_" + 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(); + + documentRepository.findAll(PageRequest.of(0, 5, Sort.by(Sort.Direction.DESC, "updatedAt"))); + + assertThat(stats.getPrepareStatementCount()) + .as("@EntityGraph(Document.list) via findAll(Pageable) must not N+1 sender for 5 docs") + .isLessThanOrEqualTo(5); + } + // ─── seeding helpers ───────────────────────────────────────────────────── private Document uploaded(String title) {