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 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; } }