Skip to content

Commit d128db5

Browse files
committed
Pin import type to File
1 parent d5d3dfd commit d128db5

5 files changed

Lines changed: 256 additions & 14 deletions

File tree

datamodel/openapi/openapi-generator/src/main/resources/openapi-generator/mustache-templates/libraries/apache-httpclient/api.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ public class {{classname}} extends BaseApi {
146146
@Deprecated
147147
{{/isDeprecated}}
148148
{{#vendorExtensions.x-return-nullable}}@Nullable{{/vendorExtensions.x-return-nullable}}{{^vendorExtensions.x-return-nullable}}@Nonnull{{/vendorExtensions.x-return-nullable}}
149-
public {{#returnType}}{{{returnType}}} {{/returnType}}{{^returnType}}OpenApiResponse {{/returnType}}{{#vendorExtensions.x-sap-cloud-sdk-operation-name}}{{vendorExtensions.x-sap-cloud-sdk-operation-name}}{{/vendorExtensions.x-sap-cloud-sdk-operation-name}}{{^vendorExtensions.x-sap-cloud-sdk-operation-name}}{{operationId}}{{/vendorExtensions.x-sap-cloud-sdk-operation-name}}({{#allParams}}{{>nullable_var_annotations}} final {{{dataType}}} {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}) throws OpenApiRequestException {
149+
public {{#returnType}}{{{returnType}}} {{/returnType}}{{^returnType}}OpenApiResponse {{/returnType}}{{#vendorExtensions.x-sap-cloud-sdk-operation-name}}{{vendorExtensions.x-sap-cloud-sdk-operation-name}}{{/vendorExtensions.x-sap-cloud-sdk-operation-name}}{{^vendorExtensions.x-sap-cloud-sdk-operation-name}}{{operationId}}{{/vendorExtensions.x-sap-cloud-sdk-operation-name}}({{#allParams}}{{>nullable_var_annotations}} final {{#isFile}}File{{/isFile}}{{^isFile}}{{{dataType}}}{{/isFile}} {{paramName}} {{^-last}}, {{/-last}}{{/allParams}}) throws OpenApiRequestException {
150150
{{>operationBody}}
151151
}
152152
{{/hasOptionalParams}}
@@ -185,7 +185,7 @@ public class {{classname}} extends BaseApi {
185185
@Deprecated
186186
{{/isDeprecated}}
187187
{{#vendorExtensions.x-return-nullable}}@Nullable{{/vendorExtensions.x-return-nullable}}{{^vendorExtensions.x-return-nullable}}@Nonnull{{/vendorExtensions.x-return-nullable}}
188-
public {{#returnType}}{{{returnType}}} {{/returnType}}{{^returnType}}OpenApiResponse {{/returnType}}{{#vendorExtensions.x-sap-cloud-sdk-operation-name}}{{vendorExtensions.x-sap-cloud-sdk-operation-name}}{{/vendorExtensions.x-sap-cloud-sdk-operation-name}}{{^vendorExtensions.x-sap-cloud-sdk-operation-name}}{{operationId}}{{/vendorExtensions.x-sap-cloud-sdk-operation-name}}({{#requiredParams}}{{>nullable_var_annotations}} final {{{dataType}}} {{paramName}}{{^-last}}, {{/-last}}{{/requiredParams}}) throws OpenApiRequestException {
188+
public {{#returnType}}{{{returnType}}} {{/returnType}}{{^returnType}}OpenApiResponse {{/returnType}}{{#vendorExtensions.x-sap-cloud-sdk-operation-name}}{{vendorExtensions.x-sap-cloud-sdk-operation-name}}{{/vendorExtensions.x-sap-cloud-sdk-operation-name}}{{^vendorExtensions.x-sap-cloud-sdk-operation-name}}{{operationId}}{{/vendorExtensions.x-sap-cloud-sdk-operation-name}}({{#requiredParams}}{{>nullable_var_annotations}} final {{#isFile}}File{{/isFile}}{{^isFile}}{{{dataType}}}{{/isFile}} {{paramName}}{{^-last}}, {{/-last}}{{/requiredParams}}) throws OpenApiRequestException {
189189
{{#hasOptionalParams}}
190190
return {{#vendorExtensions.x-sap-cloud-sdk-operation-name}}{{vendorExtensions.x-sap-cloud-sdk-operation-name}}{{/vendorExtensions.x-sap-cloud-sdk-operation-name}}{{^vendorExtensions.x-sap-cloud-sdk-operation-name}}{{operationId}}{{/vendorExtensions.x-sap-cloud-sdk-operation-name}}({{#hasRequiredParams}}{{#requiredParams}}{{paramName}}{{^-last}}, {{/-last}}{{/requiredParams}}, {{/hasRequiredParams}}{{#optionalParams}}null{{^-last}}, {{/-last}}{{/optionalParams}});
191191
{{/hasOptionalParams}}

datamodel/openapi/openapi-generator/src/test/java/com/sap/cloud/sdk/datamodel/openapi/generator/DataModelGeneratorApacheIntegrationTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ void integrationTests( final TestCase testCase, @TempDir final Path path )
5757
.withSapCopyrightHeader(true)
5858
.oneOfAnyOfGenerationEnabled(testCase.anyOfOneOfGenerationEnabled)
5959
.additionalProperty("useAbstractionForFiles", "true")
60-
.additionalProperty("library", LIBRARY);
60+
.additionalProperty("library", LIBRARY)
61+
.typeMappings(testCase.typeMappings);
6162

6263
testCase.additionalProperties.forEach(generationConfiguration::additionalProperty);
6364

@@ -103,7 +104,8 @@ void generateDataModelForComparison( final TestCase testCase )
103104
.withSapCopyrightHeader(true)
104105
.oneOfAnyOfGenerationEnabled(testCase.anyOfOneOfGenerationEnabled)
105106
.additionalProperty("useAbstractionForFiles", "true")
106-
.additionalProperty("library", LIBRARY);
107+
.additionalProperty("library", LIBRARY)
108+
.typeMappings(testCase.typeMappings);
107109
testCase.additionalProperties.forEach(generationConfiguration::additionalProperty);
108110

109111
GenerationConfiguration build = generationConfiguration.build();

datamodel/openapi/openapi-generator/src/test/java/com/sap/cloud/sdk/datamodel/openapi/generator/DataModelGeneratorIntegrationTest.java

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ enum TestCase
3636
true,
3737
true,
3838
6,
39-
Map.of("aiSdkConstructor", "true", "fixRedundantIsBooleanPrefix", "true", "useFloatArrays", "true")),
39+
Map.of("aiSdkConstructor", "true", "fixRedundantIsBooleanPrefix", "true", "useFloatArrays", "true"),
40+
Map.of()),
4041
API_CLASS_VENDOR_EXTENSION_YAML(
4142
"api-class-vendor-extension-yaml",
4243
"sodastore.yaml",
@@ -46,6 +47,7 @@ enum TestCase
4647
false,
4748
true,
4849
4,
50+
Map.of(),
4951
Map.of()),
5052
API_CLASS_VENDOR_EXTENSION_JSON(
5153
"api-class-vendor-extension-json",
@@ -56,6 +58,7 @@ enum TestCase
5658
false,
5759
true,
5860
6,
61+
Map.of(),
5962
Map.of()),
6063
INLINEOBJECT_SCHEMA_NAME(
6164
"inlineobject-schemas-enabled",
@@ -66,7 +69,8 @@ enum TestCase
6669
true,
6770
true,
6871
5,
69-
Map.of("fixResponseSchemaTitles", "true")),
72+
Map.of("fixResponseSchemaTitles", "true"),
73+
Map.of()),
7074
PARTIAL_GENERATION(
7175
"partial-generation",
7276
"sodastore.json",
@@ -80,7 +84,8 @@ enum TestCase
8084
.ofEntries(
8185
entry("excludePaths", "/sodas,/foobar/{baz}"),
8286
entry("excludeProperties", "Foo.bar,Soda.embedding,Soda.flavor,UpdateSoda.flavor,SodaWithFoo.foo"),
83-
entry("removeUnusedComponents", "true"))),
87+
entry("removeUnusedComponents", "true")),
88+
Map.of()),
8489
INPUT_SPEC_WITH_UPPERCASE_FILE_EXTENSION(
8590
"input-spec-with-uppercase-file-extension",
8691
"sodastore.JSON",
@@ -90,6 +95,7 @@ enum TestCase
9095
false,
9196
true,
9297
6,
98+
Map.of(),
9399
Map.of()),
94100
ONE_OF_INTERFACES_DISABLED(
95101
"oneof-interfaces-disabled",
@@ -100,6 +106,7 @@ enum TestCase
100106
false,
101107
true,
102108
9,
109+
Map.of(),
103110
Map.of()),
104111
ONE_OF_INTERFACES_ENABLED(
105112
"oneof-interfaces-enabled",
@@ -110,7 +117,8 @@ enum TestCase
110117
true,
111118
true,
112119
11,
113-
Map.of("useOneOfInterfaces", "true", "useOneOfCreators", "true", "useFloatArrays", "true")),
120+
Map.of("useOneOfInterfaces", "true", "useOneOfCreators", "true", "useFloatArrays", "true"),
121+
Map.of()),
114122
INPUT_SPEC_WITH_BUILDER(
115123
"input-spec-with-builder",
116124
"sodastore.JSON",
@@ -127,7 +135,8 @@ enum TestCase
127135
"pojoBuildMethodName",
128136
"build",
129137
"pojoConstructorVisibility",
130-
"private")),
138+
"private"),
139+
Map.of()),
131140
REMOVE_OPERATION_ID_PREFIX(
132141
"remove-operation-id-prefix",
133142
"sodastore.json",
@@ -144,7 +153,8 @@ enum TestCase
144153
"removeOperationIdPrefixDelimiter",
145154
"\\.",
146155
"removeOperationIdPrefixCount",
147-
"3")),
156+
"3"),
157+
Map.of()),
148158
GENERATE_APIS(
149159
"generate-apis",
150160
"sodastore.yaml",
@@ -154,7 +164,19 @@ enum TestCase
154164
true,
155165
false,
156166
7,
157-
Map.of());
167+
Map.of(),
168+
Map.of()),
169+
FILE_HANDLING(
170+
"file-handling",
171+
"file-handling.yaml",
172+
"com.sap.cloud.sdk.services.filehandling.api",
173+
"com.sap.cloud.sdk.services.filehandling.model",
174+
ApiMaturity.RELEASED,
175+
false,
176+
true,
177+
1,
178+
Map.of(),
179+
Map.of("File", "byte[]"));
158180

159181
final String testCaseName;
160182
final String inputSpecFileName;
@@ -165,10 +187,11 @@ enum TestCase
165187
final boolean generateApis;
166188
final int expectedNumberOfGeneratedFiles;
167189
final Map<String, String> additionalProperties;
190+
final Map<String, String> typeMappings;
168191
}
169192

170193
@ParameterizedTest
171-
@EnumSource( TestCase.class )
194+
@EnumSource( value = TestCase.class, mode = EnumSource.Mode.EXCLUDE, names = { "FILE_HANDLING" } )
172195
void integrationTests( final TestCase testCase, @TempDir final Path path )
173196
throws Throwable
174197
{
@@ -194,7 +217,8 @@ void integrationTests( final TestCase testCase, @TempDir final Path path )
194217
.outputDirectory(tempOutputDirectory.toAbsolutePath().toString())
195218
.withSapCopyrightHeader(true)
196219
.oneOfAnyOfGenerationEnabled(testCase.anyOfOneOfGenerationEnabled)
197-
.additionalProperty("useAbstractionForFiles", "true");
220+
.additionalProperty("useAbstractionForFiles", "true")
221+
.typeMappings(testCase.typeMappings);
198222
testCase.additionalProperties.forEach(generationConfiguration::additionalProperty);
199223

200224
final Try<GenerationResult> maybeGenerationResult =
@@ -229,7 +253,8 @@ void generateDataModelForComparison( final TestCase testCase )
229253
.deleteOutputDirectory(true)
230254
.withSapCopyrightHeader(true)
231255
.oneOfAnyOfGenerationEnabled(testCase.anyOfOneOfGenerationEnabled)
232-
.additionalProperty("useAbstractionForFiles", "true");
256+
.additionalProperty("useAbstractionForFiles", "true")
257+
.typeMappings(testCase.typeMappings);
233258
testCase.additionalProperties.forEach(generationConfiguration::additionalProperty);
234259

235260
GenerationConfiguration build = generationConfiguration.build();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
openapi: 3.0.0
2+
info:
3+
title: Soda Store API
4+
version: 1.0.0
5+
description: API for managing sodas in a soda store
6+
7+
paths:
8+
/files/import:
9+
post:
10+
operationId: importFile
11+
tags:
12+
- Files
13+
summary: Upload a file
14+
requestBody:
15+
content:
16+
multipart/form-data:
17+
schema:
18+
type: object
19+
required:
20+
- file
21+
properties:
22+
file:
23+
type: string
24+
format: binary
25+
responses:
26+
'200':
27+
description: File imported successfully
28+
/files/export:
29+
get:
30+
operationId: exportFile
31+
tags:
32+
- Files
33+
summary: Download a file
34+
responses:
35+
'200':
36+
description: File content as binary
37+
content:
38+
application/octet-stream:
39+
schema:
40+
type: string
41+
format: binary

0 commit comments

Comments
 (0)