diff --git a/backend/src/main/java/org/raddatz/familienarchiv/service/SenderModelService.java b/backend/src/main/java/org/raddatz/familienarchiv/service/SenderModelService.java index d02caad4..e7881474 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/service/SenderModelService.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/service/SenderModelService.java @@ -154,7 +154,8 @@ public class SenderModelService { OcrTrainingRun run = Objects.requireNonNull(txTemplate.execute(status -> trainingRunRepository.findFirstByPersonIdAndStatus(personId, TrainingStatus.RUNNING) - .orElseThrow(() -> new IllegalStateException( + .orElseThrow(() -> DomainException.internal( + ErrorCode.OCR_TRAINING_CONFLICT, "Expected RUNNING row for person " + personId + " but none found")))); String runId = run.getId().toString(); diff --git a/backend/src/test/java/org/raddatz/familienarchiv/service/SenderModelServiceTest.java b/backend/src/test/java/org/raddatz/familienarchiv/service/SenderModelServiceTest.java index 20086e10..4f18701a 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/service/SenderModelServiceTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/service/SenderModelServiceTest.java @@ -297,6 +297,16 @@ class SenderModelServiceTest { verify(senderModelRepository, never()).save(any()); } + @Test + void triggerSenderTraining_throwsDomainException_whenRunningRowMissingAfterDispatch() { + when(trainingRunRepository.findFirstByPersonIdAndStatus(personId, TrainingStatus.RUNNING)) + .thenReturn(Optional.empty()); + + org.assertj.core.api.Assertions.assertThatThrownBy( + () -> service.triggerSenderTraining(personId, 0)) + .isInstanceOf(DomainException.class); + } + // ─── triggerSenderTraining — queue promotion ────────────────────────────── // ─── triggerManualSenderTraining ──────────────────────────────────────────