package jnpf.dmsService.search;
|
|
import jnpf.dmsEntity.search.model.DmsSearchIndexSource;
|
import jnpf.dmsMapper.DmsSearchIndexSourceMapper;
|
import jnpf.dmsService.search.extract.DmsTextExtractionResult;
|
import jnpf.dmsService.search.extract.DmsTextExtractionService;
|
import jnpf.dmsService.search.file.DmsSearchFileSourceService;
|
import jnpf.dmsService.search.file.DmsTemporarySearchFile;
|
import jnpf.dmsService.search.meili.DmsMeilisearchClient;
|
import jnpf.dmsService.search.meili.DmsSearchIndexDocument;
|
import jnpf.dmsService.search.ocr.DmsOcrAdapterRegistry;
|
import org.junit.jupiter.api.Test;
|
import org.mockito.ArgumentCaptor;
|
|
import java.nio.file.Files;
|
import java.nio.file.Path;
|
import java.util.Optional;
|
import java.util.UUID;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.when;
|
|
class DmsSearchIndexProcessorTest {
|
|
@Test
|
void extractsUploadedFileAndWritesMeilisearchDocument() throws Exception {
|
DmsSearchIndexSourceMapper sourceMapper = mock(DmsSearchIndexSourceMapper.class);
|
DmsSearchFileSourceService fileSource = mock(DmsSearchFileSourceService.class);
|
DmsTextExtractionService extraction = mock(DmsTextExtractionService.class);
|
DmsOcrAdapterRegistry ocr = mock(DmsOcrAdapterRegistry.class);
|
DmsSearchIndexWriter meilisearch = mock(DmsSearchIndexWriter.class);
|
DmsSearchIndexProcessor processor = new DmsSearchIndexProcessor(sourceMapper, fileSource,
|
extraction, ocr, meilisearch);
|
DmsSearchIndexTask task = task();
|
DmsSearchIndexSource source = source(task);
|
Path temporary = Files.createTempFile("dms-search-test-", ".docx");
|
|
when(sourceMapper.selectSource(task.getTenantId(), task.getDocumentId(),
|
task.getFileVersionId())).thenReturn(source);
|
when(fileSource.fetch(task)).thenReturn(new DmsTemporarySearchFile(
|
temporary, "quality.docx", "application/docx"));
|
when(extraction.extract(temporary, "quality.docx"))
|
.thenReturn(new DmsTextExtractionResult("检验操作规程", false));
|
when(ocr.configuredAdapter()).thenReturn(Optional.empty());
|
|
processor.process(task);
|
|
ArgumentCaptor<DmsSearchIndexDocument> captor =
|
ArgumentCaptor.forClass(DmsSearchIndexDocument.class);
|
verify(meilisearch).publish(captor.capture());
|
assertEquals("检验操作规程", captor.getValue().getContent());
|
assertEquals(task.getFileVersionId().toString(), captor.getValue().getId());
|
}
|
|
private DmsSearchIndexTask task() {
|
DmsSearchIndexTask task = new DmsSearchIndexTask();
|
task.setTenantId("tenant-1");
|
task.setDocumentId(UUID.randomUUID());
|
task.setFileVersionId(UUID.randomUUID());
|
task.setChecksumSha256("a".repeat(64));
|
return task;
|
}
|
|
private DmsSearchIndexSource source(DmsSearchIndexTask task) {
|
DmsSearchIndexSource source = new DmsSearchIndexSource();
|
source.setTenantId(task.getTenantId());
|
source.setDocumentId(task.getDocumentId());
|
source.setFileVersionId(task.getFileVersionId());
|
source.setDocumentName("检验操作规程");
|
source.setFileName("quality.docx");
|
return source;
|
}
|
}
|