|
|
@@ -1,72 +0,0 @@
|
|
|
-package es.uv.saic.service;
|
|
|
-
|
|
|
-import es.uv.saic.extractor.ExtractionRequest;
|
|
|
-import es.uv.saic.extractor.docling.DoclingTableExtractor;
|
|
|
-import es.uv.saic.extractor.HtmlToCsvExtractor;
|
|
|
-import org.junit.jupiter.api.BeforeEach;
|
|
|
-import org.junit.jupiter.api.Test;
|
|
|
-import org.springframework.ai.chat.client.ChatClient;
|
|
|
-
|
|
|
-import java.nio.charset.StandardCharsets;
|
|
|
-
|
|
|
-import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
|
-import static org.mockito.ArgumentMatchers.any;
|
|
|
-import static org.mockito.ArgumentMatchers.argThat;
|
|
|
-import static org.mockito.Mockito.mock;
|
|
|
-import static org.mockito.Mockito.verify;
|
|
|
-import static org.mockito.Mockito.when;
|
|
|
-
|
|
|
-class EnhancementServiceRoutingTest {
|
|
|
-
|
|
|
- private HtmlToCsvExtractor htmlToCsvExtractor;
|
|
|
- private DoclingTableExtractor doclingTableExtractor;
|
|
|
- private EnhancementService enhancementService;
|
|
|
-
|
|
|
- @BeforeEach
|
|
|
- void setUp() {
|
|
|
- ChatClient.Builder builder = mock(ChatClient.Builder.class);
|
|
|
- ChatClient chatClient = mock(ChatClient.class);
|
|
|
- when(builder.build()).thenReturn(chatClient);
|
|
|
-
|
|
|
- htmlToCsvExtractor = mock(HtmlToCsvExtractor.class);
|
|
|
- doclingTableExtractor = mock(DoclingTableExtractor.class);
|
|
|
- enhancementService = new EnhancementService(builder, htmlToCsvExtractor, doclingTableExtractor);
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- void extractForChatEndpoint_usesDoclingWhenSupported() {
|
|
|
- ExtractionRequest request = ExtractionRequest.fromHtml("<table data-extraction='x'></table>");
|
|
|
- when(doclingTableExtractor.supports(request)).thenReturn(true);
|
|
|
- when(doclingTableExtractor.extractTablesToCsv(request)).thenReturn("csv-docling");
|
|
|
-
|
|
|
- String result = enhancementService.extractForChatEndpoint(request);
|
|
|
-
|
|
|
- assertEquals("csv-docling", result);
|
|
|
- verify(doclingTableExtractor).extractTablesToCsv(request);
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- void extractForChatEndpoint_fallsBackToHtmlWhenDoclingNotSupported() {
|
|
|
- ExtractionRequest request = ExtractionRequest.fromHtml("<html>no tables</html>");
|
|
|
- when(doclingTableExtractor.supports(request)).thenReturn(false);
|
|
|
- when(htmlToCsvExtractor.extractTablesToCsv(request)).thenReturn("csv-html");
|
|
|
-
|
|
|
- String result = enhancementService.extractForChatEndpoint(request);
|
|
|
-
|
|
|
- assertEquals("csv-html", result);
|
|
|
- verify(htmlToCsvExtractor).extractTablesToCsv(request);
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- void extractForFileEndpoint_routesAsHtmlStringToDocling() {
|
|
|
- byte[] fileBytes = "<table data-extraction='x'><tr><td>a</td></tr></table>".getBytes(StandardCharsets.UTF_8);
|
|
|
- ExtractionRequest request = ExtractionRequest.fromFile(fileBytes, "input.html", "text/html");
|
|
|
- when(doclingTableExtractor.supports(any(ExtractionRequest.class))).thenReturn(true);
|
|
|
- when(doclingTableExtractor.extractTablesToCsv(any(ExtractionRequest.class))).thenReturn("csv-docling");
|
|
|
-
|
|
|
- String result = enhancementService.extractForFileEndpoint(request);
|
|
|
-
|
|
|
- assertEquals("csv-docling", result);
|
|
|
- verify(doclingTableExtractor).extractTablesToCsv(argThat(r -> r.hasRawHtml() && !r.hasFile()));
|
|
|
- }
|
|
|
-}
|