Skip to content

Commit 3f42e23

Browse files
committed
Merge branch 'master' of https://github.com/lukascernydis/openapi-generator into lukascernydis-master
2 parents db59785 + 99783e5 commit 3f42e23

File tree

11 files changed

+1070
-1
lines changed

11 files changed

+1070
-1
lines changed

modules/openapi-generator/src/main/resources/php-nextgen/ObjectSerializer.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,7 @@ class ObjectSerializer
499499
// If a discriminator is defined and points to a valid subclass, use it.
500500
$discriminator = $class::DISCRIMINATOR;
501501
if (!empty($discriminator) && isset($data->{$discriminator}) && is_string($data->{$discriminator})) {
502-
$subclass = '\{{invokerPackage}}\Model\\' . $data->{$discriminator};
502+
$subclass = '\{{modelPackage}}\\' . $data->{$discriminator};
503503
if (is_subclass_of($subclass, $class)) {
504504
$class = $subclass;
505505
}

modules/openapi-generator/src/test/java/org/openapitools/codegen/php/PhpNextgenClientCodegenTest.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,45 @@ public void testEnumUnknownDefaultCaseDeserializationEnabled() throws Exception
120120
Assert.assertListNotContains(modelContent, a -> a.equals("\"Invalid value '%s' for 'color', must be one of '%s'\","), "");
121121
}
122122

123+
@Test
124+
public void testDiscriminatorUsesModelPackageNamespace() throws Exception {
125+
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
126+
output.deleteOnExit();
127+
128+
OpenAPI openAPI = new OpenAPIParser()
129+
.readLocation("src/test/resources/3_0/php-nextgen/petstore-with-fake-endpoints-models-for-testing.yaml", null, new ParseOptions()).getOpenAPI();
130+
131+
codegen.setOutputDir(output.getAbsolutePath());
132+
// Set invokerPackage="MyApp" and modelPackage="Entities" (relative suffix).
133+
// AbstractPhpCodegen.processOpts() will produce final modelPackage = "MyApp\Entities".
134+
// The old bug would have emitted '\MyApp\Model\' (invokerPackage + \Model\).
135+
codegen.additionalProperties().put(CodegenConstants.INVOKER_PACKAGE, "MyApp");
136+
codegen.additionalProperties().put(CodegenConstants.MODEL_PACKAGE, "Entities");
137+
138+
ClientOptInput input = new ClientOptInput()
139+
.openAPI(openAPI)
140+
.config(codegen);
141+
142+
DefaultGenerator generator = new DefaultGenerator();
143+
Map<String, File> files = generator.opts(input).generate().stream()
144+
.collect(Collectors.toMap(File::getName, Function.identity()));
145+
146+
List<String> objectSerializerContent = Files
147+
.readAllLines(files.get("ObjectSerializer.php").toPath())
148+
.stream()
149+
.map(String::trim)
150+
.collect(Collectors.toList());
151+
152+
// The discriminator subclass lookup must use modelPackage (\MyApp\Entities\),
153+
// NOT invokerPackage + '\Model' (\MyApp\Model\).
154+
Assert.assertListContains(objectSerializerContent,
155+
a -> a.contains("'\\MyApp\\Entities\\\\'"),
156+
"ObjectSerializer discriminator subclass lookup must use modelPackage namespace");
157+
Assert.assertListNotContains(objectSerializerContent,
158+
a -> a.contains("'\\MyApp\\Model\\\\'"),
159+
"ObjectSerializer discriminator must NOT use invokerPackage\\Model namespace");
160+
}
161+
123162
@Test
124163
public void testEnumUnknownDefaultCaseDeserializationDisabled() throws Exception {
125164
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();

modules/openapi-generator/src/test/resources/3_0/php-nextgen/petstore-with-fake-endpoints-models-for-testing.yaml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2291,3 +2291,22 @@ components:
22912291
description: "Optional array of multiple errors encountered during processing"
22922292
required:
22932293
- error
2294+
2295+
DiscriminatorBase:
2296+
type: object
2297+
discriminator:
2298+
propertyName: type
2299+
required:
2300+
- type
2301+
properties:
2302+
type:
2303+
type: string
2304+
2305+
DiscriminatorChild:
2306+
allOf:
2307+
- $ref: '#/components/schemas/DiscriminatorBase'
2308+
- type: object
2309+
properties:
2310+
childProperty:
2311+
type: string
2312+

samples/client/petstore/php-nextgen/OpenAPIClient-php/.openapi-generator/FILES

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ docs/Model/ChildWithNullable.md
2525
docs/Model/ClassModel.md
2626
docs/Model/Client.md
2727
docs/Model/DeprecatedObject.md
28+
docs/Model/DiscriminatorBase.md
29+
docs/Model/DiscriminatorChild.md
2830
docs/Model/Dog.md
2931
docs/Model/EnumArrays.md
3032
docs/Model/EnumClass.md
@@ -91,6 +93,8 @@ src/Model/ChildWithNullable.php
9193
src/Model/ClassModel.php
9294
src/Model/Client.php
9395
src/Model/DeprecatedObject.php
96+
src/Model/DiscriminatorBase.php
97+
src/Model/DiscriminatorChild.php
9498
src/Model/Dog.php
9599
src/Model/EnumArrays.php
96100
src/Model/EnumClass.php

samples/client/petstore/php-nextgen/OpenAPIClient-php/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,8 @@ Class | Method | HTTP request | Description
142142
- [ClassModel](docs/Model/ClassModel.md)
143143
- [Client](docs/Model/Client.md)
144144
- [DeprecatedObject](docs/Model/DeprecatedObject.md)
145+
- [DiscriminatorBase](docs/Model/DiscriminatorBase.md)
146+
- [DiscriminatorChild](docs/Model/DiscriminatorChild.md)
145147
- [Dog](docs/Model/Dog.md)
146148
- [EnumArrays](docs/Model/EnumArrays.md)
147149
- [EnumClass](docs/Model/EnumClass.md)
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# # DiscriminatorBase
2+
3+
## Properties
4+
5+
Name | Type | Description | Notes
6+
------------ | ------------- | ------------- | -------------
7+
**type** | **string** | |
8+
9+
[[Back to Model list]](../../README.md#models) [[Back to API list]](../../README.md#endpoints) [[Back to README]](../../README.md)
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# # DiscriminatorChild
2+
3+
## Properties
4+
5+
Name | Type | Description | Notes
6+
------------ | ------------- | ------------- | -------------
7+
**child_property** | **string** | | [optional]
8+
9+
[[Back to Model list]](../../README.md#models) [[Back to API list]](../../README.md#endpoints) [[Back to README]](../../README.md)

0 commit comments

Comments
 (0)