diff --git a/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentControllerTest.java b/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentControllerTest.java index d2f91d91..00b69ce5 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentControllerTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentControllerTest.java @@ -294,6 +294,34 @@ class DocumentControllerTest { .andExpect(status().isOk()); } + @Test + @WithMockUser(authorities = "WRITE_ALL") + void updateDocument_bindsPrecisionFormFields_toDTO() throws Exception { + // Pins the wire contract: the edit form's metaDatePrecision / metaDateEnd / + // metaDateRaw multipart field names must bind to DocumentUpdateDTO. A rename + // on either side silently drops the precision edit; this captures the DTO. + UUID id = UUID.randomUUID(); + Document doc = Document.builder().id(id).title("Brief").originalFilename("brief.pdf").build(); + when(userService.findByEmail(any())).thenReturn(AppUser.builder().id(UUID.randomUUID()).build()); + + org.mockito.ArgumentCaptor captor = + org.mockito.ArgumentCaptor.forClass(DocumentUpdateDTO.class); + when(documentService.updateDocument(eq(id), captor.capture(), any(), any())).thenReturn(doc); + + mockMvc.perform(multipart("/api/documents/" + id) + .param("metaDatePrecision", "RANGE") + .param("metaDateEnd", "1917-01-11") + .param("metaDateRaw", "10.–11. Januar 1917") + .with(req -> { req.setMethod("PUT"); return req; }).with(csrf())) + .andExpect(status().isOk()); + + DocumentUpdateDTO bound = captor.getValue(); + org.assertj.core.api.Assertions.assertThat(bound.getMetaDatePrecision()).isEqualTo(DatePrecision.RANGE); + org.assertj.core.api.Assertions.assertThat(bound.getMetaDateEnd()) + .isEqualTo(java.time.LocalDate.of(1917, 1, 11)); + org.assertj.core.api.Assertions.assertThat(bound.getMetaDateRaw()).isEqualTo("10.–11. Januar 1917"); + } + // ─── DELETE /api/documents/{id} ────────────────────────────────────────── @Test