feat(annotations): add updateAnnotation service method with partial-update DTO
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,7 @@ import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
import org.raddatz.familienarchiv.dto.CreateAnnotationDTO;
|
||||
import org.raddatz.familienarchiv.dto.UpdateAnnotationDTO;
|
||||
import org.raddatz.familienarchiv.exception.DomainException;
|
||||
import org.raddatz.familienarchiv.model.DocumentAnnotation;
|
||||
import org.raddatz.familienarchiv.repository.AnnotationRepository;
|
||||
@@ -203,6 +204,42 @@ class AnnotationServiceTest {
|
||||
.satisfies(e -> assertThat(((DomainException) e).getStatus()).isEqualTo(FORBIDDEN));
|
||||
}
|
||||
|
||||
// ─── updateAnnotation ─────────────────────────────────────────────────────
|
||||
|
||||
@Test
|
||||
void updateAnnotation_throwsNotFound_whenAnnotationNotInDocument() {
|
||||
UUID docId = UUID.randomUUID();
|
||||
UUID annotId = UUID.randomUUID();
|
||||
when(annotationRepository.findByIdAndDocumentId(annotId, docId)).thenReturn(Optional.empty());
|
||||
|
||||
assertThatThrownBy(() -> annotationService.updateAnnotation(docId, annotId, new UpdateAnnotationDTO()))
|
||||
.isInstanceOf(DomainException.class)
|
||||
.satisfies(e -> assertThat(((DomainException) e).getStatus()).isEqualTo(NOT_FOUND));
|
||||
}
|
||||
|
||||
@Test
|
||||
void updateAnnotation_updatesOnlyPresentFields() {
|
||||
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())).thenAnswer(inv -> inv.getArgument(0));
|
||||
|
||||
UpdateAnnotationDTO dto = new UpdateAnnotationDTO();
|
||||
dto.setX(0.5);
|
||||
dto.setY(0.6);
|
||||
|
||||
DocumentAnnotation result = annotationService.updateAnnotation(docId, annotId, dto);
|
||||
|
||||
assertThat(result.getX()).isEqualTo(0.5);
|
||||
assertThat(result.getY()).isEqualTo(0.6);
|
||||
assertThat(result.getWidth()).isEqualTo(0.3); // unchanged
|
||||
assertThat(result.getHeight()).isEqualTo(0.4); // unchanged
|
||||
}
|
||||
|
||||
// ─── listAnnotations ──────────────────────────────────────────────────────
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user