From 5f5cfc885b28bd453d88bffa385ead4dca70b6dc Mon Sep 17 00:00:00 2001 From: Anna Shipil Date: Thu, 3 Sep 2026 15:58:16 +0200 Subject: [PATCH 1/6] DEVX-867: fixing render --- .../io/vrap/codegen/languages/oas/model/OasResourceRenderer.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/languages/oas/src/main/kotlin/io/vrap/codegen/languages/oas/model/OasResourceRenderer.kt b/languages/oas/src/main/kotlin/io/vrap/codegen/languages/oas/model/OasResourceRenderer.kt index d0e7cb22..5d61a201 100644 --- a/languages/oas/src/main/kotlin/io/vrap/codegen/languages/oas/model/OasResourceRenderer.kt +++ b/languages/oas/src/main/kotlin/io/vrap/codegen/languages/oas/model/OasResourceRenderer.kt @@ -54,6 +54,7 @@ class OasResourceRenderer constructor(val api: Api, val vrapTypeProvider: VrapTy | parameters: | <<${method.queryParameters.joinToString("\n") { renderQueryParameter(method,it) }}>>""" else ""}${if (method.bodies.any { it.type != null }) """ | requestBody: + | content: | <<${bodies.joinToString("\n") { renderBody(it, method) } }>>""" else ""}${if (annotations.isNotEmpty()) """ | <<${annotations.joinToString("\n") { it.renderAnnotation() }} >>""" else ""} | responses: @@ -126,14 +127,12 @@ class OasResourceRenderer constructor(val api: Api, val vrapTypeProvider: VrapTy // val bodyExamples = requestExamples(body, method) if (body.type is FileType) { return """ - |content: | "*/*": | schema: | type: string """.trimMargin().keepAngleIndent() } return """ - |content: | ${body.contentType}:${if (body.type != null) """ | schema: | <<${body.type.renderAnyType()}>> From 1b8dcb2799f0bb106412e734d7b9201f8bfcf8ee Mon Sep 17 00:00:00 2001 From: Anna Shipil Date: Thu, 3 Sep 2026 15:58:25 +0200 Subject: [PATCH 2/6] DEVX-867: adding test --- .../kotlin/languages/oas/TestCodeGenerator.kt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/languages/oas/src/test/kotlin/languages/oas/TestCodeGenerator.kt b/languages/oas/src/test/kotlin/languages/oas/TestCodeGenerator.kt index 46221b50..ea18afcd 100644 --- a/languages/oas/src/test/kotlin/languages/oas/TestCodeGenerator.kt +++ b/languages/oas/src/test/kotlin/languages/oas/TestCodeGenerator.kt @@ -127,4 +127,23 @@ class TestCodeGenerator { Assertions.assertThat(dataSink.files.get("openapi.yaml")?.trim()) .isEqualTo("src/test/resources/fixtures/array-response.yaml".readFile()) } + + @Test + fun multipartBodyRender() { + val generatorConfig = CodeGeneratorConfig( + basePackageName = "com/commercetools/importer", + outputFolder = Paths.get("build/gensrc-multipart") + ) + + val apiProvider = RamlApiProvider(Paths.get("src/test/resources/multipart-body-test.raml")) + + val dataSink = MemoryDataSink() + val generatorModule = RamlGeneratorModule(apiProvider, generatorConfig, OasBaseTypes, dataSink = dataSink) + val generatorComponent = RamlGeneratorComponent(generatorModule, OasModelModule) + generatorComponent.generateFiles() + + Assertions.assertThat(dataSink.files).hasSize(1) + Assertions.assertThat(dataSink.files.get("openapi.yaml")?.trim()) + .isEqualTo("src/test/resources/fixtures/multipart-body.yaml".readFile()) + } } From a302d58689cc61252fa908f901e35c3a2ae28054 Mon Sep 17 00:00:00 2001 From: Anna Shipil Date: Thu, 3 Sep 2026 15:59:12 +0200 Subject: [PATCH 3/6] DEVX-867: adding test resource --- .../resources/fixtures/multipart-body.yaml | 45 +++++++++++++++++++ .../test/resources/multipart-body-test.raml | 25 +++++++++++ 2 files changed, 70 insertions(+) create mode 100644 languages/oas/src/test/resources/fixtures/multipart-body.yaml create mode 100644 languages/oas/src/test/resources/multipart-body-test.raml diff --git a/languages/oas/src/test/resources/fixtures/multipart-body.yaml b/languages/oas/src/test/resources/fixtures/multipart-body.yaml new file mode 100644 index 00000000..9d00d4d5 --- /dev/null +++ b/languages/oas/src/test/resources/fixtures/multipart-body.yaml @@ -0,0 +1,45 @@ +openapi: "3.0.0" +info: + title: Multipart Body Test API + version: "v1" + +servers: + - url: https://example.com/{version} + +paths: + /test: + post: + operationId: TestPost + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TestRequest' + + multipart/form-data: + schema: + $ref: '#/components/schemas/TestMultipartRequest' + + responses: + "200": + description: |- + 200 + content: {} + +components: + + schemas: + TestRequest: + type: "object" + required: + - prompt + properties: + prompt: + type: "string" + TestMultipartRequest: + type: "object" + required: + - prompt + properties: + prompt: + type: "string" diff --git a/languages/oas/src/test/resources/multipart-body-test.raml b/languages/oas/src/test/resources/multipart-body-test.raml new file mode 100644 index 00000000..4db6ee56 --- /dev/null +++ b/languages/oas/src/test/resources/multipart-body-test.raml @@ -0,0 +1,25 @@ +#%RAML 1.0 +title: Multipart Body Test API +baseUri: https://example.com/{version} +version: v1 +mediaType: application/json + +types: + TestRequest: + type: object + properties: + prompt: string + TestMultipartRequest: + type: object + properties: + prompt: string + +/test: + post: + body: + application/json: + type: TestRequest + multipart/form-data: + type: TestMultipartRequest + responses: + 200: \ No newline at end of file From a7d26b5b1ad5c968be786cfdbca6c8f92908b918 Mon Sep 17 00:00:00 2001 From: Anna Shipil Date: Thu, 3 Sep 2026 15:59:47 +0200 Subject: [PATCH 4/6] DEVX-867: updating test --- .../oas/src/test/kotlin/languages/oas/TestCodeGenerator.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/languages/oas/src/test/kotlin/languages/oas/TestCodeGenerator.kt b/languages/oas/src/test/kotlin/languages/oas/TestCodeGenerator.kt index ea18afcd..11d4d1f5 100644 --- a/languages/oas/src/test/kotlin/languages/oas/TestCodeGenerator.kt +++ b/languages/oas/src/test/kotlin/languages/oas/TestCodeGenerator.kt @@ -143,6 +143,13 @@ class TestCodeGenerator { generatorComponent.generateFiles() Assertions.assertThat(dataSink.files).hasSize(1) + + Assertions.assertThat( + DiffUtils.diff( + "src/test/resources/fixtures/multipart-body.yaml".readFileLines(), + dataSink.files.get("openapi.yaml")?.trim()?.lines(), + ).deltas).`as`("openapi.yaml").isEmpty() + Assertions.assertThat(dataSink.files.get("openapi.yaml")?.trim()) .isEqualTo("src/test/resources/fixtures/multipart-body.yaml".readFile()) } From 4bdefa3aec299e352d0ba7111c8e234f3efa26dc Mon Sep 17 00:00:00 2001 From: Anna Shipil Date: Fri, 4 Sep 2026 09:15:05 +0200 Subject: [PATCH 5/6] DEVX-867: fixing bug --- .../io/vrap/codegen/languages/oas/model/OasResourceRenderer.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/languages/oas/src/main/kotlin/io/vrap/codegen/languages/oas/model/OasResourceRenderer.kt b/languages/oas/src/main/kotlin/io/vrap/codegen/languages/oas/model/OasResourceRenderer.kt index 5d61a201..0b705122 100644 --- a/languages/oas/src/main/kotlin/io/vrap/codegen/languages/oas/model/OasResourceRenderer.kt +++ b/languages/oas/src/main/kotlin/io/vrap/codegen/languages/oas/model/OasResourceRenderer.kt @@ -54,7 +54,7 @@ class OasResourceRenderer constructor(val api: Api, val vrapTypeProvider: VrapTy | parameters: | <<${method.queryParameters.joinToString("\n") { renderQueryParameter(method,it) }}>>""" else ""}${if (method.bodies.any { it.type != null }) """ | requestBody: - | content: + | content: | <<${bodies.joinToString("\n") { renderBody(it, method) } }>>""" else ""}${if (annotations.isNotEmpty()) """ | <<${annotations.joinToString("\n") { it.renderAnnotation() }} >>""" else ""} | responses: From 19896c382603b1368b9eb7267757499f317e77e6 Mon Sep 17 00:00:00 2001 From: Anna Shipil Date: Fri, 4 Sep 2026 09:16:54 +0200 Subject: [PATCH 6/6] DEVX-867: updating test --- languages/oas/src/test/resources/fixtures/multipart-body.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/languages/oas/src/test/resources/fixtures/multipart-body.yaml b/languages/oas/src/test/resources/fixtures/multipart-body.yaml index 9d00d4d5..4e8505ac 100644 --- a/languages/oas/src/test/resources/fixtures/multipart-body.yaml +++ b/languages/oas/src/test/resources/fixtures/multipart-body.yaml @@ -11,7 +11,7 @@ paths: post: operationId: TestPost requestBody: - content: + content: application/json: schema: $ref: '#/components/schemas/TestRequest'