From d78c0c56ac3d3104ab0f9a8019e59f4da2c41642 Mon Sep 17 00:00:00 2001 From: Jonathan Wilkinson Date: Tue, 21 Oct 2025 13:49:46 +0100 Subject: [PATCH] task: add ability to get raw payload instead of a parsed map --- .../resource/FormSubmissionVersion.kt | 10 +++++++++- .../FormSubmissionVersionsRouterTest.kt | 16 ++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/com/ctrlhub/core/datacapture/resource/FormSubmissionVersion.kt b/src/main/kotlin/com/ctrlhub/core/datacapture/resource/FormSubmissionVersion.kt index 091a89a..db36e04 100644 --- a/src/main/kotlin/com/ctrlhub/core/datacapture/resource/FormSubmissionVersion.kt +++ b/src/main/kotlin/com/ctrlhub/core/datacapture/resource/FormSubmissionVersion.kt @@ -67,9 +67,17 @@ class FormSubmissionVersion @JsonCreator constructor( @JsonProperty("resources") var resources: List>? = null, ) { + val rawPayload: String? + get() = payload?.let { + try { + mapper.writeValueAsString(it) + } catch (e: Exception) { + null + } + } // shared Jackson mapper configured to ignore unknown properties when hydrating attribute maps - private fun resourceMapper(): ObjectMapper = Companion.mapper + private fun resourceMapper(): ObjectMapper = mapper /** * Convert the raw resources list (List>) into typed JsonApiEnvelope objects. diff --git a/src/test/kotlin/com/ctrlhub/core/datacapture/FormSubmissionVersionsRouterTest.kt b/src/test/kotlin/com/ctrlhub/core/datacapture/FormSubmissionVersionsRouterTest.kt index 9e8af66..e5df098 100644 --- a/src/test/kotlin/com/ctrlhub/core/datacapture/FormSubmissionVersionsRouterTest.kt +++ b/src/test/kotlin/com/ctrlhub/core/datacapture/FormSubmissionVersionsRouterTest.kt @@ -107,6 +107,14 @@ class FormSubmissionVersionsRouterTest { assertNotNull(result.payload) assertTrue(result.payload!!.containsKey("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa")) assertTrue(result.payload!!.containsKey("bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb")) + + // check rawPayload is a valid JSON string + assertNotNull(result.rawPayload) + assertTrue(result.rawPayload!!.startsWith("{")) + assertTrue(result.rawPayload!!.endsWith("}")) + // verify it contains the expected keys in JSON format + assertTrue(result.rawPayload!!.contains("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa")) + assertTrue(result.rawPayload!!.contains("bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb")) } } @@ -169,6 +177,14 @@ class FormSubmissionVersionsRouterTest { assertNotNull(result.payload) assertTrue(result.payload!!.containsKey("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa")) assertTrue(result.payload!!.containsKey("bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb")) + + // check rawPayload is a valid JSON string + assertNotNull(result.rawPayload) + assertTrue(result.rawPayload!!.startsWith("{")) + assertTrue(result.rawPayload!!.endsWith("}")) + // verify it contains the expected keys in JSON format + assertTrue(result.rawPayload!!.contains("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa")) + assertTrue(result.rawPayload!!.contains("bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb")) } } }