From 88600d54cda2392c49d6265bb447c00231dc159b Mon Sep 17 00:00:00 2001 From: Marcel Date: Mon, 1 Jun 2026 09:29:37 +0200 Subject: [PATCH] test(document): prove Postgres accepts an equal-date RANGE (#678) Testcontainers integration test persisting a RANGE doc with end == start against real Postgres + Flyway, which (unlike H2) enforces the V69 chk_meta_date_end_after_start CHECK. Pins the app guard's isBefore semantics to the actual >= constraint, guarding against app/DB drift (AC2). Co-Authored-By: Claude Opus 4.8 --- .../document/DocumentRepositoryTest.java | 23 +++++++++++++++++++ 1 file changed, 23 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 4b2d1b70..a805925b 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentRepositoryTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentRepositoryTest.java @@ -612,6 +612,29 @@ class DocumentRepositoryTest { .isLessThanOrEqualTo(5); } + // ─── V69 date-range CHECK constraints (#678) ────────────────────────────── + + @Test + void save_acceptsRange_whenEndEqualsStart() { + // chk_meta_date_end_after_start is end >= start, so equal dates are valid. + // Real Postgres + Flyway here (H2 would not enforce the CHECK) pins the + // app guard's isBefore semantics to the actual constraint — guards drift (AC2). + LocalDate day = LocalDate.of(1917, 1, 10); + Document saved = documentRepository.saveAndFlush(Document.builder() + .title("Gleicher Tag") + .originalFilename("gleicher_tag.pdf") + .status(DocumentStatus.UPLOADED) + .documentDate(day) + .metaDatePrecision(DatePrecision.RANGE) + .metaDateEnd(day) + .build()); + + Document found = documentRepository.findById(saved.getId()).orElseThrow(); + assertThat(found.getDocumentDate()).isEqualTo(day); + assertThat(found.getMetaDateEnd()).isEqualTo(day); + assertThat(found.getMetaDatePrecision()).isEqualTo(DatePrecision.RANGE); + } + // ─── seeding helpers ───────────────────────────────────────────────────── private Document uploaded(String title) {