diff --git a/backend/src/test/java/org/raddatz/familienarchiv/repository/MigrationIntegrationTest.java b/backend/src/test/java/org/raddatz/familienarchiv/repository/MigrationIntegrationTest.java index 7fb3c406..db5b98a3 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/repository/MigrationIntegrationTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/repository/MigrationIntegrationTest.java @@ -121,6 +121,53 @@ class MigrationIntegrationTest { assertThat(rows2).isEqualTo(1); } + // ─── V33: chk_annotation_bounds CHECK constraint ───────────────────────── + + @Test + void v33_boundsCheckConstraint_rejectsXAboveOne() { + UUID docId = createDocument(); + + assertThatThrownBy(() -> + jdbc.update( + """ + INSERT INTO document_annotations + (id, document_id, page_number, x, y, width, height, color) + VALUES (gen_random_uuid(), ?, 1, 1.5, 0.1, 0.3, 0.1, '#ff0000') + """, + docId) + ).isInstanceOf(DataIntegrityViolationException.class); + } + + @Test + void v33_boundsCheckConstraint_rejectsHeightBelowMinimum() { + UUID docId = createDocument(); + + assertThatThrownBy(() -> + jdbc.update( + """ + INSERT INTO document_annotations + (id, document_id, page_number, x, y, width, height, color) + VALUES (gen_random_uuid(), ?, 1, 0.1, 0.1, 0.3, 0.005, '#ff0000') + """, + docId) + ).isInstanceOf(DataIntegrityViolationException.class); + } + + @Test + void v33_boundsCheckConstraint_acceptsValidAnnotation() { + UUID docId = createDocument(); + + int rows = jdbc.update( + """ + INSERT INTO document_annotations + (id, document_id, page_number, x, y, width, height, color) + VALUES (gen_random_uuid(), ?, 1, 0.1, 0.1, 0.3, 0.1, '#ff0000') + """, + docId); + + assertThat(rows).isEqualTo(1); + } + // ─── helpers ───────────────────────────────────────────────────────────── private UUID createDocument() {