hotfix: fix OCRServiceIntegrationTest

This commit is contained in:
Kilian Schuettler 2023-08-07 12:39:49 +02:00
parent 33412589c0
commit 7e20541d73
2 changed files with 41 additions and 6 deletions

View File

@ -4,7 +4,10 @@ import static org.assertj.core.api.Assertions.assertThat;
import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@ -21,6 +24,8 @@ import org.springframework.context.annotation.Primary;
import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.junit.jupiter.SpringExtension;
import com.iqser.red.service.ocr.v1.server.initializer.PDFNetInitializer; import com.iqser.red.service.ocr.v1.server.initializer.PDFNetInitializer;
import com.iqser.red.service.ocr.v1.server.service.DossierService;
import com.iqser.red.service.ocr.v1.server.service.DossierTemplateService;
import com.iqser.red.service.ocr.v1.server.utils.FileSystemBackedStorageService; import com.iqser.red.service.ocr.v1.server.utils.FileSystemBackedStorageService;
import com.iqser.red.storage.commons.StorageAutoConfiguration; import com.iqser.red.storage.commons.StorageAutoConfiguration;
import com.iqser.red.storage.commons.service.StorageService; import com.iqser.red.storage.commons.service.StorageService;
@ -30,14 +35,21 @@ import com.pdftron.pdf.PDFNet;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import lombok.SneakyThrows; import lombok.SneakyThrows;
@ExtendWith(SpringExtension.class) @ExtendWith({SpringExtension.class, MockitoExtension.class})
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@Import({AbstractTest.TestConfiguration.class, PDFNetInitializer.class}) @Import({AbstractTest.TestConfiguration.class, PDFNetInitializer.class})
@AutoConfigureObservability @AutoConfigureObservability
public class AbstractTest { public class AbstractTest {
protected static final String TEST_DOSSIER_TEMPLATE_ID = "1337";
protected static final String TEST_DOSSIER_ID = "42";
@MockBean @MockBean
private TenantsClient tenantsClient; private TenantsClient tenantsClient;
@MockBean
protected DossierService dossierService;
@MockBean
protected DossierTemplateService dossierTemplateService;
@Autowired @Autowired
protected StorageService storageService; protected StorageService storageService;
@ -47,15 +59,25 @@ public class AbstractTest {
private static String pdftronLicense; private static String pdftronLicense;
@BeforeEach
public void openMocks() {
MockitoAnnotations.openMocks(this);
}
@PostConstruct @PostConstruct
@SneakyThrows @SneakyThrows
public void init() { public void init() {
PDFNet.initialize(pdftronLicense); PDFNet.initialize(pdftronLicense);
} }
@AfterAll @AfterAll
public static void terminatePDFNet() { public static void terminatePDFNet() {
PDFNet.terminate(); PDFNet.terminate();
System.out.println("PDFNet Terminated"); System.out.println("PDFNet Terminated");
} }
@ -78,10 +100,9 @@ public class AbstractTest {
} }
@Configuration @Configuration
@EnableAutoConfiguration(exclude = {RabbitAutoConfiguration.class}) @EnableAutoConfiguration(exclude = {RabbitAutoConfiguration.class})
@ComponentScan(excludeFilters={@ComponentScan.Filter(type= FilterType.ASSIGNABLE_TYPE, value=StorageAutoConfiguration.class)}) @ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = StorageAutoConfiguration.class)})
public static class TestConfiguration { public static class TestConfiguration {
@Bean @Bean
@ -92,4 +113,5 @@ public class AbstractTest {
} }
} }
} }

View File

@ -3,6 +3,7 @@ package com.iqser.red.service.ocr.v1.server;
import static com.iqser.red.pdftronlogic.commons.PdfTextExtraction.extractAllTextFromDocument; import static com.iqser.red.pdftronlogic.commons.PdfTextExtraction.extractAllTextFromDocument;
import static com.iqser.red.service.ocr.v1.server.utils.OsUtils.getTemporaryDirectory; import static com.iqser.red.service.ocr.v1.server.utils.OsUtils.getTemporaryDirectory;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.when;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
@ -18,6 +19,8 @@ import org.springframework.core.io.ClassPathResource;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.iqser.red.service.ocr.v1.server.service.FileStorageService; import com.iqser.red.service.ocr.v1.server.service.FileStorageService;
import com.iqser.red.service.ocr.v1.server.service.OCRService; import com.iqser.red.service.ocr.v1.server.service.OCRService;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DossierTemplate;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType;
import com.knecon.fforesight.tenantcommons.TenantContext; import com.knecon.fforesight.tenantcommons.TenantContext;
import com.pdftron.pdf.OCRModule; import com.pdftron.pdf.OCRModule;
@ -26,7 +29,6 @@ import io.micrometer.prometheus.PrometheusMeterRegistry;
import io.micrometer.prometheus.PrometheusTimer; import io.micrometer.prometheus.PrometheusTimer;
import lombok.SneakyThrows; import lombok.SneakyThrows;
@Disabled // OCRModule is not available on build server. If you want to run the test set the property at the top. @Disabled // OCRModule is not available on build server. If you want to run the test set the property at the top.
@SpringBootTest(properties = {"pdftron.ocrmodule.path=/YourOCRModulePath"}) @SpringBootTest(properties = {"pdftron.ocrmodule.path=/YourOCRModulePath"})
public class OcrServiceIntegrationTest extends AbstractTest { public class OcrServiceIntegrationTest extends AbstractTest {
@ -40,13 +42,23 @@ public class OcrServiceIntegrationTest extends AbstractTest {
@Autowired @Autowired
private PrometheusMeterRegistry registry; private PrometheusMeterRegistry registry;
@BeforeEach @BeforeEach
@SneakyThrows @SneakyThrows
public void assertOCRModuleIsLoaded() { public void assertOCRModuleIsLoaded() {
assert OCRModule.isModuleAvailable(); assert OCRModule.isModuleAvailable();
} }
@BeforeEach
public void stubMethods() {
when(dossierService.getDossier(TEST_DOSSIER_ID)).thenReturn(Dossier.builder().dossierTemplateId(TEST_DOSSIER_TEMPLATE_ID).build());
when(dossierTemplateService.getDossierTemplate(TEST_DOSSIER_TEMPLATE_ID)).thenReturn(DossierTemplate.builder().removeWatermark(false).build());
}
@Test @Test
public void testOCRMetrics() { public void testOCRMetrics() {
@ -117,12 +129,12 @@ public class OcrServiceIntegrationTest extends AbstractTest {
private String testOCR(String fileName) { private String testOCR(String fileName) {
ClassPathResource pdfFileResource = new ClassPathResource("files/" + fileName + ".pdf"); ClassPathResource pdfFileResource = new ClassPathResource("files/" + fileName + ".pdf");
var originId = FileStorageService.getStorageId("dossier", "file", FileType.ORIGIN); var originId = FileStorageService.getStorageId(TEST_DOSSIER_ID, "file", FileType.ORIGIN);
try (var fileStream = pdfFileResource.getInputStream()) { try (var fileStream = pdfFileResource.getInputStream()) {
storageService.storeObject(TenantContext.getTenantId(), originId, fileStream); storageService.storeObject(TenantContext.getTenantId(), originId, fileStream);
} }
try (var out = new FileOutputStream(getTemporaryDirectory() + "/" + fileName + ".pdf")) { try (var out = new FileOutputStream(getTemporaryDirectory() + "/" + fileName + ".pdf")) {
ocrService.runOcrOnDocument("dossier", "file", out); ocrService.runOcrOnDocument(TEST_DOSSIER_ID, "file", out);
System.out.println("File:" + getTemporaryDirectory() + "/" + fileName + ".pdf"); System.out.println("File:" + getTemporaryDirectory() + "/" + fileName + ".pdf");
} }
@ -130,4 +142,5 @@ public class OcrServiceIntegrationTest extends AbstractTest {
return extractAllTextFromDocument(fileStream); return extractAllTextFromDocument(fileStream);
} }
} }
} }