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..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,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()}>> diff --git a/languages/oas/src/test/kotlin/languages/oas/TestCodeGenerator.kt b/languages/oas/src/test/kotlin/languages/oas/TestCodeGenerator.kt index 46221b50..11d4d1f5 100644 --- a/languages/oas/src/test/kotlin/languages/oas/TestCodeGenerator.kt +++ b/languages/oas/src/test/kotlin/languages/oas/TestCodeGenerator.kt @@ -127,4 +127,30 @@ 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( + 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()) + } } 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..4e8505ac --- /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