Skip to content

Commit 2f73582

Browse files
authored
fix(core): single value enums (const) are not generated correctly in 3.1 specs (#19696)
* fix(core): single value enums (`const`) are not generated correctly in `3.1` specs * fix: const enums * chore: update samples * chore: update samples
1 parent 899ddec commit 2f73582

31 files changed

Lines changed: 1396 additions & 0 deletions
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
generatorName: typescript
2+
outputDir: samples/client/others/typescript/builds/enum-single-value
3+
inputSpec: modules/openapi-generator/src/test/resources/3_1/enum-single-value.yaml
4+
templateDir: modules/openapi-generator/src/main/resources/typescript

modules/openapi-generator/src/main/java/org/openapitools/codegen/OpenAPINormalizer.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1281,6 +1281,12 @@ private Schema processNormalize31Spec(Schema schema, Set<Schema> visitedSchemas)
12811281
schema.getTypes().remove("null");
12821282
}
12831283

1284+
// process const
1285+
if (schema.getConst() != null) {
1286+
schema.setEnum(Arrays.asList(schema.getConst()));
1287+
schema.setConst(null);
1288+
}
1289+
12841290
// only one item (type) left
12851291
if (schema.getTypes().size() == 1) {
12861292
String type = String.valueOf(schema.getTypes().iterator().next());

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -758,4 +758,29 @@ public void testOpenAPINormalizerSimplifyOneOfAnyOf31Spec() {
758758
assertEquals(schema18.getOneOf(), null);
759759
assertEquals(schema18.get$ref(), "#/components/schemas/Parent");
760760
}
761+
762+
@Test
763+
public void testOpenAPINormalizerSingleConstEnum31Spec() {
764+
OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_1/enum-single-value.yaml");
765+
766+
Schema reference_3_0 = openAPI.getComponents().getSchemas().get("SingleValueEnum_3_0");
767+
assertEquals(((Schema) reference_3_0.getProperties().get("type")).getEnum().size(), 1);
768+
769+
Schema schema = openAPI.getComponents().getSchemas().get("SingleValueEnum_3_1");
770+
Schema originalTypeSchema = (Schema) schema.getProperties().get("type");
771+
assertFalse(ModelUtils.isEnumSchema(originalTypeSchema));
772+
var originalConst = originalTypeSchema.getConst();
773+
assertNotNull(originalConst);
774+
775+
Map<String, String> inputRules = Map.of("NORMALIZE_31SPEC", "true");
776+
OpenAPINormalizer openAPINormalizer = new OpenAPINormalizer(openAPI, inputRules);
777+
openAPINormalizer.normalize();
778+
779+
Schema schema2 = openAPI.getComponents().getSchemas().get("SingleValueEnum_3_1");
780+
Schema normalizedTypeSchema = (Schema) schema2.getProperties().get("type");
781+
assertTrue(ModelUtils.isEnumSchema(normalizedTypeSchema));
782+
assertNull(normalizedTypeSchema.getConst());
783+
assertEquals(normalizedTypeSchema.getEnum().size(), 1);
784+
assertEquals(Arrays.asList(originalConst), normalizedTypeSchema.getEnum());
785+
}
761786
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
openapi: 3.1.0
2+
info:
3+
title: ""
4+
version: 1.0.0
5+
components:
6+
schemas:
7+
SingleValueEnum_3_1:
8+
required:
9+
- type
10+
properties:
11+
type:
12+
const: this-is-my-only-value
13+
type: string
14+
SingleValueEnum_3_0:
15+
required:
16+
- type
17+
properties:
18+
type:
19+
enum:
20+
- this-is-my-only-value

samples/client/others/typescript/builds/enum-single-value/.gitattributes

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

samples/client/others/typescript/builds/enum-single-value/.gitignore

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

samples/client/others/typescript/builds/enum-single-value/.openapi-generator-ignore

Lines changed: 23 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

samples/client/others/typescript/builds/enum-single-value/.openapi-generator/FILES

Lines changed: 24 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

samples/client/others/typescript/builds/enum-single-value/.openapi-generator/VERSION

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

samples/client/others/typescript/builds/enum-single-value/README.md

Lines changed: 80 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)