From 42313af7a1b6921fc49eab1e324cedb6a1f9da21 Mon Sep 17 00:00:00 2001 From: Akihito Nakano Date: Fri, 6 Oct 2017 16:56:13 +0900 Subject: [PATCH] [PHP] Fix: Type object not handled properly in setParameterExampleValue (#6619) * Add test which reproduce the warning #5338 https://github.com/swagger-api/swagger-codegen/issues/5338#issuecomment-292502895 `[main] WARN io.swagger.codegen.languages.PhpClientCodegen - Type object not handled properly in setParameterExampleValue` * Fix Type object not handled properly in setParameterExampleValue * Update samples - /bin/php-petstore.sh - /bin/security/php-petstore.sh --- .../codegen/languages/PhpClientCodegen.java | 2 ++ .../codegen/php/PhpClientExampleTest.java | 19 +++++++++++++++++++ .../lib/Model/ModelInterface.php | 1 - .../lib/ObjectSerializer.php | 4 +++- 4 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 modules/swagger-codegen/src/test/java/io/swagger/codegen/php/PhpClientExampleTest.java diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java index 98420bb37e1..d0a87381cde 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java @@ -627,6 +627,8 @@ public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig { example = "2013-10-20T19:20:30+01:00"; } example = "new \\DateTime(\"" + escapeText(example) + "\")"; + } else if ("object".equals(type)) { + example = "new \\stdClass"; } else if (!languageSpecificPrimitives.contains(type)) { // type is a model class, e.g. User example = "new " + getTypeDeclaration(type) + "()"; diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/php/PhpClientExampleTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/php/PhpClientExampleTest.java new file mode 100644 index 00000000000..6c45ce29da8 --- /dev/null +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/php/PhpClientExampleTest.java @@ -0,0 +1,19 @@ +package io.swagger.codegen.php; + +import io.swagger.codegen.CodegenParameter; +import io.swagger.codegen.languages.PhpClientCodegen; + +import org.testng.Assert; +import org.testng.annotations.Test; + +public class PhpClientExampleTest { + @Test(description = "sets example value") + public void exampleValueTest() { + PhpClientCodegen clientCodegen = new PhpClientCodegen(); + CodegenParameter p = new CodegenParameter(); + p.baseType = "object"; + + clientCodegen.setParameterExampleValue(p); + Assert.assertEquals(p.example, "new \\stdClass"); + } +} diff --git a/samples/client/petstore-security-test/php/SwaggerClient-php/lib/Model/ModelInterface.php b/samples/client/petstore-security-test/php/SwaggerClient-php/lib/Model/ModelInterface.php index a74455ea5a9..eaad2cf0a95 100644 --- a/samples/client/petstore-security-test/php/SwaggerClient-php/lib/Model/ModelInterface.php +++ b/samples/client/petstore-security-test/php/SwaggerClient-php/lib/Model/ModelInterface.php @@ -18,7 +18,6 @@ * OpenAPI spec version: 1.0.0 *_/ ' \" =end -- \\r\\n \\n \\r * Contact: apiteam@swagger.io *_/ ' \" =end -- \\r\\n \\n \\r * Generated by: https://github.com/swagger-api/swagger-codegen.git - * */ /** diff --git a/samples/client/petstore-security-test/php/SwaggerClient-php/lib/ObjectSerializer.php b/samples/client/petstore-security-test/php/SwaggerClient-php/lib/ObjectSerializer.php index e7b40fe74bb..99fab6e2059 100644 --- a/samples/client/petstore-security-test/php/SwaggerClient-php/lib/ObjectSerializer.php +++ b/samples/client/petstore-security-test/php/SwaggerClient-php/lib/ObjectSerializer.php @@ -64,7 +64,9 @@ class ObjectSerializer foreach ($data::swaggerTypes() as $property => $swaggerType) { $getter = $data::getters()[$property]; $value = $data->$getter(); - if ($value !== null && method_exists($swaggerType, 'getAllowableEnumValues') + if ($value !== null + && !in_array($swaggerType, ['DateTime', 'bool', 'boolean', 'byte', 'double', 'float', 'int', 'integer', 'mixed', 'number', 'object', 'string', 'void'], true) + && method_exists($swaggerType, 'getAllowableEnumValues') && !in_array($value, $swaggerType::getAllowableEnumValues())) { $imploded = implode("', '", $swaggerType::getAllowableEnumValues()); throw new \InvalidArgumentException("Invalid value for enum '$swaggerType', must be one of: '$imploded'");