From c9b934147ad7bbf0c1871fe69efc93f95faa5572 Mon Sep 17 00:00:00 2001 From: Akihito Nakano Date: Thu, 26 Jul 2018 22:26:01 +0900 Subject: [PATCH] [PHP] Escape media type (#615) * Move escapeMediaType() to AbstractPhpCodegen * Escape media type * Update samples - bin/php-lumen-petstore-server.sh * Refactoring: remove unused 'import' --- .../codegen/languages/AbstractPhpCodegen.java | 20 +++++++++++++---- .../languages/PhpLumenServerCodegen.java | 3 ++- .../languages/PhpSlimServerCodegen.java | 12 +--------- .../codegen/php/AbstractPhpCodegenTest.java | 22 +++++++++++++++++++ .../php-lumen/lib/app/Http/routes.php | 8 +++---- 5 files changed, 45 insertions(+), 20 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPhpCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPhpCodegen.java index 83afd83730c..f6b2959fd2b 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPhpCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPhpCodegen.java @@ -23,13 +23,9 @@ import org.openapitools.codegen.CodegenConstants; import org.openapitools.codegen.CodegenOperation; import org.openapitools.codegen.CodegenParameter; import org.openapitools.codegen.CodegenProperty; -import org.openapitools.codegen.CodegenType; import org.openapitools.codegen.DefaultCodegen; -import org.openapitools.codegen.SupportingFile; import org.openapitools.codegen.utils.ModelUtils; -import io.swagger.v3.oas.models.OpenAPI; -import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.media.*; import java.io.File; @@ -702,6 +698,22 @@ public abstract class AbstractPhpCodegen extends DefaultCodegen implements Codeg return super.escapeText(input).trim(); } + public void escapeMediaType(List operationList) { + for (CodegenOperation op : operationList) { + if (!op.hasProduces) { + continue; + } + + List> c = op.produces; + for (Map mediaType : c) { + // "*/*" causes a syntax error + if ("*/*".equals(mediaType.get("mediaType"))) { + mediaType.put("mediaType", "*_/_*"); + } + } + } + } + protected String extractSimpleName(String phpClassName) { if (phpClassName == null) { return null; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpLumenServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpLumenServerCodegen.java index 233547f1867..0a96acef6e1 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpLumenServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpLumenServerCodegen.java @@ -18,7 +18,6 @@ package org.openapitools.codegen.languages; import org.openapitools.codegen.*; -import io.swagger.models.properties.*; import java.util.*; import java.io.File; @@ -133,6 +132,8 @@ public class PhpLumenServerCodegen extends AbstractPhpCodegen { } }); + escapeMediaType(operations); + return objs; } } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlimServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlimServerCodegen.java index 514b619b219..e7e49afc7fd 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlimServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlimServerCodegen.java @@ -124,17 +124,7 @@ public class PhpSlimServerCodegen extends AbstractPhpCodegen { public Map postProcessOperationsWithModels(Map objs, List allModels) { Map operations = (Map) objs.get("operations"); List operationList = (List) operations.get("operation"); - for (CodegenOperation op : operationList) { - if (op.hasProduces) { - // need to escape */* values because they breakes current mustaches - List> c = op.produces; - for (Map mediaType : c) { - if ("*/*".equals(mediaType.get("mediaType"))) { - mediaType.put("mediaType", "*_/_*"); - } - } - } - } + escapeMediaType(operationList); return objs; } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/php/AbstractPhpCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/php/AbstractPhpCodegenTest.java index 3aa56146ae3..e1a07d97fde 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/php/AbstractPhpCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/php/AbstractPhpCodegenTest.java @@ -17,6 +17,7 @@ package org.openapitools.codegen.php; +import org.openapitools.codegen.CodegenOperation; import org.testng.Assert; import org.testng.annotations.Test; @@ -24,6 +25,9 @@ import org.openapitools.codegen.CodegenConstants; import org.openapitools.codegen.CodegenType; import org.openapitools.codegen.languages.AbstractPhpCodegen; +import java.util.Arrays; +import java.util.HashMap; + public class AbstractPhpCodegenTest { @Test @@ -79,6 +83,24 @@ public class AbstractPhpCodegenTest { Assert.assertEquals(codegen.additionalProperties().get(CodegenConstants.INVOKER_PACKAGE), "PHPinvoker"); } + @Test + public void testEscapeMediaType() throws Exception { + HashMap all = new HashMap<>(); + all.put("mediaType", "*/*"); + HashMap applicationJson = new HashMap<>(); + applicationJson.put("mediaType", "application/json"); + + CodegenOperation codegenOperation = new CodegenOperation(); + codegenOperation.hasProduces = true; + codegenOperation.produces = Arrays.asList(all, applicationJson); + + final AbstractPhpCodegen codegen = new P_AbstractPhpCodegen(); + codegen.escapeMediaType(Arrays.asList(codegenOperation)); + + Assert.assertEquals(codegenOperation.produces.get(0).get("mediaType"), "*_/_*"); + Assert.assertEquals(codegenOperation.produces.get(1).get("mediaType"), "application/json"); + } + private static class P_AbstractPhpCodegen extends AbstractPhpCodegen { @Override public CodegenType getTag() { diff --git a/samples/server/petstore/php-lumen/lib/app/Http/routes.php b/samples/server/petstore/php-lumen/lib/app/Http/routes.php index 52945b138f0..078941b98b0 100644 --- a/samples/server/petstore/php-lumen/lib/app/Http/routes.php +++ b/samples/server/petstore/php-lumen/lib/app/Http/routes.php @@ -81,28 +81,28 @@ $app->get('/v2/fake/jsonFormData', 'FakeApi@testJsonFormData'); * post fakeOuterBooleanSerialize * Summary: * Notes: Test serialization of outer boolean types - * Output-Formats: [*/*] + * Output-Formats: [*_/_*] */ $app->post('/v2/fake/outer/boolean', 'FakeApi@fakeOuterBooleanSerialize'); /** * post fakeOuterCompositeSerialize * Summary: * Notes: Test serialization of object with outer number type - * Output-Formats: [*/*] + * Output-Formats: [*_/_*] */ $app->post('/v2/fake/outer/composite', 'FakeApi@fakeOuterCompositeSerialize'); /** * post fakeOuterNumberSerialize * Summary: * Notes: Test serialization of outer number types - * Output-Formats: [*/*] + * Output-Formats: [*_/_*] */ $app->post('/v2/fake/outer/number', 'FakeApi@fakeOuterNumberSerialize'); /** * post fakeOuterStringSerialize * Summary: * Notes: Test serialization of outer string types - * Output-Formats: [*/*] + * Output-Formats: [*_/_*] */ $app->post('/v2/fake/outer/string', 'FakeApi@fakeOuterStringSerialize'); /**