This is an automated email from the ASF dual-hosted git repository.
jamesnetherton pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/main by this push:
new ca54185393 chore: use WireMock for docling integration tests to avoid
20GB container pull in CI
ca54185393 is described below
commit ca54185393f05af2382e5721e4e09f5c4cdc3b51
Author: James Netherton <[email protected]>
AuthorDate: Mon Jun 22 11:22:59 2026 +0100
chore: use WireMock for docling integration tests to avoid 20GB container
pull in CI
Replace the real docling-serve container in DoclingTestResource with
WireMock record/playback. Default mode (CI) replays pre-recorded stubs
with no container. Setting camel.quarkus.start-mock-backend=false uses
the real container directly. Running with WIREMOCK_RECORD=true starts
the container and captures stubs for future replays.
Also use deterministic temp file names in DoclingResource so that
recorded stubs match on replay.
Co-authored-by: Claude Sonnet 4.6 <[email protected]>
---
integration-tests/docling/README.adoc | 68 ++++++++++++++++++++
integration-tests/docling/Readme.md | 19 ------
integration-tests/docling/pom.xml | 5 ++
.../component/docling/it/DoclingResource.java | 9 +--
.../quarkus/component/docling/it/DoclingTest.java | 3 +-
.../component/docling/it/DoclingTestResource.java | 75 ++++++++++++----------
...ource-38a52645-d65e-481e-9960-7c5e82a43fb7.json | 1 +
...ource-7498499d-94c1-4bb9-9ab1-9806dac2b1b3.json | 1 +
...ource-2a9620bf-c5e9-47e1-966d-cb427fb2821a.json | 25 ++++++++
...ource-38a52645-d65e-481e-9960-7c5e82a43fb7.json | 25 ++++++++
...ource-4c400318-5fb5-49cd-87f5-5843693def91.json | 25 ++++++++
...ource-79d3fa48-8d37-4101-8cc8-ecd983baa7c1.json | 25 ++++++++
...ource-7a964535-2b50-4ba9-8d42-60edadc21ca5.json | 25 ++++++++
...ource-937ef1ac-68e8-40b9-8d44-23b60c623ba4.json | 25 ++++++++
...ource-956a305a-5041-4164-894d-a423791b0f1f.json | 25 ++++++++
...ource-b0edcd89-4eee-47ff-98ef-49e8da37b255.json | 25 ++++++++
...ource-c7b805bb-b565-4dd1-bf9c-4f73dc4f822b.json | 25 ++++++++
...ource-ed0b894d-8b9c-4cf3-8818-15e724b08efb.json | 25 ++++++++
...ource-f98ead23-9586-458a-b63e-6790cdcd3623.json | 25 ++++++++
...async-8084456f-3946-4601-a9bf-a9aa61962149.json | 25 ++++++++
...async-d24e11df-614f-4f00-9c21-4d781ae4a4dc.json | 25 ++++++++
...async-d9115eaa-2f66-4d77-9098-1a31d06e5387.json | 25 ++++++++
...169f8-22837b94-3f2f-48af-bce2-5cddf7eff1f2.json | 20 ++++++
...db756-b1da40b4-6ce8-4ce7-bca2-de2a08a4b8b7.json | 20 ++++++
...f2a9e-0121ab9c-4a5d-4232-9df1-cb99c368e678.json | 20 ++++++
...169f8-4a7192f1-ae07-4d02-bfb9-62c01749112c.json | 29 +++++++++
...169f8-96d14f30-3a42-4b6f-a6f6-8b3f74d5d0e6.json | 30 +++++++++
...db756-e66e62ba-ce9f-4038-b3cd-1d16666e95c6.json | 27 ++++++++
...f2a9e-3bdfc119-76d8-4132-b73e-802a90187b78.json | 29 +++++++++
...f2a9e-96f6dccc-50f7-4c94-965f-0442cf070edb.json | 30 +++++++++
30 files changed, 679 insertions(+), 57 deletions(-)
diff --git a/integration-tests/docling/README.adoc
b/integration-tests/docling/README.adoc
new file mode 100644
index 0000000000..338be9cc9c
--- /dev/null
+++ b/integration-tests/docling/README.adoc
@@ -0,0 +1,68 @@
+////
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+////
+== Camel Quarkus Docling Integration Tests
+
+By default, the Docling integration tests use WireMock to stub docling-serve
API interactions.
+This avoids pulling the `quay.io/docling-project/docling-serve` container
image (which exceeds 20 GB) in CI.
+
+=== Running against a real docling-serve container
+
+To run the tests against the real docling-serve container, set:
+
+[source,shell]
+----
+-Dcamel.quarkus.start-mock-backend=false
+----
+
+The test resource will start the container automatically.
+
+=== Refreshing WireMock stub recordings
+
+If the stub recordings need updating (e.g. after a docling-serve version
bump), remove the existing files from
+`src/test/resources/mappings` and `src/test/resources/__files`, then run the
tests with a real container and
+recording enabled:
+
+[source,shell]
+----
+-Dcamel.quarkus.start-mock-backend=false -Dwiremock.record=true
+----
+
+Or via environment variable:
+
+[source,shell]
+----
+export WIREMOCK_RECORD=true
+----
+
+Commit the newly generated stub files alongside any version bump.
+
+=== CLI mode test
+
+One test (`convertToJsonWithCLI`) exercises the component's local CLI mode,
which invokes the `docling` binary
+directly rather than calling the HTTP API. This test requires docling to be
installed locally, for example with:
+
+[source,shell]
+----
+pip install docling
+----
+
+To activate this test, set:
+
+[source,shell]
+----
+-Ddocling.test.enabled=true
+----
diff --git a/integration-tests/docling/Readme.md
b/integration-tests/docling/Readme.md
deleted file mode 100644
index d5984b1a38..0000000000
--- a/integration-tests/docling/Readme.md
+++ /dev/null
@@ -1,19 +0,0 @@
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
--->
-One test requires to have docling installed, for instance with `pip install
docling`. It is to test the CLI mode of the component. To activate this test,
you need to set the property `docling.test.enabled` to `true`.
diff --git a/integration-tests/docling/pom.xml
b/integration-tests/docling/pom.xml
index df3812ecd3..38557ec5b5 100644
--- a/integration-tests/docling/pom.xml
+++ b/integration-tests/docling/pom.xml
@@ -64,6 +64,11 @@
<artifactId>testcontainers</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-integration-wiremock-support</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<profiles>
diff --git
a/integration-tests/docling/src/main/java/org/apache/camel/quarkus/component/docling/it/DoclingResource.java
b/integration-tests/docling/src/main/java/org/apache/camel/quarkus/component/docling/it/DoclingResource.java
index d5eccbb55a..184f54ffcb 100644
---
a/integration-tests/docling/src/main/java/org/apache/camel/quarkus/component/docling/it/DoclingResource.java
+++
b/integration-tests/docling/src/main/java/org/apache/camel/quarkus/component/docling/it/DoclingResource.java
@@ -20,6 +20,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
+import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.List;
@@ -76,7 +77,7 @@ public class DoclingResource {
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.TEXT_PLAIN)
public Response extractText(String documentContent) throws IOException {
- java.nio.file.Path tempFile = Files.createTempFile("docling-test",
".md");
+ var tempFile = Paths.get(System.getProperty("java.io.tmpdir"),
"docling-test.md");
Files.writeString(tempFile, documentContent);
try {
String result = producerTemplate.requestBody("direct:extractText",
tempFile.toString(), String.class);
@@ -150,7 +151,7 @@ public class DoclingResource {
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.APPLICATION_JSON)
public DocumentMetadata extractMetadata(String documentContent) throws
IOException {
- java.nio.file.Path tempFile = Files.createTempFile("docling-test",
".md");
+ var tempFile = Paths.get(System.getProperty("java.io.tmpdir"),
"docling-test.md");
Files.writeString(tempFile, documentContent);
try {
return producerTemplate.requestBody("direct:extractMetadata",
tempFile.toString(),
@@ -165,7 +166,7 @@ public class DoclingResource {
@Produces(MediaType.APPLICATION_JSON)
public DocumentMetadata extractMetadataFromPdf() throws IOException {
try (InputStream is =
getClass().getClassLoader().getResourceAsStream("multi_page.pdf")) {
- java.nio.file.Path tempFile =
Files.createTempFile("docling-test-multi_page", ".pdf");
+ var tempFile = Paths.get(System.getProperty("java.io.tmpdir"),
"docling-test.pdf");
Files.copy(is, tempFile.toAbsolutePath(),
StandardCopyOption.REPLACE_EXISTING);
try {
return producerTemplate.requestBody("direct:extractMetadata",
tempFile.toString(),
@@ -202,7 +203,7 @@ public class DoclingResource {
private Response convert(String documentContent, String endpointUri,
String logErrorMessage, Class<?> resutType)
throws IOException {
- java.nio.file.Path tempFile = Files.createTempFile("docling-test",
".md");
+ var tempFile = Paths.get(System.getProperty("java.io.tmpdir"),
"docling-test.md");
Files.writeString(tempFile, documentContent);
try {
Object result = producerTemplate.requestBody(endpointUri,
tempFile.toString(), resutType);
diff --git
a/integration-tests/docling/src/test/java/org/apache/camel/quarkus/component/docling/it/DoclingTest.java
b/integration-tests/docling/src/test/java/org/apache/camel/quarkus/component/docling/it/DoclingTest.java
index f7e890ca56..fb1364a474 100644
---
a/integration-tests/docling/src/test/java/org/apache/camel/quarkus/component/docling/it/DoclingTest.java
+++
b/integration-tests/docling/src/test/java/org/apache/camel/quarkus/component/docling/it/DoclingTest.java
@@ -218,8 +218,9 @@ class DoclingTest {
private List<String> createTestFiles() throws IOException {
List<String> filePaths = new ArrayList<>();
+ Path tempDir = Files.createTempDirectory("docling-batch-test");
for (int i = 0; i < 5; i++) {
- Path filepath = Files.createTempFile("test-docling-batch-" + i +
"-", ".md");
+ Path filepath = tempDir.resolve("test-docling-batch-" + i + ".md");
Files.writeString(filepath,
"""
# Test doc %s
diff --git
a/integration-tests/docling/src/test/java/org/apache/camel/quarkus/component/docling/it/DoclingTestResource.java
b/integration-tests/docling/src/test/java/org/apache/camel/quarkus/component/docling/it/DoclingTestResource.java
index 42c3345e8c..c47d69f34a 100644
---
a/integration-tests/docling/src/test/java/org/apache/camel/quarkus/component/docling/it/DoclingTestResource.java
+++
b/integration-tests/docling/src/test/java/org/apache/camel/quarkus/component/docling/it/DoclingTestResource.java
@@ -17,62 +17,71 @@
package org.apache.camel.quarkus.component.docling.it;
import java.time.Duration;
-import java.util.HashMap;
import java.util.Map;
-import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
+import org.apache.camel.quarkus.test.mock.backend.MockBackendUtils;
+import
org.apache.camel.quarkus.test.wiremock.WireMockTestResourceLifecycleManager;
import org.eclipse.microprofile.config.ConfigProvider;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.wait.strategy.Wait;
-public class DoclingTestResource implements
QuarkusTestResourceLifecycleManager {
+public class DoclingTestResource extends WireMockTestResourceLifecycleManager {
- private static final Logger LOG =
LoggerFactory.getLogger(DoclingTestResource.class);
-
- private static final String CONTAINER_IMAGE =
ConfigProvider.getConfig().getValue("docling.container.image", String.class);
+ private static final String CONTAINER_IMAGE =
ConfigProvider.getConfig().getValue("docling.container.image",
+ String.class);
private static final int CONTAINER_PORT = 5001;
private GenericContainer<?> container;
+ private String containerUrl;
@Override
public Map<String, String> start() {
- try {
- LOG.info("Starting Docling Serve container: {}", CONTAINER_IMAGE);
-
- container = new GenericContainer<>(CONTAINER_IMAGE)
- .withExposedPorts(CONTAINER_PORT)
- .waitingFor(Wait.forListeningPorts(CONTAINER_PORT))
- .withStartupTimeout(Duration.ofMinutes(3));
-
- container.start();
-
- String doclingUrl = String.format("http://%s:%d",
- container.getHost(),
- container.getMappedPort(CONTAINER_PORT));
-
- LOG.info("Docling Serve container started at: {}", doclingUrl);
+ // The real container is needed when recording stubs or when mock
backend is disabled
+ if (!isMockingEnabled() || isWireMockRecordingEnabled()) {
+ startContainer();
+ }
- Map<String, String> config = new HashMap<>();
- config.put("docling.serve.url", doclingUrl);
+ Map<String, String> properties = super.start();
- return config;
- } catch (Exception e) {
- LOG.error("Failed to start Docling Serve container", e);
- throw new RuntimeException("Failed to start Docling Serve
container", e);
- }
+ // In mock/record mode, point the app at WireMock; otherwise point
directly at the container
+ String doclingUrl = properties.getOrDefault("wiremock.url",
containerUrl);
+ properties.put("docling.serve.url", doclingUrl);
+ return properties;
}
@Override
public void stop() {
try {
+ super.stop();
+ } finally {
if (container != null) {
- LOG.info("Stopping Docling Serve container");
container.stop();
}
- } catch (Exception e) {
- LOG.warn("Error stopping Docling Serve container", e);
}
}
+
+ @Override
+ protected String getRecordTargetBaseUrl() {
+ return containerUrl;
+ }
+
+ @Override
+ protected boolean isMockingEnabled() {
+ return MockBackendUtils.startMockBackend();
+ }
+
+ private void startContainer() {
+ LOG.infof("Starting Docling Serve container: %s", CONTAINER_IMAGE);
+ container = new GenericContainer<>(CONTAINER_IMAGE)
+ .withExposedPorts(CONTAINER_PORT)
+ .waitingFor(Wait.forListeningPorts(CONTAINER_PORT))
+ .withStartupTimeout(Duration.ofMinutes(3));
+ container.start();
+ containerUrl = "http://%s:%d".formatted(container.getHost(),
container.getMappedPort(CONTAINER_PORT));
+ LOG.infof("Docling Serve container started at: %s", containerUrl);
+ }
+
+ private static boolean isWireMockRecordingEnabled() {
+ return "true".equals(System.getProperty("wiremock.record",
System.getenv("WIREMOCK_RECORD")));
+ }
}
diff --git
a/integration-tests/docling/src/test/resources/__files/v1_convert_source-38a52645-d65e-481e-9960-7c5e82a43fb7.json
b/integration-tests/docling/src/test/resources/__files/v1_convert_source-38a52645-d65e-481e-9960-7c5e82a43fb7.json
new file mode 100644
index 0000000000..631e7f8ffd
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/__files/v1_convert_source-38a52645-d65e-481e-9960-7c5e82a43fb7.json
@@ -0,0 +1 @@
+{"document":{"filename":"docling-test.pdf","md_content":null,"json_content":{"schema_name":"DoclingDocument","version":"1.8.0","name":"docling-test","origin":{"mimetype":"application/pdf","binary_hash":11164038604600048225,"filename":"docling-test.pdf","uri":null},"furniture":{"self_ref":"#/furniture","parent":null,"children":[],"content_layer":"furniture","meta":null,"name":"_root_","label":"unspecified"},"body":{"self_ref":"#/body","parent":null,"children":[{"$ref":"#/texts/0"},{"$ref"
[...]
\ No newline at end of file
diff --git
a/integration-tests/docling/src/test/resources/__files/v1_convert_source-7498499d-94c1-4bb9-9ab1-9806dac2b1b3.json
b/integration-tests/docling/src/test/resources/__files/v1_convert_source-7498499d-94c1-4bb9-9ab1-9806dac2b1b3.json
new file mode 100644
index 0000000000..252f1ba008
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/__files/v1_convert_source-7498499d-94c1-4bb9-9ab1-9806dac2b1b3.json
@@ -0,0 +1 @@
+{"document":{"filename":"docling-test-multi_page14197308053349780543.pdf","md_content":null,"json_content":{"schema_name":"DoclingDocument","version":"1.8.0","name":"docling-test-multi_page14197308053349780543","origin":{"mimetype":"application/pdf","binary_hash":11164038604600048225,"filename":"docling-test-multi_page14197308053349780543.pdf","uri":null},"furniture":{"self_ref":"#/furniture","parent":null,"children":[],"content_layer":"furniture","meta":null,"name":"_root_","label":"uns
[...]
\ No newline at end of file
diff --git
a/integration-tests/docling/src/test/resources/mappings/v1_convert_source-2a9620bf-c5e9-47e1-966d-cb427fb2821a.json
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source-2a9620bf-c5e9-47e1-966d-cb427fb2821a.json
new file mode 100644
index 0000000000..5537dc4f1a
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source-2a9620bf-c5e9-47e1-966d-cb427fb2821a.json
@@ -0,0 +1,25 @@
+{
+ "id" : "2a9620bf-c5e9-47e1-966d-cb427fb2821a",
+ "name" : "v1_convert_source",
+ "request" : {
+ "url" : "/v1/convert/source",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" :
"{\"sources\":[{\"kind\":\"file\",\"base64_string\":\"RG9jdW1lbnQgd2l0aCB0ZXh0IHRvIGV4dHJhY3Qu\",\"filename\":\"docling-test.md\"}],\"options\":{\"to_formats\":[\"text\"]}}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"document\":{\"filename\":\"docling-test.md\",\"md_content\":null,\"json_content\":null,\"html_content\":null,\"text_content\":\"Document
with text to
extract.\",\"doctags_content\":null},\"status\":\"success\",\"errors\":[],\"processing_time\":0.002222454990260303,\"timings\":{}}",
+ "headers" : {
+ "date" : "Fri, 19 Jun 2026 09:51:24 GMT",
+ "server" : "uvicorn",
+ "content-type" : "application/json"
+ }
+ },
+ "uuid" : "2a9620bf-c5e9-47e1-966d-cb427fb2821a",
+ "persistent" : true,
+ "insertionIndex" : 3
+}
\ No newline at end of file
diff --git
a/integration-tests/docling/src/test/resources/mappings/v1_convert_source-38a52645-d65e-481e-9960-7c5e82a43fb7.json
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source-38a52645-d65e-481e-9960-7c5e82a43fb7.json
new file mode 100644
index 0000000000..59ee13a380
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source-38a52645-d65e-481e-9960-7c5e82a43fb7.json
@@ -0,0 +1,25 @@
+{
+ "id" : "38a52645-d65e-481e-9960-7c5e82a43fb7",
+ "name" : "v1_convert_source",
+ "request" : {
+ "url" : "/v1/convert/source",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" :
"{\"sources\":[{\"kind\":\"file\",\"base64_string\":\"JVBERi0xLjMKJcTl8uXrp/Og0MTGCjMgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCA0Mjg4ID4+CnN0cmVhbQp4Ab1b2XLcxhV9x1cAJoUB6QGEBjBYRG0WLceWFduKmDiJmYeUyiknJaViK/mk/GduL+fcxmAoYihXSlUiptF9++5bN35OX6U/p/cv35v0zfu0dv/ev5Ghumo6/9s/9F1d1WP65l367Crd+Ynyp63rtJu69Opdcv/qqklNevW39Ie0yD45S0uBkRYnZxZWWpzeyzfXRfhxfYbX55+Goc0WQ6eb8vT8k7Nkb321uR+m1pxpwgjebJowgF1bPzUpwkNaWCh/Sa9epM+vHO0rCTX1tKuGobfUJlfvUqG289QW2Vl69Y8jwVm+tcM0
[...]
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "bodyFileName" :
"v1_convert_source-38a52645-d65e-481e-9960-7c5e82a43fb7.json",
+ "headers" : {
+ "date" : "Fri, 19 Jun 2026 09:51:14 GMT",
+ "server" : "uvicorn",
+ "content-type" : "application/json"
+ }
+ },
+ "uuid" : "38a52645-d65e-481e-9960-7c5e82a43fb7",
+ "persistent" : true,
+ "insertionIndex" : 13
+}
\ No newline at end of file
diff --git
a/integration-tests/docling/src/test/resources/mappings/v1_convert_source-4c400318-5fb5-49cd-87f5-5843693def91.json
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source-4c400318-5fb5-49cd-87f5-5843693def91.json
new file mode 100644
index 0000000000..c721072231
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source-4c400318-5fb5-49cd-87f5-5843693def91.json
@@ -0,0 +1,25 @@
+{
+ "id" : "4c400318-5fb5-49cd-87f5-5843693def91",
+ "name" : "v1_convert_source",
+ "request" : {
+ "url" : "/v1/convert/source",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" :
"{\"sources\":[{\"kind\":\"file\",\"base64_string\":\"IyBUZXN0IGRvYyAxCgpjb250ZW50IDE=\",\"filename\":\"test-docling-batch-1.md\"}],\"options\":{\"to_formats\":[\"md\"]}}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"document\":{\"filename\":\"test-docling-batch-1.md\",\"md_content\":\"#
Test doc 1\\n\\ncontent
1\",\"json_content\":null,\"html_content\":null,\"text_content\":null,\"doctags_content\":null},\"status\":\"success\",\"errors\":[],\"processing_time\":0.0027867469761986285,\"timings\":{}}",
+ "headers" : {
+ "date" : "Fri, 19 Jun 2026 09:51:06 GMT",
+ "server" : "uvicorn",
+ "content-type" : "application/json"
+ }
+ },
+ "uuid" : "4c400318-5fb5-49cd-87f5-5843693def91",
+ "persistent" : true,
+ "insertionIndex" : 20
+}
\ No newline at end of file
diff --git
a/integration-tests/docling/src/test/resources/mappings/v1_convert_source-79d3fa48-8d37-4101-8cc8-ecd983baa7c1.json
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source-79d3fa48-8d37-4101-8cc8-ecd983baa7c1.json
new file mode 100644
index 0000000000..3490375838
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source-79d3fa48-8d37-4101-8cc8-ecd983baa7c1.json
@@ -0,0 +1,25 @@
+{
+ "id" : "79d3fa48-8d37-4101-8cc8-ecd983baa7c1",
+ "name" : "v1_convert_source",
+ "request" : {
+ "url" : "/v1/convert/source",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" :
"{\"sources\":[{\"kind\":\"file\",\"base64_string\":\"IyBUZXN0IERvY3VtZW50ClRoaXMgaXMgYSB0ZXN0IGRvY3VtZW50IGZvciBKU09OIGNvbnZlcnNpb24u\",\"filename\":\"docling-test.md\"}],\"options\":{\"to_formats\":[\"json\"]}}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"document\":{\"filename\":\"docling-test.md\",\"md_content\":null,\"json_content\":{\"schema_name\":\"DoclingDocument\",\"version\":\"1.8.0\",\"name\":\"docling-test\",\"origin\":{\"mimetype\":\"text/markdown\",\"binary_hash\":18426078865746213900,\"filename\":\"docling-test.md\",\"uri\":null},\"furniture\":{\"self_ref\":\"#/furniture\",\"parent\":null,\"children\":[],\"content_layer\":\"furniture\",\"meta\":null,\"name\":\"_root_\",\"label\":\"unspecified\"},\"body\":{\"
[...]
+ "headers" : {
+ "date" : "Fri, 19 Jun 2026 09:51:28 GMT",
+ "server" : "uvicorn",
+ "content-type" : "application/json"
+ }
+ },
+ "uuid" : "79d3fa48-8d37-4101-8cc8-ecd983baa7c1",
+ "persistent" : true,
+ "insertionIndex" : 1
+}
\ No newline at end of file
diff --git
a/integration-tests/docling/src/test/resources/mappings/v1_convert_source-7a964535-2b50-4ba9-8d42-60edadc21ca5.json
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source-7a964535-2b50-4ba9-8d42-60edadc21ca5.json
new file mode 100644
index 0000000000..cad0466c02
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source-7a964535-2b50-4ba9-8d42-60edadc21ca5.json
@@ -0,0 +1,25 @@
+{
+ "id" : "7a964535-2b50-4ba9-8d42-60edadc21ca5",
+ "name" : "v1_convert_source",
+ "request" : {
+ "url" : "/v1/convert/source",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" :
"{\"sources\":[{\"kind\":\"file\",\"base64_string\":\"IyBUZXN0IGRvYyAwCgpjb250ZW50IDA=\",\"filename\":\"test-docling-batch-0.md\"}],\"options\":{\"to_formats\":[\"md\"]}}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"document\":{\"filename\":\"test-docling-batch-0.md\",\"md_content\":\"#
Test doc 0\\n\\ncontent
0\",\"json_content\":null,\"html_content\":null,\"text_content\":null,\"doctags_content\":null},\"status\":\"success\",\"errors\":[],\"processing_time\":1.348430849990109,\"timings\":{}}",
+ "headers" : {
+ "date" : "Fri, 19 Jun 2026 09:51:06 GMT",
+ "server" : "uvicorn",
+ "content-type" : "application/json"
+ }
+ },
+ "uuid" : "7a964535-2b50-4ba9-8d42-60edadc21ca5",
+ "persistent" : true,
+ "insertionIndex" : 19
+}
\ No newline at end of file
diff --git
a/integration-tests/docling/src/test/resources/mappings/v1_convert_source-937ef1ac-68e8-40b9-8d44-23b60c623ba4.json
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source-937ef1ac-68e8-40b9-8d44-23b60c623ba4.json
new file mode 100644
index 0000000000..ce1a5ab2e7
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source-937ef1ac-68e8-40b9-8d44-23b60c623ba4.json
@@ -0,0 +1,25 @@
+{
+ "id" : "937ef1ac-68e8-40b9-8d44-23b60c623ba4",
+ "name" : "v1_convert_source",
+ "request" : {
+ "url" : "/v1/convert/source",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" :
"{\"sources\":[{\"kind\":\"file\",\"base64_string\":\"IyBUZXN0IERvY3VtZW50CgpTb21lIGNvbnRlbnQgZm9yIG1ldGFkYXRhIGV4dHJhY3Rpb24uCg==\",\"filename\":\"docling-test.md\"}],\"options\":{\"to_formats\":[\"json\"]}}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"document\":{\"filename\":\"docling-test.md\",\"md_content\":null,\"json_content\":{\"schema_name\":\"DoclingDocument\",\"version\":\"1.8.0\",\"name\":\"docling-test\",\"origin\":{\"mimetype\":\"text/markdown\",\"binary_hash\":547542221629127811,\"filename\":\"docling-test.md\",\"uri\":null},\"furniture\":{\"self_ref\":\"#/furniture\",\"parent\":null,\"children\":[],\"content_layer\":\"furniture\",\"meta\":null,\"name\":\"_root_\",\"label\":\"unspecified\"},\"body\":{\"se
[...]
+ "headers" : {
+ "date" : "Fri, 19 Jun 2026 09:51:22 GMT",
+ "server" : "uvicorn",
+ "content-type" : "application/json"
+ }
+ },
+ "uuid" : "937ef1ac-68e8-40b9-8d44-23b60c623ba4",
+ "persistent" : true,
+ "insertionIndex" : 4
+}
\ No newline at end of file
diff --git
a/integration-tests/docling/src/test/resources/mappings/v1_convert_source-956a305a-5041-4164-894d-a423791b0f1f.json
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source-956a305a-5041-4164-894d-a423791b0f1f.json
new file mode 100644
index 0000000000..7a3c62cd04
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source-956a305a-5041-4164-894d-a423791b0f1f.json
@@ -0,0 +1,25 @@
+{
+ "id" : "956a305a-5041-4164-894d-a423791b0f1f",
+ "name" : "v1_convert_source",
+ "request" : {
+ "url" : "/v1/convert/source",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" :
"{\"sources\":[{\"kind\":\"file\",\"base64_string\":\"IyBUZXN0IGRvYyA0Cgpjb250ZW50IDQ=\",\"filename\":\"test-docling-batch-4.md\"}],\"options\":{\"to_formats\":[\"md\"]}}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"document\":{\"filename\":\"test-docling-batch-4.md\",\"md_content\":\"#
Test doc 4\\n\\ncontent
4\",\"json_content\":null,\"html_content\":null,\"text_content\":null,\"doctags_content\":null},\"status\":\"success\",\"errors\":[],\"processing_time\":0.0029435800097417086,\"timings\":{}}",
+ "headers" : {
+ "date" : "Fri, 19 Jun 2026 09:51:10 GMT",
+ "server" : "uvicorn",
+ "content-type" : "application/json"
+ }
+ },
+ "uuid" : "956a305a-5041-4164-894d-a423791b0f1f",
+ "persistent" : true,
+ "insertionIndex" : 18
+}
\ No newline at end of file
diff --git
a/integration-tests/docling/src/test/resources/mappings/v1_convert_source-b0edcd89-4eee-47ff-98ef-49e8da37b255.json
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source-b0edcd89-4eee-47ff-98ef-49e8da37b255.json
new file mode 100644
index 0000000000..bc69bacfac
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source-b0edcd89-4eee-47ff-98ef-49e8da37b255.json
@@ -0,0 +1,25 @@
+{
+ "id" : "b0edcd89-4eee-47ff-98ef-49e8da37b255",
+ "name" : "v1_convert_source",
+ "request" : {
+ "url" : "/v1/convert/source",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" :
"{\"sources\":[{\"kind\":\"file\",\"base64_string\":\"IyBUZXN0IGRvYyAzCgpjb250ZW50IDM=\",\"filename\":\"test-docling-batch-3.md\"}],\"options\":{\"to_formats\":[\"md\"]}}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"document\":{\"filename\":\"test-docling-batch-3.md\",\"md_content\":\"#
Test doc 3\\n\\ncontent
3\",\"json_content\":null,\"html_content\":null,\"text_content\":null,\"doctags_content\":null},\"status\":\"success\",\"errors\":[],\"processing_time\":0.0013078739866614342,\"timings\":{}}",
+ "headers" : {
+ "date" : "Fri, 19 Jun 2026 09:51:06 GMT",
+ "server" : "uvicorn",
+ "content-type" : "application/json"
+ }
+ },
+ "uuid" : "b0edcd89-4eee-47ff-98ef-49e8da37b255",
+ "persistent" : true,
+ "insertionIndex" : 22
+}
\ No newline at end of file
diff --git
a/integration-tests/docling/src/test/resources/mappings/v1_convert_source-c7b805bb-b565-4dd1-bf9c-4f73dc4f822b.json
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source-c7b805bb-b565-4dd1-bf9c-4f73dc4f822b.json
new file mode 100644
index 0000000000..bc41379b33
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source-c7b805bb-b565-4dd1-bf9c-4f73dc4f822b.json
@@ -0,0 +1,25 @@
+{
+ "id" : "c7b805bb-b565-4dd1-bf9c-4f73dc4f822b",
+ "name" : "v1_convert_source",
+ "request" : {
+ "url" : "/v1/convert/source",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" :
"{\"sources\":[{\"kind\":\"file\",\"base64_string\":\"IyBUZXN0IGRvYyAyCgpjb250ZW50IDI=\",\"filename\":\"test-docling-batch-2.md\"}],\"options\":{\"to_formats\":[\"md\"]}}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"document\":{\"filename\":\"test-docling-batch-2.md\",\"md_content\":\"#
Test doc 2\\n\\ncontent
2\",\"json_content\":null,\"html_content\":null,\"text_content\":null,\"doctags_content\":null},\"status\":\"success\",\"errors\":[],\"processing_time\":0.001299081981414929,\"timings\":{}}",
+ "headers" : {
+ "date" : "Fri, 19 Jun 2026 09:51:06 GMT",
+ "server" : "uvicorn",
+ "content-type" : "application/json"
+ }
+ },
+ "uuid" : "c7b805bb-b565-4dd1-bf9c-4f73dc4f822b",
+ "persistent" : true,
+ "insertionIndex" : 21
+}
\ No newline at end of file
diff --git
a/integration-tests/docling/src/test/resources/mappings/v1_convert_source-ed0b894d-8b9c-4cf3-8818-15e724b08efb.json
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source-ed0b894d-8b9c-4cf3-8818-15e724b08efb.json
new file mode 100644
index 0000000000..8b13116c37
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source-ed0b894d-8b9c-4cf3-8818-15e724b08efb.json
@@ -0,0 +1,25 @@
+{
+ "id" : "ed0b894d-8b9c-4cf3-8818-15e724b08efb",
+ "name" : "v1_convert_source",
+ "request" : {
+ "url" : "/v1/convert/source",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" :
"{\"sources\":[{\"kind\":\"file\",\"base64_string\":\"IyBUZXN0IERvY3VtZW50ClRoaXMgaXMgYSB0ZXN0Lg==\",\"filename\":\"docling-test.md\"}],\"options\":{\"to_formats\":[\"html\"]}}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"document\":{\"filename\":\"docling-test.md\",\"md_content\":null,\"json_content\":null,\"html_content\":\"<!DOCTYPE
html>\\n<html>\\n<head>\\n<meta
charset=\\\"UTF-8\\\"/>\\n<title>docling-test</title>\\n<meta
name=\\\"generator\\\" content=\\\"Docling HTML Serializer\\\"/>\\n<style>\\n
html {\\n background-color: #f5f5f5;\\n font-family: Arial,
sans-serif;\\n line-height: 1.6;\\n }\\n body {\\n
max-width: 800px;\\n margin: 0 a [...]
+ "headers" : {
+ "date" : "Fri, 19 Jun 2026 09:51:26 GMT",
+ "server" : "uvicorn",
+ "content-type" : "application/json"
+ }
+ },
+ "uuid" : "ed0b894d-8b9c-4cf3-8818-15e724b08efb",
+ "persistent" : true,
+ "insertionIndex" : 2
+}
\ No newline at end of file
diff --git
a/integration-tests/docling/src/test/resources/mappings/v1_convert_source-f98ead23-9586-458a-b63e-6790cdcd3623.json
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source-f98ead23-9586-458a-b63e-6790cdcd3623.json
new file mode 100644
index 0000000000..a8f5e8667b
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source-f98ead23-9586-458a-b63e-6790cdcd3623.json
@@ -0,0 +1,25 @@
+{
+ "id" : "f98ead23-9586-458a-b63e-6790cdcd3623",
+ "name" : "v1_convert_source",
+ "request" : {
+ "url" : "/v1/convert/source",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" :
"{\"sources\":[{\"kind\":\"file\",\"base64_string\":\"VGhpcyBpcyBhIHRlc3QgZG9jdW1lbnQgZm9yIGNvbnZlcnNpb24u\",\"filename\":\"docling-test.md\"}],\"options\":{\"to_formats\":[\"md\"]}}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"document\":{\"filename\":\"docling-test.md\",\"md_content\":\"This is a
test document for
conversion.\",\"json_content\":null,\"html_content\":null,\"text_content\":null,\"doctags_content\":null},\"status\":\"success\",\"errors\":[],\"processing_time\":0.001090165984351188,\"timings\":{}}",
+ "headers" : {
+ "date" : "Fri, 19 Jun 2026 09:51:18 GMT",
+ "server" : "uvicorn",
+ "content-type" : "application/json"
+ }
+ },
+ "uuid" : "f98ead23-9586-458a-b63e-6790cdcd3623",
+ "persistent" : true,
+ "insertionIndex" : 9
+}
\ No newline at end of file
diff --git
a/integration-tests/docling/src/test/resources/mappings/v1_convert_source_async-8084456f-3946-4601-a9bf-a9aa61962149.json
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source_async-8084456f-3946-4601-a9bf-a9aa61962149.json
new file mode 100644
index 0000000000..0c8d4f2862
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source_async-8084456f-3946-4601-a9bf-a9aa61962149.json
@@ -0,0 +1,25 @@
+{
+ "id" : "8084456f-3946-4601-a9bf-a9aa61962149",
+ "name" : "v1_convert_source_async",
+ "request" : {
+ "url" : "/v1/convert/source/async",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" :
"{\"sources\":[{\"kind\":\"file\",\"base64_string\":\"IyBBc3luYyBIVE1MIFRlc3QKVGhpcyBpcyBhIHRlc3QgZm9yIGFzeW5jIEhUTUwgY29udmVyc2lvbi4=\",\"filename\":\"docling-test.md\"}],\"options\":{\"to_formats\":[\"html\"]}}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"task_id\":\"4555d9b2-63b9-4510-8d8c-0184f14169f8\",\"task_type\":\"convert\",\"task_status\":\"pending\",\"task_position\":1,\"task_meta\":null}",
+ "headers" : {
+ "date" : "Fri, 19 Jun 2026 09:51:12 GMT",
+ "server" : "uvicorn",
+ "content-type" : "application/json"
+ }
+ },
+ "uuid" : "8084456f-3946-4601-a9bf-a9aa61962149",
+ "persistent" : true,
+ "insertionIndex" : 17
+}
\ No newline at end of file
diff --git
a/integration-tests/docling/src/test/resources/mappings/v1_convert_source_async-d24e11df-614f-4f00-9c21-4d781ae4a4dc.json
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source_async-d24e11df-614f-4f00-9c21-4d781ae4a4dc.json
new file mode 100644
index 0000000000..3ecc9d9c44
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source_async-d24e11df-614f-4f00-9c21-4d781ae4a4dc.json
@@ -0,0 +1,25 @@
+{
+ "id" : "d24e11df-614f-4f00-9c21-4d781ae4a4dc",
+ "name" : "v1_convert_source_async",
+ "request" : {
+ "url" : "/v1/convert/source/async",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" :
"{\"sources\":[{\"kind\":\"file\",\"base64_string\":\"IyBBc3luYyBUZXN0ClRoaXMgaXMgYSB0ZXN0IGZvciBhc3luYyBtYXJrZG93biBjb252ZXJzaW9uLg==\",\"filename\":\"docling-test.md\"}],\"options\":{\"to_formats\":[\"md\"]}}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"task_id\":\"b89061f3-3601-4f4a-8d21-c977f2bf2a9e\",\"task_type\":\"convert\",\"task_status\":\"pending\",\"task_position\":1,\"task_meta\":null}",
+ "headers" : {
+ "date" : "Fri, 19 Jun 2026 09:51:20 GMT",
+ "server" : "uvicorn",
+ "content-type" : "application/json"
+ }
+ },
+ "uuid" : "d24e11df-614f-4f00-9c21-4d781ae4a4dc",
+ "persistent" : true,
+ "insertionIndex" : 8
+}
\ No newline at end of file
diff --git
a/integration-tests/docling/src/test/resources/mappings/v1_convert_source_async-d9115eaa-2f66-4d77-9098-1a31d06e5387.json
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source_async-d9115eaa-2f66-4d77-9098-1a31d06e5387.json
new file mode 100644
index 0000000000..2f2dd93bf1
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/mappings/v1_convert_source_async-d9115eaa-2f66-4d77-9098-1a31d06e5387.json
@@ -0,0 +1,25 @@
+{
+ "id" : "d9115eaa-2f66-4d77-9098-1a31d06e5387",
+ "name" : "v1_convert_source_async",
+ "request" : {
+ "url" : "/v1/convert/source/async",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" :
"{\"sources\":[{\"kind\":\"file\",\"base64_string\":\"IyBBc3luYyBKU09OIFRlc3QKVGhpcyBpcyBhIHRlc3QgZm9yIGFzeW5jIEpTT04gY29udmVyc2lvbi4=\",\"filename\":\"docling-test.md\"}],\"options\":{\"to_formats\":[\"json\"]}}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"task_id\":\"7ebf4405-8bd5-49d8-bb4a-07094f3db756\",\"task_type\":\"convert\",\"task_status\":\"pending\",\"task_position\":1,\"task_meta\":null}",
+ "headers" : {
+ "date" : "Fri, 19 Jun 2026 09:51:18 GMT",
+ "server" : "uvicorn",
+ "content-type" : "application/json"
+ }
+ },
+ "uuid" : "d9115eaa-2f66-4d77-9098-1a31d06e5387",
+ "persistent" : true,
+ "insertionIndex" : 12
+}
\ No newline at end of file
diff --git
a/integration-tests/docling/src/test/resources/mappings/v1_result_4555d9b2-63b9-4510-8d8c-0184f14169f8-22837b94-3f2f-48af-bce2-5cddf7eff1f2.json
b/integration-tests/docling/src/test/resources/mappings/v1_result_4555d9b2-63b9-4510-8d8c-0184f14169f8-22837b94-3f2f-48af-bce2-5cddf7eff1f2.json
new file mode 100644
index 0000000000..a503b4adac
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/mappings/v1_result_4555d9b2-63b9-4510-8d8c-0184f14169f8-22837b94-3f2f-48af-bce2-5cddf7eff1f2.json
@@ -0,0 +1,20 @@
+{
+ "id" : "22837b94-3f2f-48af-bce2-5cddf7eff1f2",
+ "name" : "v1_result_4555d9b2-63b9-4510-8d8c-0184f14169f8",
+ "request" : {
+ "url" : "/v1/result/4555d9b2-63b9-4510-8d8c-0184f14169f8",
+ "method" : "GET"
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"document\":{\"filename\":\"docling-test.md\",\"md_content\":null,\"json_content\":null,\"html_content\":\"<!DOCTYPE
html>\\n<html>\\n<head>\\n<meta
charset=\\\"UTF-8\\\"/>\\n<title>docling-test</title>\\n<meta
name=\\\"generator\\\" content=\\\"Docling HTML Serializer\\\"/>\\n<style>\\n
html {\\n background-color: #f5f5f5;\\n font-family: Arial,
sans-serif;\\n line-height: 1.6;\\n }\\n body {\\n
max-width: 800px;\\n margin: 0 a [...]
+ "headers" : {
+ "date" : "Fri, 19 Jun 2026 09:51:14 GMT",
+ "server" : "uvicorn",
+ "content-type" : "application/json"
+ }
+ },
+ "uuid" : "22837b94-3f2f-48af-bce2-5cddf7eff1f2",
+ "persistent" : true,
+ "insertionIndex" : 14
+}
\ No newline at end of file
diff --git
a/integration-tests/docling/src/test/resources/mappings/v1_result_7ebf4405-8bd5-49d8-bb4a-07094f3db756-b1da40b4-6ce8-4ce7-bca2-de2a08a4b8b7.json
b/integration-tests/docling/src/test/resources/mappings/v1_result_7ebf4405-8bd5-49d8-bb4a-07094f3db756-b1da40b4-6ce8-4ce7-bca2-de2a08a4b8b7.json
new file mode 100644
index 0000000000..31778830d1
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/mappings/v1_result_7ebf4405-8bd5-49d8-bb4a-07094f3db756-b1da40b4-6ce8-4ce7-bca2-de2a08a4b8b7.json
@@ -0,0 +1,20 @@
+{
+ "id" : "b1da40b4-6ce8-4ce7-bca2-de2a08a4b8b7",
+ "name" : "v1_result_7ebf4405-8bd5-49d8-bb4a-07094f3db756",
+ "request" : {
+ "url" : "/v1/result/7ebf4405-8bd5-49d8-bb4a-07094f3db756",
+ "method" : "GET"
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"document\":{\"filename\":\"docling-test.md\",\"md_content\":null,\"json_content\":{\"schema_name\":\"DoclingDocument\",\"version\":\"1.8.0\",\"name\":\"docling-test\",\"origin\":{\"mimetype\":\"text/markdown\",\"binary_hash\":9071087674415960371,\"filename\":\"docling-test.md\",\"uri\":null},\"furniture\":{\"self_ref\":\"#/furniture\",\"parent\":null,\"children\":[],\"content_layer\":\"furniture\",\"meta\":null,\"name\":\"_root_\",\"label\":\"unspecified\"},\"body\":{\"s
[...]
+ "headers" : {
+ "date" : "Fri, 19 Jun 2026 09:51:18 GMT",
+ "server" : "uvicorn",
+ "content-type" : "application/json"
+ }
+ },
+ "uuid" : "b1da40b4-6ce8-4ce7-bca2-de2a08a4b8b7",
+ "persistent" : true,
+ "insertionIndex" : 10
+}
\ No newline at end of file
diff --git
a/integration-tests/docling/src/test/resources/mappings/v1_result_b89061f3-3601-4f4a-8d21-c977f2bf2a9e-0121ab9c-4a5d-4232-9df1-cb99c368e678.json
b/integration-tests/docling/src/test/resources/mappings/v1_result_b89061f3-3601-4f4a-8d21-c977f2bf2a9e-0121ab9c-4a5d-4232-9df1-cb99c368e678.json
new file mode 100644
index 0000000000..0faa9c6a4c
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/mappings/v1_result_b89061f3-3601-4f4a-8d21-c977f2bf2a9e-0121ab9c-4a5d-4232-9df1-cb99c368e678.json
@@ -0,0 +1,20 @@
+{
+ "id" : "0121ab9c-4a5d-4232-9df1-cb99c368e678",
+ "name" : "v1_result_b89061f3-3601-4f4a-8d21-c977f2bf2a9e",
+ "request" : {
+ "url" : "/v1/result/b89061f3-3601-4f4a-8d21-c977f2bf2a9e",
+ "method" : "GET"
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"document\":{\"filename\":\"docling-test.md\",\"md_content\":\"# Async
Test\\n\\nThis is a test for async markdown
conversion.\",\"json_content\":null,\"html_content\":null,\"text_content\":null,\"doctags_content\":null},\"status\":\"success\",\"errors\":[],\"processing_time\":0.006008327007293701,\"timings\":{}}",
+ "headers" : {
+ "date" : "Fri, 19 Jun 2026 09:51:22 GMT",
+ "server" : "uvicorn",
+ "content-type" : "application/json"
+ }
+ },
+ "uuid" : "0121ab9c-4a5d-4232-9df1-cb99c368e678",
+ "persistent" : true,
+ "insertionIndex" : 5
+}
\ No newline at end of file
diff --git
a/integration-tests/docling/src/test/resources/mappings/v1_status_poll_4555d9b2-63b9-4510-8d8c-0184f14169f8-4a7192f1-ae07-4d02-bfb9-62c01749112c.json
b/integration-tests/docling/src/test/resources/mappings/v1_status_poll_4555d9b2-63b9-4510-8d8c-0184f14169f8-4a7192f1-ae07-4d02-bfb9-62c01749112c.json
new file mode 100644
index 0000000000..ed72006163
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/mappings/v1_status_poll_4555d9b2-63b9-4510-8d8c-0184f14169f8-4a7192f1-ae07-4d02-bfb9-62c01749112c.json
@@ -0,0 +1,29 @@
+{
+ "id" : "4a7192f1-ae07-4d02-bfb9-62c01749112c",
+ "name" : "v1_status_poll_4555d9b2-63b9-4510-8d8c-0184f14169f8",
+ "request" : {
+ "urlPath" : "/v1/status/poll/4555d9b2-63b9-4510-8d8c-0184f14169f8",
+ "method" : "GET",
+ "queryParameters" : {
+ "wait" : {
+ "hasExactly" : [ {
+ "equalTo" : "0"
+ } ]
+ }
+ }
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"task_id\":\"4555d9b2-63b9-4510-8d8c-0184f14169f8\",\"task_type\":\"convert\",\"task_status\":\"success\",\"task_position\":null,\"task_meta\":null}",
+ "headers" : {
+ "date" : "Fri, 19 Jun 2026 09:51:14 GMT",
+ "server" : "uvicorn",
+ "content-type" : "application/json"
+ }
+ },
+ "uuid" : "4a7192f1-ae07-4d02-bfb9-62c01749112c",
+ "persistent" : true,
+ "scenarioName" :
"scenario-2-v1-status-poll-4555d9b2-63b9-4510-8d8c-0184f14169f8",
+ "requiredScenarioState" :
"scenario-2-v1-status-poll-4555d9b2-63b9-4510-8d8c-0184f14169f8-2",
+ "insertionIndex" : 15
+}
\ No newline at end of file
diff --git
a/integration-tests/docling/src/test/resources/mappings/v1_status_poll_4555d9b2-63b9-4510-8d8c-0184f14169f8-96d14f30-3a42-4b6f-a6f6-8b3f74d5d0e6.json
b/integration-tests/docling/src/test/resources/mappings/v1_status_poll_4555d9b2-63b9-4510-8d8c-0184f14169f8-96d14f30-3a42-4b6f-a6f6-8b3f74d5d0e6.json
new file mode 100644
index 0000000000..c3c19d5ff7
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/mappings/v1_status_poll_4555d9b2-63b9-4510-8d8c-0184f14169f8-96d14f30-3a42-4b6f-a6f6-8b3f74d5d0e6.json
@@ -0,0 +1,30 @@
+{
+ "id" : "96d14f30-3a42-4b6f-a6f6-8b3f74d5d0e6",
+ "name" : "v1_status_poll_4555d9b2-63b9-4510-8d8c-0184f14169f8",
+ "request" : {
+ "urlPath" : "/v1/status/poll/4555d9b2-63b9-4510-8d8c-0184f14169f8",
+ "method" : "GET",
+ "queryParameters" : {
+ "wait" : {
+ "hasExactly" : [ {
+ "equalTo" : "0"
+ } ]
+ }
+ }
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"task_id\":\"4555d9b2-63b9-4510-8d8c-0184f14169f8\",\"task_type\":\"convert\",\"task_status\":\"started\",\"task_position\":null,\"task_meta\":null}",
+ "headers" : {
+ "date" : "Fri, 19 Jun 2026 09:51:12 GMT",
+ "server" : "uvicorn",
+ "content-type" : "application/json"
+ }
+ },
+ "uuid" : "96d14f30-3a42-4b6f-a6f6-8b3f74d5d0e6",
+ "persistent" : true,
+ "scenarioName" :
"scenario-2-v1-status-poll-4555d9b2-63b9-4510-8d8c-0184f14169f8",
+ "requiredScenarioState" : "Started",
+ "newScenarioState" :
"scenario-2-v1-status-poll-4555d9b2-63b9-4510-8d8c-0184f14169f8-2",
+ "insertionIndex" : 16
+}
\ No newline at end of file
diff --git
a/integration-tests/docling/src/test/resources/mappings/v1_status_poll_7ebf4405-8bd5-49d8-bb4a-07094f3db756-e66e62ba-ce9f-4038-b3cd-1d16666e95c6.json
b/integration-tests/docling/src/test/resources/mappings/v1_status_poll_7ebf4405-8bd5-49d8-bb4a-07094f3db756-e66e62ba-ce9f-4038-b3cd-1d16666e95c6.json
new file mode 100644
index 0000000000..f5896a8ebd
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/mappings/v1_status_poll_7ebf4405-8bd5-49d8-bb4a-07094f3db756-e66e62ba-ce9f-4038-b3cd-1d16666e95c6.json
@@ -0,0 +1,27 @@
+{
+ "id" : "e66e62ba-ce9f-4038-b3cd-1d16666e95c6",
+ "name" : "v1_status_poll_7ebf4405-8bd5-49d8-bb4a-07094f3db756",
+ "request" : {
+ "urlPath" : "/v1/status/poll/7ebf4405-8bd5-49d8-bb4a-07094f3db756",
+ "method" : "GET",
+ "queryParameters" : {
+ "wait" : {
+ "hasExactly" : [ {
+ "equalTo" : "0"
+ } ]
+ }
+ }
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"task_id\":\"7ebf4405-8bd5-49d8-bb4a-07094f3db756\",\"task_type\":\"convert\",\"task_status\":\"success\",\"task_position\":null,\"task_meta\":null}",
+ "headers" : {
+ "date" : "Fri, 19 Jun 2026 09:51:18 GMT",
+ "server" : "uvicorn",
+ "content-type" : "application/json"
+ }
+ },
+ "uuid" : "e66e62ba-ce9f-4038-b3cd-1d16666e95c6",
+ "persistent" : true,
+ "insertionIndex" : 11
+}
\ No newline at end of file
diff --git
a/integration-tests/docling/src/test/resources/mappings/v1_status_poll_b89061f3-3601-4f4a-8d21-c977f2bf2a9e-3bdfc119-76d8-4132-b73e-802a90187b78.json
b/integration-tests/docling/src/test/resources/mappings/v1_status_poll_b89061f3-3601-4f4a-8d21-c977f2bf2a9e-3bdfc119-76d8-4132-b73e-802a90187b78.json
new file mode 100644
index 0000000000..1a4cf8d00e
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/mappings/v1_status_poll_b89061f3-3601-4f4a-8d21-c977f2bf2a9e-3bdfc119-76d8-4132-b73e-802a90187b78.json
@@ -0,0 +1,29 @@
+{
+ "id" : "3bdfc119-76d8-4132-b73e-802a90187b78",
+ "name" : "v1_status_poll_b89061f3-3601-4f4a-8d21-c977f2bf2a9e",
+ "request" : {
+ "urlPath" : "/v1/status/poll/b89061f3-3601-4f4a-8d21-c977f2bf2a9e",
+ "method" : "GET",
+ "queryParameters" : {
+ "wait" : {
+ "hasExactly" : [ {
+ "equalTo" : "0"
+ } ]
+ }
+ }
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"task_id\":\"b89061f3-3601-4f4a-8d21-c977f2bf2a9e\",\"task_type\":\"convert\",\"task_status\":\"success\",\"task_position\":null,\"task_meta\":null}",
+ "headers" : {
+ "date" : "Fri, 19 Jun 2026 09:51:22 GMT",
+ "server" : "uvicorn",
+ "content-type" : "application/json"
+ }
+ },
+ "uuid" : "3bdfc119-76d8-4132-b73e-802a90187b78",
+ "persistent" : true,
+ "scenarioName" :
"scenario-1-v1-status-poll-b89061f3-3601-4f4a-8d21-c977f2bf2a9e",
+ "requiredScenarioState" :
"scenario-1-v1-status-poll-b89061f3-3601-4f4a-8d21-c977f2bf2a9e-2",
+ "insertionIndex" : 6
+}
\ No newline at end of file
diff --git
a/integration-tests/docling/src/test/resources/mappings/v1_status_poll_b89061f3-3601-4f4a-8d21-c977f2bf2a9e-96f6dccc-50f7-4c94-965f-0442cf070edb.json
b/integration-tests/docling/src/test/resources/mappings/v1_status_poll_b89061f3-3601-4f4a-8d21-c977f2bf2a9e-96f6dccc-50f7-4c94-965f-0442cf070edb.json
new file mode 100644
index 0000000000..e64e8dd1eb
--- /dev/null
+++
b/integration-tests/docling/src/test/resources/mappings/v1_status_poll_b89061f3-3601-4f4a-8d21-c977f2bf2a9e-96f6dccc-50f7-4c94-965f-0442cf070edb.json
@@ -0,0 +1,30 @@
+{
+ "id" : "96f6dccc-50f7-4c94-965f-0442cf070edb",
+ "name" : "v1_status_poll_b89061f3-3601-4f4a-8d21-c977f2bf2a9e",
+ "request" : {
+ "urlPath" : "/v1/status/poll/b89061f3-3601-4f4a-8d21-c977f2bf2a9e",
+ "method" : "GET",
+ "queryParameters" : {
+ "wait" : {
+ "hasExactly" : [ {
+ "equalTo" : "0"
+ } ]
+ }
+ }
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"task_id\":\"b89061f3-3601-4f4a-8d21-c977f2bf2a9e\",\"task_type\":\"convert\",\"task_status\":\"started\",\"task_position\":null,\"task_meta\":null}",
+ "headers" : {
+ "date" : "Fri, 19 Jun 2026 09:51:20 GMT",
+ "server" : "uvicorn",
+ "content-type" : "application/json"
+ }
+ },
+ "uuid" : "96f6dccc-50f7-4c94-965f-0442cf070edb",
+ "persistent" : true,
+ "scenarioName" :
"scenario-1-v1-status-poll-b89061f3-3601-4f4a-8d21-c977f2bf2a9e",
+ "requiredScenarioState" : "Started",
+ "newScenarioState" :
"scenario-1-v1-status-poll-b89061f3-3601-4f4a-8d21-c977f2bf2a9e-2",
+ "insertionIndex" : 7
+}
\ No newline at end of file