test(annotations): add failing test for DataIntegrityViolationException defense [M2 red]

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Marcel
2026-04-14 14:33:43 +02:00
parent 65d606d8bb
commit f00b470928

View File

@@ -11,6 +11,7 @@ import org.raddatz.familienarchiv.exception.DomainException;
import org.raddatz.familienarchiv.model.DocumentAnnotation;
import org.raddatz.familienarchiv.repository.AnnotationRepository;
import org.raddatz.familienarchiv.repository.TranscriptionBlockRepository;
import org.springframework.dao.DataIntegrityViolationException;
import java.util.List;
import java.util.Optional;
@@ -22,6 +23,7 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.springframework.http.HttpStatus.BAD_REQUEST;
import static org.springframework.http.HttpStatus.FORBIDDEN;
import static org.springframework.http.HttpStatus.NOT_FOUND;
@@ -241,6 +243,25 @@ class AnnotationServiceTest {
verify(annotationRepository).save(annotation);
}
@Test
void updateAnnotation_throwsAnnotationUpdateFailed_whenDbConstraintViolated() {
UUID docId = UUID.randomUUID();
UUID annotId = UUID.randomUUID();
DocumentAnnotation annotation = DocumentAnnotation.builder()
.id(annotId).documentId(docId)
.x(0.1).y(0.2).width(0.3).height(0.4).build();
when(annotationRepository.findByIdAndDocumentId(annotId, docId))
.thenReturn(Optional.of(annotation));
when(annotationRepository.save(any())).thenThrow(new DataIntegrityViolationException("constraint"));
UpdateAnnotationDTO dto = new UpdateAnnotationDTO();
dto.setX(1.5);
assertThatThrownBy(() -> annotationService.updateAnnotation(docId, annotId, dto))
.isInstanceOf(DomainException.class)
.satisfies(e -> assertThat(((DomainException) e).getStatus()).isEqualTo(BAD_REQUEST));
}
// ─── listAnnotations ──────────────────────────────────────────────────────
@Test