test(annotation): wire TranscriptionBlockRepository mock and add cascade test
Some checks failed
CI / Unit & Component Tests (pull_request) Failing after 3m21s
CI / OCR Service Tests (pull_request) Successful in 32s
CI / Backend Unit Tests (pull_request) Failing after 3m20s
CI / Unit & Component Tests (push) Failing after 3m6s
CI / OCR Service Tests (push) Successful in 33s
CI / Backend Unit Tests (push) Failing after 3m9s
Some checks failed
CI / Unit & Component Tests (pull_request) Failing after 3m21s
CI / OCR Service Tests (pull_request) Successful in 32s
CI / Backend Unit Tests (pull_request) Failing after 3m20s
CI / Unit & Component Tests (push) Failing after 3m6s
CI / OCR Service Tests (push) Successful in 33s
CI / Backend Unit Tests (push) Failing after 3m9s
AnnotationService was changed to call transcriptionBlockRepository directly, but the test still mocked TranscriptionService — causing a NPE and leaving the cascade path uncovered. Replace the @Mock TranscriptionService with @Mock TranscriptionBlockRepository, update the two existing delete-test verifications, and add a dedicated deleteAnnotation_cascadesToTranscriptionBlocks test. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit was merged in pull request #426.
This commit is contained in:
@@ -8,7 +8,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
|||||||
import org.mockito.ArgumentCaptor;
|
import org.mockito.ArgumentCaptor;
|
||||||
import org.raddatz.familienarchiv.audit.AuditKind;
|
import org.raddatz.familienarchiv.audit.AuditKind;
|
||||||
import org.raddatz.familienarchiv.audit.AuditService;
|
import org.raddatz.familienarchiv.audit.AuditService;
|
||||||
import org.raddatz.familienarchiv.document.transcription.TranscriptionService;
|
import org.raddatz.familienarchiv.document.transcription.TranscriptionBlockRepository;
|
||||||
import org.raddatz.familienarchiv.document.annotation.CreateAnnotationDTO;
|
import org.raddatz.familienarchiv.document.annotation.CreateAnnotationDTO;
|
||||||
import org.raddatz.familienarchiv.document.annotation.UpdateAnnotationDTO;
|
import org.raddatz.familienarchiv.document.annotation.UpdateAnnotationDTO;
|
||||||
import org.raddatz.familienarchiv.exception.DomainException;
|
import org.raddatz.familienarchiv.exception.DomainException;
|
||||||
@@ -36,7 +36,7 @@ import static org.springframework.http.HttpStatus.NOT_FOUND;
|
|||||||
class AnnotationServiceTest {
|
class AnnotationServiceTest {
|
||||||
|
|
||||||
@Mock AnnotationRepository annotationRepository;
|
@Mock AnnotationRepository annotationRepository;
|
||||||
@Mock TranscriptionService transcriptionService;
|
@Mock TranscriptionBlockRepository transcriptionBlockRepository;
|
||||||
@Mock AuditService auditService;
|
@Mock AuditService auditService;
|
||||||
@InjectMocks AnnotationService annotationService;
|
@InjectMocks AnnotationService annotationService;
|
||||||
|
|
||||||
@@ -208,7 +208,7 @@ class AnnotationServiceTest {
|
|||||||
|
|
||||||
annotationService.deleteAnnotation(docId, annotId, ownerId);
|
annotationService.deleteAnnotation(docId, annotId, ownerId);
|
||||||
|
|
||||||
verify(transcriptionService).deleteByAnnotationId(annotId);
|
verify(transcriptionBlockRepository).deleteByAnnotationId(annotId);
|
||||||
verify(annotationRepository).delete(annotation);
|
verify(annotationRepository).delete(annotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -225,11 +225,27 @@ class AnnotationServiceTest {
|
|||||||
|
|
||||||
annotationService.deleteAnnotation(docId, annotId, ownerId);
|
annotationService.deleteAnnotation(docId, annotId, ownerId);
|
||||||
|
|
||||||
var inOrder = org.mockito.Mockito.inOrder(transcriptionService, annotationRepository);
|
var inOrder = org.mockito.Mockito.inOrder(transcriptionBlockRepository, annotationRepository);
|
||||||
inOrder.verify(transcriptionService).deleteByAnnotationId(annotId);
|
inOrder.verify(transcriptionBlockRepository).deleteByAnnotationId(annotId);
|
||||||
inOrder.verify(annotationRepository).delete(annotation);
|
inOrder.verify(annotationRepository).delete(annotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void deleteAnnotation_cascadesToTranscriptionBlocks() {
|
||||||
|
UUID docId = UUID.randomUUID();
|
||||||
|
UUID annotId = UUID.randomUUID();
|
||||||
|
UUID ownerId = UUID.randomUUID();
|
||||||
|
|
||||||
|
DocumentAnnotation annotation = DocumentAnnotation.builder()
|
||||||
|
.id(annotId).documentId(docId).createdBy(ownerId).build();
|
||||||
|
when(annotationRepository.findByIdAndDocumentId(annotId, docId))
|
||||||
|
.thenReturn(Optional.of(annotation));
|
||||||
|
|
||||||
|
annotationService.deleteAnnotation(docId, annotId, ownerId);
|
||||||
|
|
||||||
|
verify(transcriptionBlockRepository).deleteByAnnotationId(annotId);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void deleteAnnotation_throwsForbidden_whenUserIdIsNull() {
|
void deleteAnnotation_throwsForbidden_whenUserIdIsNull() {
|
||||||
UUID docId = UUID.randomUUID();
|
UUID docId = UUID.randomUUID();
|
||||||
|
|||||||
Reference in New Issue
Block a user