|
|
|
|
@@ -31,6 +31,7 @@ class OcrAsyncRunnerTest {
|
|
|
|
|
@Mock OcrJobRepository ocrJobRepository;
|
|
|
|
|
@Mock OcrJobDocumentRepository ocrJobDocumentRepository;
|
|
|
|
|
@Mock OcrProgressService ocrProgressService;
|
|
|
|
|
@Mock SenderModelService senderModelService;
|
|
|
|
|
|
|
|
|
|
@InjectMocks OcrAsyncRunner ocrAsyncRunner;
|
|
|
|
|
|
|
|
|
|
@@ -42,7 +43,12 @@ class OcrAsyncRunnerTest {
|
|
|
|
|
.fileHash("hash").scriptType(ScriptType.TYPEWRITER).build();
|
|
|
|
|
|
|
|
|
|
when(fileService.generatePresignedUrl(any())).thenReturn("http://presigned");
|
|
|
|
|
when(ocrClient.extractBlocks(any(), any())).thenReturn(List.of());
|
|
|
|
|
doAnswer(inv -> {
|
|
|
|
|
Consumer<OcrStreamEvent> handler = inv.getArgument(4);
|
|
|
|
|
handler.accept(new OcrStreamEvent.Start(0));
|
|
|
|
|
handler.accept(new OcrStreamEvent.Done(0, 0));
|
|
|
|
|
return null;
|
|
|
|
|
}).when(ocrClient).streamBlocks(any(), any(), any(), any(), any());
|
|
|
|
|
|
|
|
|
|
ocrAsyncRunner.processDocument(docId, doc, userId);
|
|
|
|
|
|
|
|
|
|
@@ -59,9 +65,15 @@ class OcrAsyncRunnerTest {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
when(fileService.generatePresignedUrl(any())).thenReturn("http://presigned");
|
|
|
|
|
when(ocrClient.extractBlocks(any(), any())).thenReturn(List.of(
|
|
|
|
|
new OcrBlockResult(0, 0.1, 0.1, 0.8, 0.04, null, "Line 1", null),
|
|
|
|
|
new OcrBlockResult(0, 0.1, 0.2, 0.8, 0.04, null, "Line 2", null)));
|
|
|
|
|
doAnswer(inv -> {
|
|
|
|
|
Consumer<OcrStreamEvent> handler = inv.getArgument(4);
|
|
|
|
|
handler.accept(new OcrStreamEvent.Start(1));
|
|
|
|
|
handler.accept(new OcrStreamEvent.Page(0, List.of(
|
|
|
|
|
new OcrBlockResult(0, 0.1, 0.1, 0.8, 0.04, null, "Line 1", null),
|
|
|
|
|
new OcrBlockResult(0, 0.1, 0.2, 0.8, 0.04, null, "Line 2", null))));
|
|
|
|
|
handler.accept(new OcrStreamEvent.Done(2, 0));
|
|
|
|
|
return null;
|
|
|
|
|
}).when(ocrClient).streamBlocks(any(), any(), any(), any(), any());
|
|
|
|
|
DocumentAnnotation ann = DocumentAnnotation.builder().id(annId).build();
|
|
|
|
|
when(annotationService.createOcrAnnotation(any(), any(), any(), any(), any())).thenReturn(ann);
|
|
|
|
|
|
|
|
|
|
@@ -83,8 +95,14 @@ class OcrAsyncRunnerTest {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
when(fileService.generatePresignedUrl(any())).thenReturn("http://presigned");
|
|
|
|
|
when(ocrClient.extractBlocks(any(), any())).thenReturn(List.of(
|
|
|
|
|
new OcrBlockResult(0, 0.1, 0.1, 0.8, 0.04, null, "Test", null)));
|
|
|
|
|
doAnswer(inv -> {
|
|
|
|
|
Consumer<OcrStreamEvent> handler = inv.getArgument(4);
|
|
|
|
|
handler.accept(new OcrStreamEvent.Start(1));
|
|
|
|
|
handler.accept(new OcrStreamEvent.Page(0, List.of(
|
|
|
|
|
new OcrBlockResult(0, 0.1, 0.1, 0.8, 0.04, null, "Test", null))));
|
|
|
|
|
handler.accept(new OcrStreamEvent.Done(1, 0));
|
|
|
|
|
return null;
|
|
|
|
|
}).when(ocrClient).streamBlocks(any(), any(), any(), any(), any());
|
|
|
|
|
DocumentAnnotation ann = DocumentAnnotation.builder().id(annId).build();
|
|
|
|
|
when(annotationService.createOcrAnnotation(any(), any(), any(), any(), any())).thenReturn(ann);
|
|
|
|
|
|
|
|
|
|
@@ -112,12 +130,12 @@ class OcrAsyncRunnerTest {
|
|
|
|
|
|
|
|
|
|
when(fileService.generatePresignedUrl(any())).thenReturn("http://presigned");
|
|
|
|
|
doAnswer(inv -> {
|
|
|
|
|
Consumer<OcrStreamEvent> handler = inv.getArgument(3);
|
|
|
|
|
Consumer<OcrStreamEvent> handler = inv.getArgument(4);
|
|
|
|
|
handler.accept(new OcrStreamEvent.Start(1));
|
|
|
|
|
handler.accept(new OcrStreamEvent.Page(0, List.of()));
|
|
|
|
|
handler.accept(new OcrStreamEvent.Done(0, 0));
|
|
|
|
|
return null;
|
|
|
|
|
}).when(ocrClient).streamBlocks(any(), any(), any(), any());
|
|
|
|
|
}).when(ocrClient).streamBlocks(any(), any(), any(), any(), any());
|
|
|
|
|
|
|
|
|
|
ocrAsyncRunner.runSingleDocument(jobId, docId, userId);
|
|
|
|
|
|
|
|
|
|
@@ -142,7 +160,7 @@ class OcrAsyncRunnerTest {
|
|
|
|
|
when(documentService.getDocumentById(docId)).thenReturn(doc);
|
|
|
|
|
|
|
|
|
|
when(fileService.generatePresignedUrl(any())).thenReturn("http://presigned");
|
|
|
|
|
doThrow(new RuntimeException("OCR failed")).when(ocrClient).streamBlocks(any(), any(), any(), any());
|
|
|
|
|
doThrow(new RuntimeException("OCR failed")).when(ocrClient).streamBlocks(any(), any(), any(), any(), any());
|
|
|
|
|
|
|
|
|
|
ocrAsyncRunner.runSingleDocument(jobId, docId, userId);
|
|
|
|
|
|
|
|
|
|
@@ -174,7 +192,7 @@ class OcrAsyncRunnerTest {
|
|
|
|
|
|
|
|
|
|
List<String> progressMessages = new ArrayList<>();
|
|
|
|
|
doAnswer(inv -> {
|
|
|
|
|
Consumer<OcrStreamEvent> handler = inv.getArgument(3);
|
|
|
|
|
Consumer<OcrStreamEvent> handler = inv.getArgument(4);
|
|
|
|
|
handler.accept(new OcrStreamEvent.Start(3));
|
|
|
|
|
handler.accept(new OcrStreamEvent.Page(0, List.of(
|
|
|
|
|
new OcrBlockResult(0, 0.1, 0.1, 0.8, 0.04, null, "L1", null),
|
|
|
|
|
@@ -185,7 +203,7 @@ class OcrAsyncRunnerTest {
|
|
|
|
|
progressMessages.add(job.getProgressMessage());
|
|
|
|
|
handler.accept(new OcrStreamEvent.Done(3, 0));
|
|
|
|
|
return null;
|
|
|
|
|
}).when(ocrClient).streamBlocks(any(), any(), any(), any());
|
|
|
|
|
}).when(ocrClient).streamBlocks(any(), any(), any(), any(), any());
|
|
|
|
|
|
|
|
|
|
ocrAsyncRunner.runSingleDocument(jobId, docId, userId);
|
|
|
|
|
|
|
|
|
|
@@ -215,14 +233,14 @@ class OcrAsyncRunnerTest {
|
|
|
|
|
when(fileService.generatePresignedUrl(any())).thenReturn("http://presigned");
|
|
|
|
|
|
|
|
|
|
doAnswer(inv -> {
|
|
|
|
|
Consumer<OcrStreamEvent> handler = inv.getArgument(3);
|
|
|
|
|
Consumer<OcrStreamEvent> handler = inv.getArgument(4);
|
|
|
|
|
handler.accept(new OcrStreamEvent.Start(3));
|
|
|
|
|
handler.accept(new OcrStreamEvent.Page(0, List.of()));
|
|
|
|
|
handler.accept(new OcrStreamEvent.Error(1, "failed"));
|
|
|
|
|
handler.accept(new OcrStreamEvent.Page(2, List.of()));
|
|
|
|
|
handler.accept(new OcrStreamEvent.Done(0, 1));
|
|
|
|
|
return null;
|
|
|
|
|
}).when(ocrClient).streamBlocks(any(), any(), any(), any());
|
|
|
|
|
}).when(ocrClient).streamBlocks(any(), any(), any(), any(), any());
|
|
|
|
|
|
|
|
|
|
ocrAsyncRunner.runSingleDocument(jobId, docId, userId);
|
|
|
|
|
|
|
|
|
|
@@ -251,14 +269,14 @@ class OcrAsyncRunnerTest {
|
|
|
|
|
|
|
|
|
|
List<String> progressMessages = new ArrayList<>();
|
|
|
|
|
doAnswer(inv -> {
|
|
|
|
|
Consumer<OcrStreamEvent> handler = inv.getArgument(3);
|
|
|
|
|
Consumer<OcrStreamEvent> handler = inv.getArgument(4);
|
|
|
|
|
handler.accept(new OcrStreamEvent.Start(5));
|
|
|
|
|
handler.accept(new OcrStreamEvent.Preprocessing(1));
|
|
|
|
|
progressMessages.add(job.getProgressMessage());
|
|
|
|
|
handler.accept(new OcrStreamEvent.Page(1, List.of()));
|
|
|
|
|
handler.accept(new OcrStreamEvent.Done(0, 0));
|
|
|
|
|
return null;
|
|
|
|
|
}).when(ocrClient).streamBlocks(any(), any(), any(), any());
|
|
|
|
|
}).when(ocrClient).streamBlocks(any(), any(), any(), any(), any());
|
|
|
|
|
|
|
|
|
|
ocrAsyncRunner.runSingleDocument(jobId, docId, userId);
|
|
|
|
|
|
|
|
|
|
@@ -287,13 +305,13 @@ class OcrAsyncRunnerTest {
|
|
|
|
|
when(fileService.generatePresignedUrl(any())).thenReturn("http://presigned");
|
|
|
|
|
|
|
|
|
|
doAnswer(inv -> {
|
|
|
|
|
Consumer<OcrStreamEvent> handler = inv.getArgument(3);
|
|
|
|
|
Consumer<OcrStreamEvent> handler = inv.getArgument(4);
|
|
|
|
|
handler.accept(new OcrStreamEvent.Start(2));
|
|
|
|
|
handler.accept(new OcrStreamEvent.Error(0, "some python traceback details"));
|
|
|
|
|
handler.accept(new OcrStreamEvent.Page(1, List.of()));
|
|
|
|
|
handler.accept(new OcrStreamEvent.Done(0, 1));
|
|
|
|
|
return null;
|
|
|
|
|
}).when(ocrClient).streamBlocks(any(), any(), any(), any());
|
|
|
|
|
}).when(ocrClient).streamBlocks(any(), any(), any(), any(), any());
|
|
|
|
|
|
|
|
|
|
ocrAsyncRunner.runSingleDocument(jobId, docId, userId);
|
|
|
|
|
|
|
|
|
|
|