diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlim4ServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlim4ServerCodegen.java index 4ec5c1f1166b..43efb159069a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlim4ServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlim4ServerCodegen.java @@ -44,6 +44,8 @@ public class PhpSlim4ServerCodegen extends PhpSlimServerCodegen { protected String mockPackage = ""; protected String utilsDirName = "Utils"; protected String utilsPackage = ""; + protected String interfacesDirName = "Interfaces"; + protected String interfacesPackage = ""; public PhpSlim4ServerCodegen() { super(); @@ -54,6 +56,7 @@ public class PhpSlim4ServerCodegen extends PhpSlimServerCodegen { mockPackage = invokerPackage + "\\" + mockDirName; utilsPackage = invokerPackage + "\\" + utilsDirName; + interfacesPackage = invokerPackage + "\\" + interfacesDirName; outputFolder = "generated-code" + File.separator + "slim4"; embeddedTemplateDir = templateDir = "php-slim4-server"; @@ -92,6 +95,7 @@ public class PhpSlim4ServerCodegen extends PhpSlimServerCodegen { // Update mockPackage and utilsPackage mockPackage = invokerPackage + "\\" + mockDirName; utilsPackage = invokerPackage + "\\" + utilsDirName; + interfacesPackage = invokerPackage + "\\" + interfacesDirName; } // make mock src path available in mustache template @@ -104,6 +108,11 @@ public class PhpSlim4ServerCodegen extends PhpSlimServerCodegen { additionalProperties.put("utilsSrcPath", "./" + toSrcPath(utilsPackage, srcBasePath)); additionalProperties.put("utilsTestPath", "./" + toSrcPath(utilsPackage, testBasePath)); + // same for interfaces package + additionalProperties.put("interfacesPackage", interfacesPackage); + additionalProperties.put("interfacesSrcPath", "./" + toSrcPath(interfacesPackage, srcBasePath)); + additionalProperties.put("interfacesTestPath", "./" + toSrcPath(interfacesPackage, testBasePath)); + if (additionalProperties.containsKey(PSR7_IMPLEMENTATION)) { this.setPsr7Implementation((String) additionalProperties.get(PSR7_IMPLEMENTATION)); } @@ -147,6 +156,9 @@ public class PhpSlim4ServerCodegen extends PhpSlimServerCodegen { supportingFiles.add(new SupportingFile("string_utils_trait_test.mustache", toSrcPath(utilsPackage, testBasePath), toTraitName("StringUtils") + "Test.php")); supportingFiles.add(new SupportingFile("model_utils_trait.mustache", toSrcPath(utilsPackage, srcBasePath), toTraitName("ModelUtils") + ".php")); supportingFiles.add(new SupportingFile("model_utils_trait_test.mustache", toSrcPath(utilsPackage, testBasePath), toTraitName("ModelUtils") + "Test.php")); + + // model interface + supportingFiles.add(new SupportingFile("model_interface.mustache", toSrcPath(interfacesPackage, srcBasePath), toInterfaceName("Model") + ".php")); } /** diff --git a/modules/openapi-generator/src/main/resources/php-slim4-server/composer.mustache b/modules/openapi-generator/src/main/resources/php-slim4-server/composer.mustache index 68b2c89e92fd..2c399a84d779 100644 --- a/modules/openapi-generator/src/main/resources/php-slim4-server/composer.mustache +++ b/modules/openapi-generator/src/main/resources/php-slim4-server/composer.mustache @@ -41,10 +41,7 @@ }, "scripts": { "test": [ - "@test-apis", - "@test-models", - "@test-mock", - "@test-utils" + "phpunit" ], "test-apis": "phpunit --testsuite Apis", "test-models": "phpunit --testsuite Models", diff --git a/modules/openapi-generator/src/main/resources/php-slim4-server/model.mustache b/modules/openapi-generator/src/main/resources/php-slim4-server/model.mustache index 6ed9dea54ce7..67112c852270 100644 --- a/modules/openapi-generator/src/main/resources/php-slim4-server/model.mustache +++ b/modules/openapi-generator/src/main/resources/php-slim4-server/model.mustache @@ -16,6 +16,8 @@ */ namespace {{modelPackage}}; +use {{interfacesPackage}}\{{interfaceNamePrefix}}Model{{interfaceNameSuffix}}; + /** * {{classname}} * @@ -23,12 +25,27 @@ namespace {{modelPackage}}; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class {{classname}} +class {{classname}} implements {{interfaceNamePrefix}}Model{{interfaceNameSuffix}} { + private const MODEL_SCHEMA = <<<'SCHEMA' +{{{modelJson}}} +SCHEMA; {{#vars}} - + /** @var {{dataType}} ${{name}} {{#description}}{{description}}{{/description}}*/ private ${{name}}; {{/vars}} + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } {{/model}}{{/models}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/php-slim4-server/model_interface.mustache b/modules/openapi-generator/src/main/resources/php-slim4-server/model_interface.mustache new file mode 100644 index 000000000000..eb440ee5598b --- /dev/null +++ b/modules/openapi-generator/src/main/resources/php-slim4-server/model_interface.mustache @@ -0,0 +1,54 @@ +assertIsObject($schemaObject); + $this->assertIsArray($schemaArr); + } } {{/model}}{{/models}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/php-slim4-server/openapi_data_mocker.mustache b/modules/openapi-generator/src/main/resources/php-slim4-server/openapi_data_mocker.mustache index 4a335b5c312c..b18c8f890377 100644 --- a/modules/openapi-generator/src/main/resources/php-slim4-server/openapi_data_mocker.mustache +++ b/modules/openapi-generator/src/main/resources/php-slim4-server/openapi_data_mocker.mustache @@ -34,6 +34,7 @@ namespace {{mockPackage}}; use {{mockPackage}}\{{interfaceNamePrefix}}OpenApiDataMocker{{interfaceNameSuffix}} as IMocker; +use {{utilsPackage}}\{{traitNamePrefix}}ModelUtils{{traitNameSuffix}}; use StdClass; use InvalidArgumentException; @@ -46,6 +47,8 @@ use InvalidArgumentException; */ final class OpenApiDataMocker implements IMocker { + use {{traitNamePrefix}}ModelUtils{{traitNameSuffix}}; + /** * Mocks OpenApi Data. * @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.1.md#data-types @@ -74,7 +77,8 @@ final class OpenApiDataMocker implements IMocker case IMocker::DATA_TYPE_STRING: $minLength = $options['minLength'] ?? 0; $maxLength = $options['maxLength'] ?? null; - return $this->mockString($dataFormat, $minLength, $maxLength); + $enum = $options['enum'] ?? null; + return $this->mockString($dataFormat, $minLength, $maxLength, $enum); case IMocker::DATA_TYPE_BOOLEAN: return $this->mockBoolean(); case IMocker::DATA_TYPE_ARRAY: @@ -276,11 +280,13 @@ final class OpenApiDataMocker implements IMocker $options = $this->extractSchemaProperties($items); $dataType = $options['type']; $dataFormat = $options['format'] ?? null; + $ref = $options['$ref'] ?? null; - // always genarate smallest possible array to avoid huge JSON responses + // always generate smallest possible array to avoid huge JSON responses $arrSize = ($maxSize < 1) ? $maxSize : max($minSize, 1); while (count($arr) < $arrSize) { - $arr[] = $this->mock($dataType, $dataFormat, $options); + $data = $this->mockFromRef($ref); + $arr[] = ($data) ? $data : $this->mock($dataType, $dataFormat, $options); } return $arr; } @@ -360,12 +366,62 @@ final class OpenApiDataMocker implements IMocker $options = $this->extractSchemaProperties($propValue); $dataType = $options['type']; $dataFormat = $options['dataFormat'] ?? null; - $obj->$propName = $this->mock($dataType, $dataFormat, $options); + $ref = $options['$ref'] ?? null; + $data = $this->mockFromRef($ref); + $obj->$propName = ($data) ? $data : $this->mock($dataType, $dataFormat, $options); } return $obj; } + /** + * Mocks OpenApi Data from schema. + * + * @param array|object $schema OpenAPI schema + * + * @throws \InvalidArgumentException when invalid arguments passed + * + * @return mixed + */ + public function mockFromSchema($schema) + { + $props = $this->extractSchemaProperties($schema); + if (array_key_exists('$ref', $props) && !empty($props['$ref'])) { + return $this->mockFromRef($props['$ref']); + } elseif ($props['type'] === null) { + throw new InvalidArgumentException('"schema" must be object or assoc array with "type" property'); + } + return $this->mock($props['type'], $props['format'], $props); + } + + /** + * Mock data by referenced schema. + * TODO: this method will return model instance, not an StdClass + * + * @param string|null $ref Ref to model, eg. #/components/schemas/User + * + * @return mixed + */ + public function mockFromRef($ref) + { + $data = null; + if (is_string($ref) && !empty($ref)) { + $refName = static::getSimpleRef($ref); + $modelName = static::toModelName($refName); + $modelClass = '{{modelPackage}}\\' . $modelName; + if (!class_exists($modelClass) || !method_exists($modelClass, 'getOpenApiSchema')) { + throw new InvalidArgumentException(sprintf( + 'Model %s not found or method %s doesn\'t exist', + $modelClass, + $modelClass . '::getOpenApiSchema' + )); + } + $data = $this->mockFromSchema($modelClass::getOpenApiSchema(true)); + } + + return $data; + } + /** * @internal Extract OAS properties from array or object. * @codeCoverageIgnore @@ -402,6 +458,7 @@ final class OpenApiDataMocker implements IMocker 'additionalProperties', 'required', 'example', + '$ref', ] as $propName ) { if (is_array($val) && array_key_exists($propName, $val)) { diff --git a/modules/openapi-generator/src/main/resources/php-slim4-server/openapi_data_mocker_interface.mustache b/modules/openapi-generator/src/main/resources/php-slim4-server/openapi_data_mocker_interface.mustache index cbed4323a220..eaa28ba2b428 100644 --- a/modules/openapi-generator/src/main/resources/php-slim4-server/openapi_data_mocker_interface.mustache +++ b/modules/openapi-generator/src/main/resources/php-slim4-server/openapi_data_mocker_interface.mustache @@ -237,5 +237,28 @@ interface {{interfaceNamePrefix}}OpenApiDataMocker{{interfaceNameSuffix}} $additionalProperties = null, $required = null ); + + /** + * Mocks OpenApi Data from schema. + * + * @param array|object $schema OpenAPI schema + * + * @throws \InvalidArgumentException when invalid arguments passed + * + * @return mixed + */ + public function mockFromSchema($schema); + + /** + * Mock data by referenced schema. + * TODO: this method will return model instance, not an StdClass + * + * @param string|null $ref Ref to model, eg. #/components/schemas/User + * + * @throws \InvalidArgumentException when invalid arguments passed + * + * @return mixed + */ + public function mockFromRef($ref); } {{/apiInfo}} diff --git a/modules/openapi-generator/src/main/resources/php-slim4-server/openapi_data_mocker_test.mustache b/modules/openapi-generator/src/main/resources/php-slim4-server/openapi_data_mocker_test.mustache index 53a700bed733..94b80e9352b7 100644 --- a/modules/openapi-generator/src/main/resources/php-slim4-server/openapi_data_mocker_test.mustache +++ b/modules/openapi-generator/src/main/resources/php-slim4-server/openapi_data_mocker_test.mustache @@ -38,6 +38,7 @@ use {{mockPackage}}\{{interfaceNamePrefix}}OpenApiDataMocker{{interfaceNameSuffi use PHPUnit\Framework\TestCase; use PHPUnit\Framework\Constraint\IsType; use StdClass; +use DateTime; /** * OpenApiDataMockerTest Class Doc Comment @@ -103,6 +104,18 @@ class OpenApiDataMockerTest extends TestCase ]; } + /** + * @covers ::mock + */ + public function testMockWithStringEnumOptions() + { + $mocker = new OpenApiDataMocker(); + $string = $mocker->mock(IMocker::DATA_TYPE_STRING, null, [ + 'enum' => ['foobar', 'foobaz', 'helloworld'], + ]); + $this->assertContains($string, ['foobar', 'foobaz', 'helloworld']); + } + /** * @dataProvider provideMockIntegerCorrectArguments * @covers ::mockInteger @@ -519,7 +532,7 @@ class OpenApiDataMockerTest extends TestCase $subMaxItems = $items->maxItems ?? null; $subUniqueItems = $items->uniqueItems ?? null; } - + foreach ($arr as $item) { switch ($dataType) { @@ -647,6 +660,45 @@ class OpenApiDataMockerTest extends TestCase 'maxItems less than minItems' => [ $intItems, 5, 2, false, ], + 'items with ref to unknown class' => [ + ['$ref' => '#/components/schemas/UnknownClass'], null, null, false, + ], + 'items with ref to class without getOpenApiSchema method' => [ + ['$ref' => '#/components/schemas/ClassWithoutGetSchemaMethod'], null, null, false, + ], + ]; + } + + /** + * @dataProvider provideMockArrayWithRefArguments + * @covers ::mockArray + */ + public function testMockArrayWithRef($items, $expectedStructure) + { + $mocker = new OpenApiDataMocker(); + $arr = $mocker->mockArray($items); + $this->assertIsArray($arr); + $this->assertCount(1, $arr); + foreach ($arr as $item) { + // TODO: replace with assertInstanceOf assertion + $this->assertInternalType(IsType::TYPE_OBJECT, $item); + foreach ($expectedStructure as $expectedProp => $expectedType) { + $this->assertInternalType($expectedType, $item->$expectedProp); + } + } + } + + public function provideMockArrayWithRefArguments() + { + return [ + 'items with ref to CatRefTestClass' => [ + ['$ref' => '#/components/schemas/CatRefTestClass'], + [ + 'className' => IsType::TYPE_STRING, + 'color' => IsType::TYPE_STRING, + 'declawed' => IsType::TYPE_BOOL, + ], + ], ]; } @@ -731,6 +783,9 @@ class OpenApiDataMockerTest extends TestCase 'properties cannot be a string' => [ 'foobar', 0, 10, false, null, ], + 'property value cannot be a string' => [ + ['username' => 'foobar'], 0, 10, false, null, + ], 'minProperties is not integer' => [ [], 3.12, null, false, null, ], @@ -769,5 +824,220 @@ class OpenApiDataMockerTest extends TestCase ], ]; } + + /** + * @covers ::mockObject + */ + public function testMockObjectWithReferencedProps() + { + $mocker = new OpenApiDataMocker(); + $obj = $mocker->mockObject( + (object) [ + 'cat' => [ + '$ref' => '#/components/schemas/CatRefTestClass', + ], + ] + ); + $this->assertInternalType(IsType::TYPE_OBJECT, $obj->cat); + $this->assertInternalType(IsType::TYPE_STRING, $obj->cat->className); + $this->assertInternalType(IsType::TYPE_STRING, $obj->cat->color); + $this->assertInternalType(IsType::TYPE_BOOL, $obj->cat->declawed); + } + + /** + * @dataProvider provideMockFromSchemaCorrectArguments + * @covers ::mockFromSchema + */ + public function testMockFromSchemaWithCorrectArguments($schema, $expectedType) + { + $mocker = new OpenApiDataMocker(); + $data = $mocker->mockFromSchema($schema); + $this->assertInternalType($expectedType, $data); + } + + public function provideMockFromSchemaCorrectArguments() + { + return [ + 'string from object' => [ + (object) ['type' => IMocker::DATA_TYPE_STRING], + IsType::TYPE_STRING, + ], + 'string from array' => [ + ['type' => IMocker::DATA_TYPE_STRING], + IsType::TYPE_STRING, + ], + 'integer from object' => [ + (object) ['type' => IMocker::DATA_TYPE_INTEGER], + IsType::TYPE_INT, + ], + 'integer from array' => [ + ['type' => IMocker::DATA_TYPE_INTEGER], + IsType::TYPE_INT, + ], + 'number from object' => [ + (object) ['type' => IMocker::DATA_TYPE_NUMBER], + IsType::TYPE_FLOAT, + ], + 'number from array' => [ + ['type' => IMocker::DATA_TYPE_NUMBER], + IsType::TYPE_FLOAT, + ], + 'string from object' => [ + (object) ['type' => IMocker::DATA_TYPE_STRING], + IsType::TYPE_STRING, + ], + 'string from array' => [ + ['type' => IMocker::DATA_TYPE_STRING], + IsType::TYPE_STRING, + ], + 'boolean from object' => [ + (object) ['type' => IMocker::DATA_TYPE_BOOLEAN], + IsType::TYPE_BOOL, + ], + 'boolean from array' => [ + ['type' => IMocker::DATA_TYPE_BOOLEAN], + IsType::TYPE_BOOL, + ], + 'array of strings from object' => [ + (object) [ + 'type' => IMocker::DATA_TYPE_ARRAY, + 'items' => ['type' => IMocker::DATA_TYPE_STRING], + ], + IsType::TYPE_ARRAY, + ], + 'array of strings from array' => [ + [ + 'type' => IMocker::DATA_TYPE_ARRAY, + 'items' => ['type' => IMocker::DATA_TYPE_STRING], + ], + IsType::TYPE_ARRAY, + ], + 'object with username prop from object' => [ + (object) [ + 'type' => IMocker::DATA_TYPE_OBJECT, + 'properties' => ['username' => ['type' => IMocker::DATA_TYPE_STRING]], + ], + IsType::TYPE_OBJECT, + ], + 'object with username prop from array' => [ + [ + 'type' => IMocker::DATA_TYPE_OBJECT, + 'properties' => ['username' => ['type' => IMocker::DATA_TYPE_STRING]], + ], + IsType::TYPE_OBJECT, + ], + 'referenced class' => [ + ['$ref' => '#/components/schemas/CatRefTestClass'], + IsType::TYPE_OBJECT, + ], + ]; + } + + /** + * @dataProvider provideMockFromSchemaInvalidArguments + * @expectedException \InvalidArgumentException + * @covers ::mockFromSchema + */ + public function testMockFromSchemaWithInvalidArguments($schema) + { + $mocker = new OpenApiDataMocker(); + $data = $mocker->mockFromSchema($schema); + } + + + public function provideMockFromSchemaInvalidArguments() + { + return [ + 'null' => [null], + 'numeric' => [3.14], + 'empty array' => [[]], + 'empty object' => [(object) []], + 'string' => ['foobar'], + 'DateTime object' => [new DateTime()], + ]; + } + + /** + * @dataProvider provideMockFromRefCorrectArguments + * @covers ::mockFromRef + */ + public function testMockFromRefWithCorrectArguments($ref, $expectedStructure) + { + $mocker = new OpenApiDataMocker(); + $data = $mocker->mockFromRef($ref); + foreach ($expectedStructure as $expectedProp => $expectedType) { + $this->assertInternalType($expectedType, $data->$expectedProp); + } + } + + public function provideMockFromRefCorrectArguments() + { + return [ + 'CatRefTestClass model' => [ + '#/components/schemas/CatRefTestClass', + [ + 'className' => IsType::TYPE_STRING, + 'color' => IsType::TYPE_STRING, + 'declawed' => IsType::TYPE_BOOL, + ] + ], + ]; + } + + /** + * @dataProvider provideMockFromRefInvalidArguments + * @expectedException \InvalidArgumentException + * @covers ::mockFromRef + */ + public function testMockFromRefWithInvalidArguments($ref) + { + $mocker = new OpenApiDataMocker(); + $data = $mocker->mockFromRef($ref); + } + + public function provideMockFromRefInvalidArguments() + { + return [ + 'ref to unknown class' => ['#/components/schemas/UnknownClass'], + 'ref to class without getOpenApiSchema method' => ['#/components/schemas/ClassWithoutGetSchemaMethod'], + ]; + } +} + +namespace {{modelPackage}}; + +// phpcs:disable PSR1.Classes.ClassDeclaration.MultipleClasses +final class CatRefTestClass +{ + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "required" : [ "className" ], + "type" : "object", + "properties" : { + "className" : { + "type" : "string" + }, + "color" : { + "type" : "string", + "default" : "red" + }, + "declawed" : { + "type" : "boolean" + } + }, + "discriminator" : { + "propertyName" : "className" + } +} +SCHEMA; + + public static function getOpenApiSchema() + { + return json_decode(static::MODEL_SCHEMA, true); + } +} + +final class ClassWithoutGetSchemaMethod +{ } {{/apiInfo}} diff --git a/samples/server/petstore/php-slim4/composer.json b/samples/server/petstore/php-slim4/composer.json index d7d8142f6d10..eebb5f244086 100644 --- a/samples/server/petstore/php-slim4/composer.json +++ b/samples/server/petstore/php-slim4/composer.json @@ -28,10 +28,7 @@ }, "scripts": { "test": [ - "@test-apis", - "@test-models", - "@test-mock", - "@test-utils" + "phpunit" ], "test-apis": "phpunit --testsuite Apis", "test-models": "phpunit --testsuite Models", diff --git a/samples/server/petstore/php-slim4/lib/Interfaces/ModelInterface.php b/samples/server/petstore/php-slim4/lib/Interfaces/ModelInterface.php new file mode 100644 index 000000000000..480eae3d38da --- /dev/null +++ b/samples/server/petstore/php-slim4/lib/Interfaces/ModelInterface.php @@ -0,0 +1,45 @@ +mockString($dataFormat, $minLength, $maxLength); + $enum = $options['enum'] ?? null; + return $this->mockString($dataFormat, $minLength, $maxLength, $enum); case IMocker::DATA_TYPE_BOOLEAN: return $this->mockBoolean(); case IMocker::DATA_TYPE_ARRAY: @@ -268,11 +272,13 @@ final class OpenApiDataMocker implements IMocker $options = $this->extractSchemaProperties($items); $dataType = $options['type']; $dataFormat = $options['format'] ?? null; + $ref = $options['$ref'] ?? null; - // always genarate smallest possible array to avoid huge JSON responses + // always generate smallest possible array to avoid huge JSON responses $arrSize = ($maxSize < 1) ? $maxSize : max($minSize, 1); while (count($arr) < $arrSize) { - $arr[] = $this->mock($dataType, $dataFormat, $options); + $data = $this->mockFromRef($ref); + $arr[] = ($data) ? $data : $this->mock($dataType, $dataFormat, $options); } return $arr; } @@ -352,12 +358,62 @@ final class OpenApiDataMocker implements IMocker $options = $this->extractSchemaProperties($propValue); $dataType = $options['type']; $dataFormat = $options['dataFormat'] ?? null; - $obj->$propName = $this->mock($dataType, $dataFormat, $options); + $ref = $options['$ref'] ?? null; + $data = $this->mockFromRef($ref); + $obj->$propName = ($data) ? $data : $this->mock($dataType, $dataFormat, $options); } return $obj; } + /** + * Mocks OpenApi Data from schema. + * + * @param array|object $schema OpenAPI schema + * + * @throws \InvalidArgumentException when invalid arguments passed + * + * @return mixed + */ + public function mockFromSchema($schema) + { + $props = $this->extractSchemaProperties($schema); + if (array_key_exists('$ref', $props) && !empty($props['$ref'])) { + return $this->mockFromRef($props['$ref']); + } elseif ($props['type'] === null) { + throw new InvalidArgumentException('"schema" must be object or assoc array with "type" property'); + } + return $this->mock($props['type'], $props['format'], $props); + } + + /** + * Mock data by referenced schema. + * TODO: this method will return model instance, not an StdClass + * + * @param string|null $ref Ref to model, eg. #/components/schemas/User + * + * @return mixed + */ + public function mockFromRef($ref) + { + $data = null; + if (is_string($ref) && !empty($ref)) { + $refName = static::getSimpleRef($ref); + $modelName = static::toModelName($refName); + $modelClass = 'OpenAPIServer\Model\\' . $modelName; + if (!class_exists($modelClass) || !method_exists($modelClass, 'getOpenApiSchema')) { + throw new InvalidArgumentException(sprintf( + 'Model %s not found or method %s doesn\'t exist', + $modelClass, + $modelClass . '::getOpenApiSchema' + )); + } + $data = $this->mockFromSchema($modelClass::getOpenApiSchema(true)); + } + + return $data; + } + /** * @internal Extract OAS properties from array or object. * @codeCoverageIgnore @@ -394,6 +450,7 @@ final class OpenApiDataMocker implements IMocker 'additionalProperties', 'required', 'example', + '$ref', ] as $propName ) { if (is_array($val) && array_key_exists($propName, $val)) { diff --git a/samples/server/petstore/php-slim4/lib/Mock/OpenApiDataMockerInterface.php b/samples/server/petstore/php-slim4/lib/Mock/OpenApiDataMockerInterface.php index 78fd9a859a56..0a2852aaaf98 100644 --- a/samples/server/petstore/php-slim4/lib/Mock/OpenApiDataMockerInterface.php +++ b/samples/server/petstore/php-slim4/lib/Mock/OpenApiDataMockerInterface.php @@ -229,4 +229,27 @@ interface OpenApiDataMockerInterface $additionalProperties = null, $required = null ); + + /** + * Mocks OpenApi Data from schema. + * + * @param array|object $schema OpenAPI schema + * + * @throws \InvalidArgumentException when invalid arguments passed + * + * @return mixed + */ + public function mockFromSchema($schema); + + /** + * Mock data by referenced schema. + * TODO: this method will return model instance, not an StdClass + * + * @param string|null $ref Ref to model, eg. #/components/schemas/User + * + * @throws \InvalidArgumentException when invalid arguments passed + * + * @return mixed + */ + public function mockFromRef($ref); } diff --git a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesAnyType.php b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesAnyType.php index 6aae0e269b83..d5bfc975b933 100644 --- a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesAnyType.php +++ b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesAnyType.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * AdditionalPropertiesAnyType * @@ -23,9 +25,35 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class AdditionalPropertiesAnyType +class AdditionalPropertiesAnyType implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "name" : { + "type" : "string" + } + }, + "additionalProperties" : { + "type" : "object", + "properties" : { } + } +} +SCHEMA; + /** @var string $name */ private $name; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesArray.php b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesArray.php index e56c49842d18..eec1753f0dfe 100644 --- a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesArray.php +++ b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesArray.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * AdditionalPropertiesArray * @@ -23,9 +25,38 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class AdditionalPropertiesArray +class AdditionalPropertiesArray implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "name" : { + "type" : "string" + } + }, + "additionalProperties" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { } + } + } +} +SCHEMA; + /** @var string $name */ private $name; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesBoolean.php b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesBoolean.php index c5bc97b96682..f5503fa41bad 100644 --- a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesBoolean.php +++ b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesBoolean.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * AdditionalPropertiesBoolean * @@ -23,9 +25,34 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class AdditionalPropertiesBoolean +class AdditionalPropertiesBoolean implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "name" : { + "type" : "string" + } + }, + "additionalProperties" : { + "type" : "boolean" + } +} +SCHEMA; + /** @var string $name */ private $name; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesClass.php b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesClass.php index a1c90ffa2afb..7fb8f08834e9 100644 --- a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesClass.php +++ b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesClass.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * AdditionalPropertiesClass * @@ -23,39 +25,131 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class AdditionalPropertiesClass +class AdditionalPropertiesClass implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "map_string" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + } + }, + "map_number" : { + "type" : "object", + "additionalProperties" : { + "type" : "number" + } + }, + "map_integer" : { + "type" : "object", + "additionalProperties" : { + "type" : "integer" + } + }, + "map_boolean" : { + "type" : "object", + "additionalProperties" : { + "type" : "boolean" + } + }, + "map_array_integer" : { + "type" : "object", + "additionalProperties" : { + "type" : "array", + "items" : { + "type" : "integer" + } + } + }, + "map_array_anytype" : { + "type" : "object", + "additionalProperties" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { } + } + } + }, + "map_map_string" : { + "type" : "object", + "additionalProperties" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + } + } + }, + "map_map_anytype" : { + "type" : "object", + "additionalProperties" : { + "type" : "object", + "additionalProperties" : { + "type" : "object", + "properties" : { } + } + } + }, + "anytype_1" : { + "type" : "object", + "properties" : { } + }, + "anytype_2" : { + "type" : "object" + }, + "anytype_3" : { + "type" : "object", + "properties" : { } + } + } +} +SCHEMA; + /** @var map[string,string] $mapString */ private $mapString; - + /** @var map[string,float] $mapNumber */ private $mapNumber; - + /** @var map[string,int] $mapInteger */ private $mapInteger; - + /** @var map[string,bool] $mapBoolean */ private $mapBoolean; - + /** @var map[string,int[]] $mapArrayInteger */ private $mapArrayInteger; - + /** @var map[string,object[]] $mapArrayAnytype */ private $mapArrayAnytype; - + /** @var map[string,map[string,string]] $mapMapString */ private $mapMapString; - + /** @var map[string,map[string,object]] $mapMapAnytype */ private $mapMapAnytype; - + /** @var object $anytype1 */ private $anytype1; - + /** @var object $anytype2 */ private $anytype2; - + /** @var object $anytype3 */ private $anytype3; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesInteger.php b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesInteger.php index ebeddfd129ab..116ed20c56c5 100644 --- a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesInteger.php +++ b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesInteger.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * AdditionalPropertiesInteger * @@ -23,9 +25,34 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class AdditionalPropertiesInteger +class AdditionalPropertiesInteger implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "name" : { + "type" : "string" + } + }, + "additionalProperties" : { + "type" : "integer" + } +} +SCHEMA; + /** @var string $name */ private $name; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesNumber.php b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesNumber.php index 31541b5b692a..e234140479d5 100644 --- a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesNumber.php +++ b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesNumber.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * AdditionalPropertiesNumber * @@ -23,9 +25,34 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class AdditionalPropertiesNumber +class AdditionalPropertiesNumber implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "name" : { + "type" : "string" + } + }, + "additionalProperties" : { + "type" : "number" + } +} +SCHEMA; + /** @var string $name */ private $name; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesObject.php b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesObject.php index 8b1036894dd2..55ea5bf762c9 100644 --- a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesObject.php +++ b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesObject.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * AdditionalPropertiesObject * @@ -23,9 +25,38 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class AdditionalPropertiesObject +class AdditionalPropertiesObject implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "name" : { + "type" : "string" + } + }, + "additionalProperties" : { + "type" : "object", + "additionalProperties" : { + "type" : "object", + "properties" : { } + } + } +} +SCHEMA; + /** @var string $name */ private $name; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesString.php b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesString.php index 303636060c7a..56471c9bc8ce 100644 --- a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesString.php +++ b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesString.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * AdditionalPropertiesString * @@ -23,9 +25,34 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class AdditionalPropertiesString +class AdditionalPropertiesString implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "name" : { + "type" : "string" + } + }, + "additionalProperties" : { + "type" : "string" + } +} +SCHEMA; + /** @var string $name */ private $name; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/Animal.php b/samples/server/petstore/php-slim4/lib/Model/Animal.php index 69fc086183d4..b0f3c2384986 100644 --- a/samples/server/petstore/php-slim4/lib/Model/Animal.php +++ b/samples/server/petstore/php-slim4/lib/Model/Animal.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * Animal * @@ -23,12 +25,42 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class Animal +class Animal implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "required" : [ "className" ], + "type" : "object", + "properties" : { + "className" : { + "type" : "string" + }, + "color" : { + "type" : "string", + "default" : "red" + } + }, + "discriminator" : { + "propertyName" : "className" + } +} +SCHEMA; + /** @var string $className */ private $className; - + /** @var string $color */ private $color; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/ApiResponse.php b/samples/server/petstore/php-slim4/lib/Model/ApiResponse.php index 8cfae424fdd0..eb00821d0605 100644 --- a/samples/server/petstore/php-slim4/lib/Model/ApiResponse.php +++ b/samples/server/petstore/php-slim4/lib/Model/ApiResponse.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * ApiResponse * @@ -23,15 +25,44 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class ApiResponse +class ApiResponse implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "code" : { + "type" : "integer", + "format" : "int32" + }, + "type" : { + "type" : "string" + }, + "message" : { + "type" : "string" + } + } +} +SCHEMA; + /** @var int $code */ private $code; - + /** @var string $type */ private $type; - + /** @var string $message */ private $message; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/ArrayOfArrayOfNumberOnly.php b/samples/server/petstore/php-slim4/lib/Model/ArrayOfArrayOfNumberOnly.php index ff08b3a57851..ea7a72a4f1db 100644 --- a/samples/server/petstore/php-slim4/lib/Model/ArrayOfArrayOfNumberOnly.php +++ b/samples/server/petstore/php-slim4/lib/Model/ArrayOfArrayOfNumberOnly.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * ArrayOfArrayOfNumberOnly * @@ -23,9 +25,37 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class ArrayOfArrayOfNumberOnly +class ArrayOfArrayOfNumberOnly implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "ArrayArrayNumber" : { + "type" : "array", + "items" : { + "type" : "array", + "items" : { + "type" : "number" + } + } + } + } +} +SCHEMA; + /** @var float[][] $arrayArrayNumber */ private $arrayArrayNumber; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/ArrayOfNumberOnly.php b/samples/server/petstore/php-slim4/lib/Model/ArrayOfNumberOnly.php index 05a136efde69..25b4c97c2a82 100644 --- a/samples/server/petstore/php-slim4/lib/Model/ArrayOfNumberOnly.php +++ b/samples/server/petstore/php-slim4/lib/Model/ArrayOfNumberOnly.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * ArrayOfNumberOnly * @@ -23,9 +25,34 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class ArrayOfNumberOnly +class ArrayOfNumberOnly implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "ArrayNumber" : { + "type" : "array", + "items" : { + "type" : "number" + } + } + } +} +SCHEMA; + /** @var float[] $arrayNumber */ private $arrayNumber; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/ArrayTest.php b/samples/server/petstore/php-slim4/lib/Model/ArrayTest.php index 2cfa4827bc93..66aa7e053a41 100644 --- a/samples/server/petstore/php-slim4/lib/Model/ArrayTest.php +++ b/samples/server/petstore/php-slim4/lib/Model/ArrayTest.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * ArrayTest * @@ -23,15 +25,59 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class ArrayTest +class ArrayTest implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "array_of_string" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "array_array_of_integer" : { + "type" : "array", + "items" : { + "type" : "array", + "items" : { + "type" : "integer", + "format" : "int64" + } + } + }, + "array_array_of_model" : { + "type" : "array", + "items" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/ReadOnlyFirst" + } + } + } + } +} +SCHEMA; + /** @var string[] $arrayOfString */ private $arrayOfString; - + /** @var int[][] $arrayArrayOfInteger */ private $arrayArrayOfInteger; - + /** @var \OpenAPIServer\Model\ReadOnlyFirst[][] $arrayArrayOfModel */ private $arrayArrayOfModel; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/BigCat.php b/samples/server/petstore/php-slim4/lib/Model/BigCat.php index 39eec7cbfa19..4b795da23913 100644 --- a/samples/server/petstore/php-slim4/lib/Model/BigCat.php +++ b/samples/server/petstore/php-slim4/lib/Model/BigCat.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * BigCat * @@ -23,18 +25,39 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class BigCat +class BigCat implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "allOf" : [ { + "$ref" : "#/components/schemas/Cat" + }, { + "$ref" : "#/components/schemas/BigCat_allOf" + } ] +} +SCHEMA; + /** @var string $className */ private $className; - + /** @var string $color */ private $color; - + /** @var bool $declawed */ private $declawed; - + /** @var string $kind */ private $kind; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/BigCatAllOf.php b/samples/server/petstore/php-slim4/lib/Model/BigCatAllOf.php index 4716fc8dd4b8..10433c34b8e4 100644 --- a/samples/server/petstore/php-slim4/lib/Model/BigCatAllOf.php +++ b/samples/server/petstore/php-slim4/lib/Model/BigCatAllOf.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * BigCatAllOf * @@ -23,9 +25,31 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class BigCatAllOf +class BigCatAllOf implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "properties" : { + "kind" : { + "type" : "string", + "enum" : [ "lions", "tigers", "leopards", "jaguars" ] + } + } +} +SCHEMA; + /** @var string $kind */ private $kind; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/Capitalization.php b/samples/server/petstore/php-slim4/lib/Model/Capitalization.php index edcbd0aff73c..b596ec922704 100644 --- a/samples/server/petstore/php-slim4/lib/Model/Capitalization.php +++ b/samples/server/petstore/php-slim4/lib/Model/Capitalization.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * Capitalization * @@ -23,24 +25,62 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class Capitalization +class Capitalization implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "smallCamel" : { + "type" : "string" + }, + "CapitalCamel" : { + "type" : "string" + }, + "small_Snake" : { + "type" : "string" + }, + "Capital_Snake" : { + "type" : "string" + }, + "SCA_ETH_Flow_Points" : { + "type" : "string" + }, + "ATT_NAME" : { + "type" : "string", + "description" : "Name of the pet\n" + } + } +} +SCHEMA; + /** @var string $smallCamel */ private $smallCamel; - + /** @var string $capitalCamel */ private $capitalCamel; - + /** @var string $smallSnake */ private $smallSnake; - + /** @var string $capitalSnake */ private $capitalSnake; - + /** @var string $sCAETHFlowPoints */ private $sCAETHFlowPoints; - + /** @var string $aTTNAME Name of the pet*/ private $aTTNAME; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/Cat.php b/samples/server/petstore/php-slim4/lib/Model/Cat.php index 97719201308e..1a6471a23160 100644 --- a/samples/server/petstore/php-slim4/lib/Model/Cat.php +++ b/samples/server/petstore/php-slim4/lib/Model/Cat.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * Cat * @@ -23,15 +25,36 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class Cat +class Cat implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "allOf" : [ { + "$ref" : "#/components/schemas/Animal" + }, { + "$ref" : "#/components/schemas/Cat_allOf" + } ] +} +SCHEMA; + /** @var string $className */ private $className; - + /** @var string $color */ private $color; - + /** @var bool $declawed */ private $declawed; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/CatAllOf.php b/samples/server/petstore/php-slim4/lib/Model/CatAllOf.php index 54dfe1cdab6c..8caa1dc6e579 100644 --- a/samples/server/petstore/php-slim4/lib/Model/CatAllOf.php +++ b/samples/server/petstore/php-slim4/lib/Model/CatAllOf.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * CatAllOf * @@ -23,9 +25,30 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class CatAllOf +class CatAllOf implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "properties" : { + "declawed" : { + "type" : "boolean" + } + } +} +SCHEMA; + /** @var bool $declawed */ private $declawed; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/Category.php b/samples/server/petstore/php-slim4/lib/Model/Category.php index 0a5a55d23773..f53e2af89093 100644 --- a/samples/server/petstore/php-slim4/lib/Model/Category.php +++ b/samples/server/petstore/php-slim4/lib/Model/Category.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * Category * @@ -23,12 +25,43 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class Category +class Category implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "required" : [ "name" ], + "type" : "object", + "properties" : { + "id" : { + "type" : "integer", + "format" : "int64" + }, + "name" : { + "type" : "string", + "default" : "default-name" + } + }, + "xml" : { + "name" : "Category" + } +} +SCHEMA; + /** @var int $id */ private $id; - + /** @var string $name */ private $name; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/ClassModel.php b/samples/server/petstore/php-slim4/lib/Model/ClassModel.php index f95868609aff..3b3f5c28d940 100644 --- a/samples/server/petstore/php-slim4/lib/Model/ClassModel.php +++ b/samples/server/petstore/php-slim4/lib/Model/ClassModel.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * ClassModel * @@ -23,9 +25,32 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class ClassModel +class ClassModel implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "_class" : { + "type" : "string" + } + }, + "description" : "Model for testing model with \"_class\" property" +} +SCHEMA; + /** @var string $class */ private $class; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/Client.php b/samples/server/petstore/php-slim4/lib/Model/Client.php index e905a3bb11f4..12aaff03c01b 100644 --- a/samples/server/petstore/php-slim4/lib/Model/Client.php +++ b/samples/server/petstore/php-slim4/lib/Model/Client.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * Client * @@ -23,9 +25,31 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class Client +class Client implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "client" : { + "type" : "string" + } + } +} +SCHEMA; + /** @var string $client */ private $client; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/Dog.php b/samples/server/petstore/php-slim4/lib/Model/Dog.php index c3ac105884ef..c38c1ea4a669 100644 --- a/samples/server/petstore/php-slim4/lib/Model/Dog.php +++ b/samples/server/petstore/php-slim4/lib/Model/Dog.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * Dog * @@ -23,15 +25,36 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class Dog +class Dog implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "allOf" : [ { + "$ref" : "#/components/schemas/Animal" + }, { + "$ref" : "#/components/schemas/Dog_allOf" + } ] +} +SCHEMA; + /** @var string $className */ private $className; - + /** @var string $color */ private $color; - + /** @var string $breed */ private $breed; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/DogAllOf.php b/samples/server/petstore/php-slim4/lib/Model/DogAllOf.php index c219ea94fde3..cf81a5f99b4a 100644 --- a/samples/server/petstore/php-slim4/lib/Model/DogAllOf.php +++ b/samples/server/petstore/php-slim4/lib/Model/DogAllOf.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * DogAllOf * @@ -23,9 +25,30 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class DogAllOf +class DogAllOf implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "properties" : { + "breed" : { + "type" : "string" + } + } +} +SCHEMA; + /** @var string $breed */ private $breed; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/EnumArrays.php b/samples/server/petstore/php-slim4/lib/Model/EnumArrays.php index 16133e7e20e6..aef61078eb5d 100644 --- a/samples/server/petstore/php-slim4/lib/Model/EnumArrays.php +++ b/samples/server/petstore/php-slim4/lib/Model/EnumArrays.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * EnumArrays * @@ -23,12 +25,42 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class EnumArrays +class EnumArrays implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "just_symbol" : { + "type" : "string", + "enum" : [ ">=", "$" ] + }, + "array_enum" : { + "type" : "array", + "items" : { + "type" : "string", + "enum" : [ "fish", "crab" ] + } + } + } +} +SCHEMA; + /** @var string $justSymbol */ private $justSymbol; - + /** @var string[] $arrayEnum */ private $arrayEnum; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/EnumClass.php b/samples/server/petstore/php-slim4/lib/Model/EnumClass.php index 13d72c7a97fb..3ddd829b3137 100644 --- a/samples/server/petstore/php-slim4/lib/Model/EnumClass.php +++ b/samples/server/petstore/php-slim4/lib/Model/EnumClass.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * EnumClass * @@ -23,6 +25,25 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class EnumClass +class EnumClass implements ModelInterface { + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "string", + "default" : "-efg", + "enum" : [ "_abc", "-efg", "(xyz)" ] +} +SCHEMA; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/EnumTest.php b/samples/server/petstore/php-slim4/lib/Model/EnumTest.php index 0f883a670569..e4c4ffc0ee0b 100644 --- a/samples/server/petstore/php-slim4/lib/Model/EnumTest.php +++ b/samples/server/petstore/php-slim4/lib/Model/EnumTest.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * EnumTest * @@ -23,21 +25,62 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class EnumTest +class EnumTest implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "required" : [ "enum_string_required" ], + "type" : "object", + "properties" : { + "enum_string" : { + "type" : "string", + "enum" : [ "UPPER", "lower", "" ] + }, + "enum_string_required" : { + "type" : "string", + "enum" : [ "UPPER", "lower", "" ] + }, + "enum_integer" : { + "type" : "integer", + "format" : "int32", + "enum" : [ 1, -1 ] + }, + "enum_number" : { + "type" : "number", + "format" : "double", + "enum" : [ 1.1, -1.2 ] + }, + "outerEnum" : { + "$ref" : "#/components/schemas/OuterEnum" + } + } +} +SCHEMA; + /** @var string $enumString */ private $enumString; - + /** @var string $enumStringRequired */ private $enumStringRequired; - + /** @var int $enumInteger */ private $enumInteger; - + /** @var double $enumNumber */ private $enumNumber; - + /** @var \OpenAPIServer\Model\OuterEnum $outerEnum */ private $outerEnum; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/File.php b/samples/server/petstore/php-slim4/lib/Model/File.php index 159ef73f38c2..4237e721443f 100644 --- a/samples/server/petstore/php-slim4/lib/Model/File.php +++ b/samples/server/petstore/php-slim4/lib/Model/File.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * File * @@ -23,9 +25,33 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class File +class File implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "sourceURI" : { + "type" : "string", + "description" : "Test capitalization" + } + }, + "description" : "Must be named `File` for test." +} +SCHEMA; + /** @var string $sourceURI Test capitalization*/ private $sourceURI; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/FileSchemaTestClass.php b/samples/server/petstore/php-slim4/lib/Model/FileSchemaTestClass.php index 33e4bfaf3d91..3ebabaa367c0 100644 --- a/samples/server/petstore/php-slim4/lib/Model/FileSchemaTestClass.php +++ b/samples/server/petstore/php-slim4/lib/Model/FileSchemaTestClass.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * FileSchemaTestClass * @@ -23,12 +25,40 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class FileSchemaTestClass +class FileSchemaTestClass implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "file" : { + "$ref" : "#/components/schemas/File" + }, + "files" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/File" + } + } + } +} +SCHEMA; + /** @var \OpenAPIServer\Model\File $file */ private $file; - + /** @var \OpenAPIServer\Model\File[] $files */ private $files; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/FormatTest.php b/samples/server/petstore/php-slim4/lib/Model/FormatTest.php index 5674fc1ad3d7..751f9607e8a6 100644 --- a/samples/server/petstore/php-slim4/lib/Model/FormatTest.php +++ b/samples/server/petstore/php-slim4/lib/Model/FormatTest.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * FormatTest * @@ -23,48 +25,136 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class FormatTest +class FormatTest implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "required" : [ "byte", "date", "number", "password" ], + "type" : "object", + "properties" : { + "integer" : { + "maximum" : 1E+2, + "minimum" : 1E+1, + "type" : "integer" + }, + "int32" : { + "maximum" : 2E+2, + "minimum" : 2E+1, + "type" : "integer", + "format" : "int32" + }, + "int64" : { + "type" : "integer", + "format" : "int64" + }, + "number" : { + "maximum" : 543.2, + "minimum" : 32.1, + "type" : "number" + }, + "float" : { + "maximum" : 987.6, + "minimum" : 54.3, + "type" : "number", + "format" : "float" + }, + "double" : { + "maximum" : 123.4, + "minimum" : 67.8, + "type" : "number", + "format" : "double" + }, + "string" : { + "pattern" : "/[a-z]/i", + "type" : "string" + }, + "byte" : { + "pattern" : "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$", + "type" : "string", + "format" : "byte" + }, + "binary" : { + "type" : "string", + "format" : "binary" + }, + "date" : { + "type" : "string", + "format" : "date" + }, + "dateTime" : { + "type" : "string", + "format" : "date-time" + }, + "uuid" : { + "type" : "string", + "format" : "uuid", + "example" : "72f98069-206d-4f12-9f12-3d1e525a8e84" + }, + "password" : { + "maxLength" : 64, + "minLength" : 10, + "type" : "string", + "format" : "password" + }, + "BigDecimal" : { + "type" : "string", + "format" : "number" + } + } +} +SCHEMA; + /** @var int $integer */ private $integer; - + /** @var int $int32 */ private $int32; - + /** @var int $int64 */ private $int64; - + /** @var float $number */ private $number; - + /** @var float $float */ private $float; - + /** @var double $double */ private $double; - + /** @var string $string */ private $string; - + /** @var string $byte */ private $byte; - + /** @var \SplFileObject $binary */ private $binary; - + /** @var \DateTime $date */ private $date; - + /** @var \DateTime $dateTime */ private $dateTime; - + /** @var string $uuid */ private $uuid; - + /** @var string $password */ private $password; - + /** @var BigDecimal $bigDecimal */ private $bigDecimal; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/HasOnlyReadOnly.php b/samples/server/petstore/php-slim4/lib/Model/HasOnlyReadOnly.php index f71bf33afa75..afeb12af3dd0 100644 --- a/samples/server/petstore/php-slim4/lib/Model/HasOnlyReadOnly.php +++ b/samples/server/petstore/php-slim4/lib/Model/HasOnlyReadOnly.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * HasOnlyReadOnly * @@ -23,12 +25,39 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class HasOnlyReadOnly +class HasOnlyReadOnly implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "bar" : { + "type" : "string", + "readOnly" : true + }, + "foo" : { + "type" : "string", + "readOnly" : true + } + } +} +SCHEMA; + /** @var string $bar */ private $bar; - + /** @var string $foo */ private $foo; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/MapTest.php b/samples/server/petstore/php-slim4/lib/Model/MapTest.php index bb64e6f1b166..2cc9edf70188 100644 --- a/samples/server/petstore/php-slim4/lib/Model/MapTest.php +++ b/samples/server/petstore/php-slim4/lib/Model/MapTest.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * MapTest * @@ -23,18 +25,62 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class MapTest +class MapTest implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "map_map_of_string" : { + "type" : "object", + "additionalProperties" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + } + } + }, + "map_of_enum_string" : { + "type" : "object", + "additionalProperties" : { + "type" : "string", + "enum" : [ "UPPER", "lower" ] + } + }, + "direct_map" : { + "type" : "object", + "additionalProperties" : { + "type" : "boolean" + } + }, + "indirect_map" : { + "$ref" : "#/components/schemas/StringBooleanMap" + } + } +} +SCHEMA; + /** @var map[string,map[string,string]] $mapMapOfString */ private $mapMapOfString; - + /** @var map[string,string] $mapOfEnumString */ private $mapOfEnumString; - + /** @var map[string,bool] $directMap */ private $directMap; - + /** @var map[string,bool] $indirectMap */ private $indirectMap; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/MixedPropertiesAndAdditionalPropertiesClass.php b/samples/server/petstore/php-slim4/lib/Model/MixedPropertiesAndAdditionalPropertiesClass.php index 2a7699b7536c..5d55499c7b0f 100644 --- a/samples/server/petstore/php-slim4/lib/Model/MixedPropertiesAndAdditionalPropertiesClass.php +++ b/samples/server/petstore/php-slim4/lib/Model/MixedPropertiesAndAdditionalPropertiesClass.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * MixedPropertiesAndAdditionalPropertiesClass * @@ -23,15 +25,48 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class MixedPropertiesAndAdditionalPropertiesClass +class MixedPropertiesAndAdditionalPropertiesClass implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "uuid" : { + "type" : "string", + "format" : "uuid" + }, + "dateTime" : { + "type" : "string", + "format" : "date-time" + }, + "map" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/Animal" + } + } + } +} +SCHEMA; + /** @var string $uuid */ private $uuid; - + /** @var \DateTime $dateTime */ private $dateTime; - + /** @var map[string,\OpenAPIServer\Model\Animal] $map */ private $map; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/Model200Response.php b/samples/server/petstore/php-slim4/lib/Model/Model200Response.php index c86898cadf1c..6af1b357c731 100644 --- a/samples/server/petstore/php-slim4/lib/Model/Model200Response.php +++ b/samples/server/petstore/php-slim4/lib/Model/Model200Response.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * Model200Response * @@ -23,12 +25,42 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class Model200Response +class Model200Response implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "name" : { + "type" : "integer", + "format" : "int32" + }, + "class" : { + "type" : "string" + } + }, + "description" : "Model for testing model name starting with number", + "xml" : { + "name" : "Name" + } +} +SCHEMA; + /** @var int $name */ private $name; - + /** @var string $class */ private $class; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/ModelList.php b/samples/server/petstore/php-slim4/lib/Model/ModelList.php index 144a669da9f9..48c984dad6cf 100644 --- a/samples/server/petstore/php-slim4/lib/Model/ModelList.php +++ b/samples/server/petstore/php-slim4/lib/Model/ModelList.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * ModelList * @@ -23,9 +25,31 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class ModelList +class ModelList implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "123-list" : { + "type" : "string" + } + } +} +SCHEMA; + /** @var string $_123list */ private $_123list; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/ModelReturn.php b/samples/server/petstore/php-slim4/lib/Model/ModelReturn.php index e0c32bb78974..b56717e60a81 100644 --- a/samples/server/petstore/php-slim4/lib/Model/ModelReturn.php +++ b/samples/server/petstore/php-slim4/lib/Model/ModelReturn.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * ModelReturn * @@ -23,9 +25,36 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class ModelReturn +class ModelReturn implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "return" : { + "type" : "integer", + "format" : "int32" + } + }, + "description" : "Model for testing reserved words", + "xml" : { + "name" : "Return" + } +} +SCHEMA; + /** @var int $return */ private $return; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/Name.php b/samples/server/petstore/php-slim4/lib/Model/Name.php index 9773c2ad5119..4eca6a4b6b0f 100644 --- a/samples/server/petstore/php-slim4/lib/Model/Name.php +++ b/samples/server/petstore/php-slim4/lib/Model/Name.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * Name * @@ -23,18 +25,58 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class Name +class Name implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "required" : [ "name" ], + "type" : "object", + "properties" : { + "name" : { + "type" : "integer", + "format" : "int32" + }, + "snake_case" : { + "type" : "integer", + "format" : "int32", + "readOnly" : true + }, + "property" : { + "type" : "string" + }, + "123Number" : { + "type" : "integer", + "readOnly" : true + } + }, + "description" : "Model for testing model name same as property name", + "xml" : { + "name" : "Name" + } +} +SCHEMA; + /** @var int $name */ private $name; - + /** @var int $snakeCase */ private $snakeCase; - + /** @var string $property */ private $property; - + /** @var int $_123number */ private $_123number; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/NumberOnly.php b/samples/server/petstore/php-slim4/lib/Model/NumberOnly.php index e95c8453fcbc..89a47886edc4 100644 --- a/samples/server/petstore/php-slim4/lib/Model/NumberOnly.php +++ b/samples/server/petstore/php-slim4/lib/Model/NumberOnly.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * NumberOnly * @@ -23,9 +25,31 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class NumberOnly +class NumberOnly implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "JustNumber" : { + "type" : "number" + } + } +} +SCHEMA; + /** @var float $justNumber */ private $justNumber; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/Order.php b/samples/server/petstore/php-slim4/lib/Model/Order.php index 3c92e287aa8f..e8227de89ada 100644 --- a/samples/server/petstore/php-slim4/lib/Model/Order.php +++ b/samples/server/petstore/php-slim4/lib/Model/Order.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * Order * @@ -23,24 +25,71 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class Order +class Order implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "id" : { + "type" : "integer", + "format" : "int64" + }, + "petId" : { + "type" : "integer", + "format" : "int64" + }, + "quantity" : { + "type" : "integer", + "format" : "int32" + }, + "shipDate" : { + "type" : "string", + "format" : "date-time" + }, + "status" : { + "type" : "string", + "description" : "Order Status", + "enum" : [ "placed", "approved", "delivered" ] + }, + "complete" : { + "type" : "boolean", + "default" : false + } + }, + "xml" : { + "name" : "Order" + } +} +SCHEMA; + /** @var int $id */ private $id; - + /** @var int $petId */ private $petId; - + /** @var int $quantity */ private $quantity; - + /** @var \DateTime $shipDate */ private $shipDate; - + /** @var string $status Order Status*/ private $status; - + /** @var bool $complete */ private $complete; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/OuterComposite.php b/samples/server/petstore/php-slim4/lib/Model/OuterComposite.php index 0661fbf5acf5..277df1f035f3 100644 --- a/samples/server/petstore/php-slim4/lib/Model/OuterComposite.php +++ b/samples/server/petstore/php-slim4/lib/Model/OuterComposite.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * OuterComposite * @@ -23,15 +25,43 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class OuterComposite +class OuterComposite implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "my_number" : { + "$ref" : "#/components/schemas/OuterNumber" + }, + "my_string" : { + "$ref" : "#/components/schemas/OuterString" + }, + "my_boolean" : { + "$ref" : "#/components/schemas/OuterBoolean" + } + } +} +SCHEMA; + /** @var float $myNumber */ private $myNumber; - + /** @var string $myString */ private $myString; - + /** @var bool $myBoolean */ private $myBoolean; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/OuterEnum.php b/samples/server/petstore/php-slim4/lib/Model/OuterEnum.php index 21d740cf91c8..ac9d21d46068 100644 --- a/samples/server/petstore/php-slim4/lib/Model/OuterEnum.php +++ b/samples/server/petstore/php-slim4/lib/Model/OuterEnum.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * OuterEnum * @@ -23,6 +25,24 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class OuterEnum +class OuterEnum implements ModelInterface { + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "string", + "enum" : [ "placed", "approved", "delivered" ] +} +SCHEMA; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/Pet.php b/samples/server/petstore/php-slim4/lib/Model/Pet.php index dc74f59771e0..0815662f358c 100644 --- a/samples/server/petstore/php-slim4/lib/Model/Pet.php +++ b/samples/server/petstore/php-slim4/lib/Model/Pet.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * Pet * @@ -23,24 +25,84 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class Pet +class Pet implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "required" : [ "name", "photoUrls" ], + "type" : "object", + "properties" : { + "id" : { + "type" : "integer", + "format" : "int64", + "x-is-unique" : true + }, + "category" : { + "$ref" : "#/components/schemas/Category" + }, + "name" : { + "type" : "string", + "example" : "doggie" + }, + "photoUrls" : { + "type" : "array", + "xml" : { + "name" : "photoUrl", + "wrapped" : true + }, + "items" : { + "type" : "string" + } + }, + "tags" : { + "type" : "array", + "xml" : { + "name" : "tag", + "wrapped" : true + }, + "items" : { + "$ref" : "#/components/schemas/Tag" + } + }, + "status" : { + "type" : "string", + "description" : "pet status in the store", + "enum" : [ "available", "pending", "sold" ] + } + }, + "xml" : { + "name" : "Pet" + } +} +SCHEMA; + /** @var int $id */ private $id; - + /** @var \OpenAPIServer\Model\Category $category */ private $category; - + /** @var string $name */ private $name; - + /** @var string[] $photoUrls */ private $photoUrls; - + /** @var \OpenAPIServer\Model\Tag[] $tags */ private $tags; - + /** @var string $status pet status in the store*/ private $status; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/ReadOnlyFirst.php b/samples/server/petstore/php-slim4/lib/Model/ReadOnlyFirst.php index 5fb368360f9a..5ab8ee48389c 100644 --- a/samples/server/petstore/php-slim4/lib/Model/ReadOnlyFirst.php +++ b/samples/server/petstore/php-slim4/lib/Model/ReadOnlyFirst.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * ReadOnlyFirst * @@ -23,12 +25,38 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class ReadOnlyFirst +class ReadOnlyFirst implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "bar" : { + "type" : "string", + "readOnly" : true + }, + "baz" : { + "type" : "string" + } + } +} +SCHEMA; + /** @var string $bar */ private $bar; - + /** @var string $baz */ private $baz; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/SpecialModelName.php b/samples/server/petstore/php-slim4/lib/Model/SpecialModelName.php index 6b57beaea050..e22f746884b9 100644 --- a/samples/server/petstore/php-slim4/lib/Model/SpecialModelName.php +++ b/samples/server/petstore/php-slim4/lib/Model/SpecialModelName.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * SpecialModelName * @@ -23,9 +25,35 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class SpecialModelName +class SpecialModelName implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "$special[property.name]" : { + "type" : "integer", + "format" : "int64" + } + }, + "xml" : { + "name" : "$special[model.name]" + } +} +SCHEMA; + /** @var int $specialPropertyName */ private $specialPropertyName; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/Tag.php b/samples/server/petstore/php-slim4/lib/Model/Tag.php index 2757b9ad5270..6a7078552ac3 100644 --- a/samples/server/petstore/php-slim4/lib/Model/Tag.php +++ b/samples/server/petstore/php-slim4/lib/Model/Tag.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * Tag * @@ -23,12 +25,41 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class Tag +class Tag implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "id" : { + "type" : "integer", + "format" : "int64" + }, + "name" : { + "type" : "string" + } + }, + "xml" : { + "name" : "Tag" + } +} +SCHEMA; + /** @var int $id */ private $id; - + /** @var string $name */ private $name; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/TypeHolderDefault.php b/samples/server/petstore/php-slim4/lib/Model/TypeHolderDefault.php index 66331c167e22..2a4e87d43ef0 100644 --- a/samples/server/petstore/php-slim4/lib/Model/TypeHolderDefault.php +++ b/samples/server/petstore/php-slim4/lib/Model/TypeHolderDefault.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * TypeHolderDefault * @@ -23,21 +25,61 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class TypeHolderDefault +class TypeHolderDefault implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "required" : [ "array_item", "bool_item", "integer_item", "number_item", "string_item" ], + "type" : "object", + "properties" : { + "string_item" : { + "type" : "string", + "default" : "what" + }, + "number_item" : { + "type" : "number" + }, + "integer_item" : { + "type" : "integer" + }, + "bool_item" : { + "type" : "boolean", + "default" : true + }, + "array_item" : { + "type" : "array", + "items" : { + "type" : "integer" + } + } + } +} +SCHEMA; + /** @var string $stringItem */ private $stringItem; - + /** @var float $numberItem */ private $numberItem; - + /** @var int $integerItem */ private $integerItem; - + /** @var bool $boolItem */ private $boolItem; - + /** @var int[] $arrayItem */ private $arrayItem; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/TypeHolderExample.php b/samples/server/petstore/php-slim4/lib/Model/TypeHolderExample.php index 42b648585ad7..958e32607570 100644 --- a/samples/server/petstore/php-slim4/lib/Model/TypeHolderExample.php +++ b/samples/server/petstore/php-slim4/lib/Model/TypeHolderExample.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * TypeHolderExample * @@ -23,24 +25,72 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class TypeHolderExample +class TypeHolderExample implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "required" : [ "array_item", "bool_item", "float_item", "integer_item", "number_item", "string_item" ], + "type" : "object", + "properties" : { + "string_item" : { + "type" : "string", + "example" : "what" + }, + "number_item" : { + "type" : "number", + "example" : 1.234 + }, + "float_item" : { + "type" : "number", + "format" : "float", + "example" : 1.234 + }, + "integer_item" : { + "type" : "integer", + "example" : -2 + }, + "bool_item" : { + "type" : "boolean", + "example" : true + }, + "array_item" : { + "type" : "array", + "example" : [ 0, 1, 2, 3 ], + "items" : { + "type" : "integer" + } + } + } +} +SCHEMA; + /** @var string $stringItem */ private $stringItem; - + /** @var float $numberItem */ private $numberItem; - + /** @var float $floatItem */ private $floatItem; - + /** @var int $integerItem */ private $integerItem; - + /** @var bool $boolItem */ private $boolItem; - + /** @var int[] $arrayItem */ private $arrayItem; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/User.php b/samples/server/petstore/php-slim4/lib/Model/User.php index 1810f1c9e1d3..ebd8f17ae35c 100644 --- a/samples/server/petstore/php-slim4/lib/Model/User.php +++ b/samples/server/petstore/php-slim4/lib/Model/User.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * User * @@ -23,30 +25,80 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class User +class User implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "id" : { + "type" : "integer", + "format" : "int64", + "x-is-unique" : true + }, + "username" : { + "type" : "string" + }, + "firstName" : { + "type" : "string" + }, + "lastName" : { + "type" : "string" + }, + "email" : { + "type" : "string" + }, + "password" : { + "type" : "string" + }, + "phone" : { + "type" : "string" + }, + "userStatus" : { + "type" : "integer", + "description" : "User Status", + "format" : "int32" + } + }, + "xml" : { + "name" : "User" + } +} +SCHEMA; + /** @var int $id */ private $id; - + /** @var string $username */ private $username; - + /** @var string $firstName */ private $firstName; - + /** @var string $lastName */ private $lastName; - + /** @var string $email */ private $email; - + /** @var string $password */ private $password; - + /** @var string $phone */ private $phone; - + /** @var int $userStatus User Status*/ private $userStatus; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/lib/Model/XmlItem.php b/samples/server/petstore/php-slim4/lib/Model/XmlItem.php index dd2e4d867f86..a63fc642646a 100644 --- a/samples/server/petstore/php-slim4/lib/Model/XmlItem.php +++ b/samples/server/petstore/php-slim4/lib/Model/XmlItem.php @@ -16,6 +16,8 @@ */ namespace OpenAPIServer\Model; +use OpenAPIServer\Interfaces\ModelInterface; + /** * XmlItem * @@ -23,93 +25,360 @@ namespace OpenAPIServer\Model; * @author OpenAPI Generator team * @link https://github.com/openapitools/openapi-generator */ -class XmlItem +class XmlItem implements ModelInterface { - + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "type" : "object", + "properties" : { + "attribute_string" : { + "type" : "string", + "example" : "string", + "xml" : { + "attribute" : true + } + }, + "attribute_number" : { + "type" : "number", + "example" : 1.234, + "xml" : { + "attribute" : true + } + }, + "attribute_integer" : { + "type" : "integer", + "example" : -2, + "xml" : { + "attribute" : true + } + }, + "attribute_boolean" : { + "type" : "boolean", + "example" : true, + "xml" : { + "attribute" : true + } + }, + "wrapped_array" : { + "type" : "array", + "xml" : { + "wrapped" : true + }, + "items" : { + "type" : "integer" + } + }, + "name_string" : { + "type" : "string", + "example" : "string", + "xml" : { + "name" : "xml_name_string" + } + }, + "name_number" : { + "type" : "number", + "example" : 1.234, + "xml" : { + "name" : "xml_name_number" + } + }, + "name_integer" : { + "type" : "integer", + "example" : -2, + "xml" : { + "name" : "xml_name_integer" + } + }, + "name_boolean" : { + "type" : "boolean", + "example" : true, + "xml" : { + "name" : "xml_name_boolean" + } + }, + "name_array" : { + "type" : "array", + "items" : { + "type" : "integer", + "xml" : { + "name" : "xml_name_array_item" + } + } + }, + "name_wrapped_array" : { + "type" : "array", + "xml" : { + "name" : "xml_name_wrapped_array", + "wrapped" : true + }, + "items" : { + "type" : "integer", + "xml" : { + "name" : "xml_name_wrapped_array_item" + } + } + }, + "prefix_string" : { + "type" : "string", + "example" : "string", + "xml" : { + "prefix" : "ab" + } + }, + "prefix_number" : { + "type" : "number", + "example" : 1.234, + "xml" : { + "prefix" : "cd" + } + }, + "prefix_integer" : { + "type" : "integer", + "example" : -2, + "xml" : { + "prefix" : "ef" + } + }, + "prefix_boolean" : { + "type" : "boolean", + "example" : true, + "xml" : { + "prefix" : "gh" + } + }, + "prefix_array" : { + "type" : "array", + "items" : { + "type" : "integer", + "xml" : { + "prefix" : "ij" + } + } + }, + "prefix_wrapped_array" : { + "type" : "array", + "xml" : { + "prefix" : "kl", + "wrapped" : true + }, + "items" : { + "type" : "integer", + "xml" : { + "prefix" : "mn" + } + } + }, + "namespace_string" : { + "type" : "string", + "example" : "string", + "xml" : { + "namespace" : "http://a.com/schema" + } + }, + "namespace_number" : { + "type" : "number", + "example" : 1.234, + "xml" : { + "namespace" : "http://b.com/schema" + } + }, + "namespace_integer" : { + "type" : "integer", + "example" : -2, + "xml" : { + "namespace" : "http://c.com/schema" + } + }, + "namespace_boolean" : { + "type" : "boolean", + "example" : true, + "xml" : { + "namespace" : "http://d.com/schema" + } + }, + "namespace_array" : { + "type" : "array", + "items" : { + "type" : "integer", + "xml" : { + "namespace" : "http://e.com/schema" + } + } + }, + "namespace_wrapped_array" : { + "type" : "array", + "xml" : { + "namespace" : "http://f.com/schema", + "wrapped" : true + }, + "items" : { + "type" : "integer", + "xml" : { + "namespace" : "http://g.com/schema" + } + } + }, + "prefix_ns_string" : { + "type" : "string", + "example" : "string", + "xml" : { + "namespace" : "http://a.com/schema", + "prefix" : "a" + } + }, + "prefix_ns_number" : { + "type" : "number", + "example" : 1.234, + "xml" : { + "namespace" : "http://b.com/schema", + "prefix" : "b" + } + }, + "prefix_ns_integer" : { + "type" : "integer", + "example" : -2, + "xml" : { + "namespace" : "http://c.com/schema", + "prefix" : "c" + } + }, + "prefix_ns_boolean" : { + "type" : "boolean", + "example" : true, + "xml" : { + "namespace" : "http://d.com/schema", + "prefix" : "d" + } + }, + "prefix_ns_array" : { + "type" : "array", + "items" : { + "type" : "integer", + "xml" : { + "namespace" : "http://e.com/schema", + "prefix" : "e" + } + } + }, + "prefix_ns_wrapped_array" : { + "type" : "array", + "xml" : { + "namespace" : "http://f.com/schema", + "prefix" : "f", + "wrapped" : true + }, + "items" : { + "type" : "integer", + "xml" : { + "namespace" : "http://g.com/schema", + "prefix" : "g" + } + } + } + }, + "xml" : { + "namespace" : "http://a.com/schema", + "prefix" : "pre" + } +} +SCHEMA; + /** @var string $attributeString */ private $attributeString; - + /** @var float $attributeNumber */ private $attributeNumber; - + /** @var int $attributeInteger */ private $attributeInteger; - + /** @var bool $attributeBoolean */ private $attributeBoolean; - + /** @var int[] $wrappedArray */ private $wrappedArray; - + /** @var string $nameString */ private $nameString; - + /** @var float $nameNumber */ private $nameNumber; - + /** @var int $nameInteger */ private $nameInteger; - + /** @var bool $nameBoolean */ private $nameBoolean; - + /** @var int[] $nameArray */ private $nameArray; - + /** @var int[] $nameWrappedArray */ private $nameWrappedArray; - + /** @var string $prefixString */ private $prefixString; - + /** @var float $prefixNumber */ private $prefixNumber; - + /** @var int $prefixInteger */ private $prefixInteger; - + /** @var bool $prefixBoolean */ private $prefixBoolean; - + /** @var int[] $prefixArray */ private $prefixArray; - + /** @var int[] $prefixWrappedArray */ private $prefixWrappedArray; - + /** @var string $namespaceString */ private $namespaceString; - + /** @var float $namespaceNumber */ private $namespaceNumber; - + /** @var int $namespaceInteger */ private $namespaceInteger; - + /** @var bool $namespaceBoolean */ private $namespaceBoolean; - + /** @var int[] $namespaceArray */ private $namespaceArray; - + /** @var int[] $namespaceWrappedArray */ private $namespaceWrappedArray; - + /** @var string $prefixNsString */ private $prefixNsString; - + /** @var float $prefixNsNumber */ private $prefixNsNumber; - + /** @var int $prefixNsInteger */ private $prefixNsInteger; - + /** @var bool $prefixNsBoolean */ private $prefixNsBoolean; - + /** @var int[] $prefixNsArray */ private $prefixNsArray; - + /** @var int[] $prefixNsWrappedArray */ private $prefixNsWrappedArray; + + /** + * Returns model schema. + * + * @param bool $assoc When TRUE, returned objects will be converted into associative arrays. Default FALSE. + * + * @return array + */ + public static function getOpenApiSchema($assoc = false) + { + return json_decode(static::MODEL_SCHEMA, $assoc); + } } diff --git a/samples/server/petstore/php-slim4/test/Mock/OpenApiDataMockerTest.php b/samples/server/petstore/php-slim4/test/Mock/OpenApiDataMockerTest.php index 2b925cddeffc..2ddf0b8a0f57 100644 --- a/samples/server/petstore/php-slim4/test/Mock/OpenApiDataMockerTest.php +++ b/samples/server/petstore/php-slim4/test/Mock/OpenApiDataMockerTest.php @@ -30,6 +30,7 @@ use OpenAPIServer\Mock\OpenApiDataMockerInterface as IMocker; use PHPUnit\Framework\TestCase; use PHPUnit\Framework\Constraint\IsType; use StdClass; +use DateTime; /** * OpenApiDataMockerTest Class Doc Comment @@ -95,6 +96,18 @@ class OpenApiDataMockerTest extends TestCase ]; } + /** + * @covers ::mock + */ + public function testMockWithStringEnumOptions() + { + $mocker = new OpenApiDataMocker(); + $string = $mocker->mock(IMocker::DATA_TYPE_STRING, null, [ + 'enum' => ['foobar', 'foobaz', 'helloworld'], + ]); + $this->assertContains($string, ['foobar', 'foobaz', 'helloworld']); + } + /** * @dataProvider provideMockIntegerCorrectArguments * @covers ::mockInteger @@ -511,7 +524,7 @@ class OpenApiDataMockerTest extends TestCase $subMaxItems = $items->maxItems ?? null; $subUniqueItems = $items->uniqueItems ?? null; } - + foreach ($arr as $item) { switch ($dataType) { @@ -639,6 +652,45 @@ class OpenApiDataMockerTest extends TestCase 'maxItems less than minItems' => [ $intItems, 5, 2, false, ], + 'items with ref to unknown class' => [ + ['$ref' => '#/components/schemas/UnknownClass'], null, null, false, + ], + 'items with ref to class without getOpenApiSchema method' => [ + ['$ref' => '#/components/schemas/ClassWithoutGetSchemaMethod'], null, null, false, + ], + ]; + } + + /** + * @dataProvider provideMockArrayWithRefArguments + * @covers ::mockArray + */ + public function testMockArrayWithRef($items, $expectedStructure) + { + $mocker = new OpenApiDataMocker(); + $arr = $mocker->mockArray($items); + $this->assertIsArray($arr); + $this->assertCount(1, $arr); + foreach ($arr as $item) { + // TODO: replace with assertInstanceOf assertion + $this->assertInternalType(IsType::TYPE_OBJECT, $item); + foreach ($expectedStructure as $expectedProp => $expectedType) { + $this->assertInternalType($expectedType, $item->$expectedProp); + } + } + } + + public function provideMockArrayWithRefArguments() + { + return [ + 'items with ref to CatRefTestClass' => [ + ['$ref' => '#/components/schemas/CatRefTestClass'], + [ + 'className' => IsType::TYPE_STRING, + 'color' => IsType::TYPE_STRING, + 'declawed' => IsType::TYPE_BOOL, + ], + ], ]; } @@ -723,6 +775,9 @@ class OpenApiDataMockerTest extends TestCase 'properties cannot be a string' => [ 'foobar', 0, 10, false, null, ], + 'property value cannot be a string' => [ + ['username' => 'foobar'], 0, 10, false, null, + ], 'minProperties is not integer' => [ [], 3.12, null, false, null, ], @@ -761,4 +816,219 @@ class OpenApiDataMockerTest extends TestCase ], ]; } + + /** + * @covers ::mockObject + */ + public function testMockObjectWithReferencedProps() + { + $mocker = new OpenApiDataMocker(); + $obj = $mocker->mockObject( + (object) [ + 'cat' => [ + '$ref' => '#/components/schemas/CatRefTestClass', + ], + ] + ); + $this->assertInternalType(IsType::TYPE_OBJECT, $obj->cat); + $this->assertInternalType(IsType::TYPE_STRING, $obj->cat->className); + $this->assertInternalType(IsType::TYPE_STRING, $obj->cat->color); + $this->assertInternalType(IsType::TYPE_BOOL, $obj->cat->declawed); + } + + /** + * @dataProvider provideMockFromSchemaCorrectArguments + * @covers ::mockFromSchema + */ + public function testMockFromSchemaWithCorrectArguments($schema, $expectedType) + { + $mocker = new OpenApiDataMocker(); + $data = $mocker->mockFromSchema($schema); + $this->assertInternalType($expectedType, $data); + } + + public function provideMockFromSchemaCorrectArguments() + { + return [ + 'string from object' => [ + (object) ['type' => IMocker::DATA_TYPE_STRING], + IsType::TYPE_STRING, + ], + 'string from array' => [ + ['type' => IMocker::DATA_TYPE_STRING], + IsType::TYPE_STRING, + ], + 'integer from object' => [ + (object) ['type' => IMocker::DATA_TYPE_INTEGER], + IsType::TYPE_INT, + ], + 'integer from array' => [ + ['type' => IMocker::DATA_TYPE_INTEGER], + IsType::TYPE_INT, + ], + 'number from object' => [ + (object) ['type' => IMocker::DATA_TYPE_NUMBER], + IsType::TYPE_FLOAT, + ], + 'number from array' => [ + ['type' => IMocker::DATA_TYPE_NUMBER], + IsType::TYPE_FLOAT, + ], + 'string from object' => [ + (object) ['type' => IMocker::DATA_TYPE_STRING], + IsType::TYPE_STRING, + ], + 'string from array' => [ + ['type' => IMocker::DATA_TYPE_STRING], + IsType::TYPE_STRING, + ], + 'boolean from object' => [ + (object) ['type' => IMocker::DATA_TYPE_BOOLEAN], + IsType::TYPE_BOOL, + ], + 'boolean from array' => [ + ['type' => IMocker::DATA_TYPE_BOOLEAN], + IsType::TYPE_BOOL, + ], + 'array of strings from object' => [ + (object) [ + 'type' => IMocker::DATA_TYPE_ARRAY, + 'items' => ['type' => IMocker::DATA_TYPE_STRING], + ], + IsType::TYPE_ARRAY, + ], + 'array of strings from array' => [ + [ + 'type' => IMocker::DATA_TYPE_ARRAY, + 'items' => ['type' => IMocker::DATA_TYPE_STRING], + ], + IsType::TYPE_ARRAY, + ], + 'object with username prop from object' => [ + (object) [ + 'type' => IMocker::DATA_TYPE_OBJECT, + 'properties' => ['username' => ['type' => IMocker::DATA_TYPE_STRING]], + ], + IsType::TYPE_OBJECT, + ], + 'object with username prop from array' => [ + [ + 'type' => IMocker::DATA_TYPE_OBJECT, + 'properties' => ['username' => ['type' => IMocker::DATA_TYPE_STRING]], + ], + IsType::TYPE_OBJECT, + ], + 'referenced class' => [ + ['$ref' => '#/components/schemas/CatRefTestClass'], + IsType::TYPE_OBJECT, + ], + ]; + } + + /** + * @dataProvider provideMockFromSchemaInvalidArguments + * @expectedException \InvalidArgumentException + * @covers ::mockFromSchema + */ + public function testMockFromSchemaWithInvalidArguments($schema) + { + $mocker = new OpenApiDataMocker(); + $data = $mocker->mockFromSchema($schema); + } + + + public function provideMockFromSchemaInvalidArguments() + { + return [ + 'null' => [null], + 'numeric' => [3.14], + 'empty array' => [[]], + 'empty object' => [(object) []], + 'string' => ['foobar'], + 'DateTime object' => [new DateTime()], + ]; + } + + /** + * @dataProvider provideMockFromRefCorrectArguments + * @covers ::mockFromRef + */ + public function testMockFromRefWithCorrectArguments($ref, $expectedStructure) + { + $mocker = new OpenApiDataMocker(); + $data = $mocker->mockFromRef($ref); + foreach ($expectedStructure as $expectedProp => $expectedType) { + $this->assertInternalType($expectedType, $data->$expectedProp); + } + } + + public function provideMockFromRefCorrectArguments() + { + return [ + 'CatRefTestClass model' => [ + '#/components/schemas/CatRefTestClass', + [ + 'className' => IsType::TYPE_STRING, + 'color' => IsType::TYPE_STRING, + 'declawed' => IsType::TYPE_BOOL, + ] + ], + ]; + } + + /** + * @dataProvider provideMockFromRefInvalidArguments + * @expectedException \InvalidArgumentException + * @covers ::mockFromRef + */ + public function testMockFromRefWithInvalidArguments($ref) + { + $mocker = new OpenApiDataMocker(); + $data = $mocker->mockFromRef($ref); + } + + public function provideMockFromRefInvalidArguments() + { + return [ + 'ref to unknown class' => ['#/components/schemas/UnknownClass'], + 'ref to class without getOpenApiSchema method' => ['#/components/schemas/ClassWithoutGetSchemaMethod'], + ]; + } +} + +namespace OpenAPIServer\Model; + +// phpcs:disable PSR1.Classes.ClassDeclaration.MultipleClasses +final class CatRefTestClass +{ + private const MODEL_SCHEMA = <<<'SCHEMA' +{ + "required" : [ "className" ], + "type" : "object", + "properties" : { + "className" : { + "type" : "string" + }, + "color" : { + "type" : "string", + "default" : "red" + }, + "declawed" : { + "type" : "boolean" + } + }, + "discriminator" : { + "propertyName" : "className" + } +} +SCHEMA; + + public static function getOpenApiSchema() + { + return json_decode(static::MODEL_SCHEMA, true); + } +} + +final class ClassWithoutGetSchemaMethod +{ }