Skip to content

Commit f360c69

Browse files
author
Slawomir Messner
committed
check required collections are not null
1 parent 638af0f commit f360c69

2 files changed

Lines changed: 155 additions & 48 deletions

File tree

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

Lines changed: 79 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,53 @@
1717

1818
package org.openapitools.codegen.java.spring;
1919

20+
import com.google.common.collect.ImmutableMap;
21+
import io.swagger.parser.OpenAPIParser;
22+
import io.swagger.v3.oas.models.OpenAPI;
23+
import io.swagger.v3.oas.models.Operation;
24+
import io.swagger.v3.oas.models.info.Info;
25+
import io.swagger.v3.oas.models.media.Schema;
26+
import io.swagger.v3.oas.models.servers.Server;
27+
import io.swagger.v3.parser.core.models.ParseOptions;
28+
import org.apache.commons.lang3.StringUtils;
29+
import org.assertj.core.api.MapAssert;
30+
import org.openapitools.codegen.CliOption;
31+
import org.openapitools.codegen.ClientOptInput;
32+
import org.openapitools.codegen.CodegenConstants;
33+
import org.openapitools.codegen.CodegenModel;
34+
import org.openapitools.codegen.CodegenOperation;
35+
import org.openapitools.codegen.CodegenParameter;
36+
import org.openapitools.codegen.CodegenProperty;
37+
import org.openapitools.codegen.DefaultGenerator;
38+
import org.openapitools.codegen.SupportingFile;
39+
import org.openapitools.codegen.TestUtils;
40+
import org.openapitools.codegen.config.CodegenConfigurator;
41+
import org.openapitools.codegen.config.GlobalSettings;
42+
import org.openapitools.codegen.java.assertions.JavaFileAssert;
43+
import org.openapitools.codegen.languages.AbstractJavaCodegen;
44+
import org.openapitools.codegen.languages.JavaClientCodegen;
45+
import org.openapitools.codegen.languages.SpringCodegen;
46+
import org.openapitools.codegen.languages.features.BeanValidationFeatures;
47+
import org.openapitools.codegen.languages.features.CXFServerFeatures;
48+
import org.openapitools.codegen.languages.features.DocumentationProviderFeatures;
49+
import org.testng.Assert;
50+
import org.testng.annotations.DataProvider;
51+
import org.testng.annotations.Ignore;
52+
import org.testng.annotations.Test;
53+
54+
import java.io.File;
55+
import java.io.IOException;
56+
import java.math.BigDecimal;
57+
import java.nio.file.Files;
58+
import java.nio.file.Path;
59+
import java.nio.file.Paths;
60+
import java.util.HashMap;
61+
import java.util.List;
62+
import java.util.Map;
63+
import java.util.function.Consumer;
64+
import java.util.function.Function;
65+
import java.util.stream.Collectors;
66+
2067
import static java.util.stream.Collectors.groupingBy;
2168
import static org.assertj.core.api.Assertions.assertThat;
2269
import static org.openapitools.codegen.TestUtils.assertFileContains;
@@ -47,54 +94,6 @@
4794
import static org.testng.Assert.assertEquals;
4895
import static org.testng.Assert.fail;
4996

50-
import java.io.File;
51-
import java.io.IOException;
52-
import java.math.BigDecimal;
53-
import java.nio.file.Files;
54-
import java.nio.file.Path;
55-
import java.nio.file.Paths;
56-
import java.util.HashMap;
57-
import java.util.List;
58-
import java.util.Map;
59-
import java.util.function.Consumer;
60-
import java.util.function.Function;
61-
import java.util.stream.Collectors;
62-
import org.apache.commons.lang3.StringUtils;
63-
import org.assertj.core.api.MapAssert;
64-
import org.openapitools.codegen.CliOption;
65-
import org.openapitools.codegen.ClientOptInput;
66-
import org.openapitools.codegen.CodegenConstants;
67-
import org.openapitools.codegen.CodegenModel;
68-
import org.openapitools.codegen.CodegenOperation;
69-
import org.openapitools.codegen.CodegenParameter;
70-
import org.openapitools.codegen.CodegenProperty;
71-
import org.openapitools.codegen.DefaultGenerator;
72-
import org.openapitools.codegen.SupportingFile;
73-
import org.openapitools.codegen.TestUtils;
74-
import org.openapitools.codegen.config.CodegenConfigurator;
75-
import org.openapitools.codegen.config.GlobalSettings;
76-
import org.openapitools.codegen.java.assertions.JavaFileAssert;
77-
import org.openapitools.codegen.languages.AbstractJavaCodegen;
78-
import org.openapitools.codegen.languages.JavaClientCodegen;
79-
import org.openapitools.codegen.languages.SpringCodegen;
80-
import org.openapitools.codegen.languages.features.BeanValidationFeatures;
81-
import org.openapitools.codegen.languages.features.CXFServerFeatures;
82-
import org.openapitools.codegen.languages.features.DocumentationProviderFeatures;
83-
import org.testng.Assert;
84-
import org.testng.annotations.DataProvider;
85-
import org.testng.annotations.Ignore;
86-
import org.testng.annotations.Test;
87-
88-
import com.google.common.collect.ImmutableMap;
89-
90-
import io.swagger.parser.OpenAPIParser;
91-
import io.swagger.v3.oas.models.OpenAPI;
92-
import io.swagger.v3.oas.models.Operation;
93-
import io.swagger.v3.oas.models.info.Info;
94-
import io.swagger.v3.oas.models.media.Schema;
95-
import io.swagger.v3.oas.models.servers.Server;
96-
import io.swagger.v3.parser.core.models.ParseOptions;
97-
9897
public class SpringCodegenTest {
9998

10099
@Test
@@ -4821,6 +4820,38 @@ public void testCollectionTypesWithDefaults_issue_18102() throws IOException {
48214820
.fileDoesNotContains("private Set<String> stringSet = new LinkedHashSet<>()");
48224821
}
48234822

4823+
@Test
4824+
public void testCollectionTypesWithDefaults_issue_collection() throws IOException {
4825+
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
4826+
output.deleteOnExit();
4827+
4828+
OpenAPI openAPI = new OpenAPIParser()
4829+
.readLocation("src/test/resources/3_0/java/issue_collection.yaml", null, new ParseOptions()).getOpenAPI();
4830+
SpringCodegen codegen = new SpringCodegen();
4831+
codegen.setLibrary(SPRING_CLOUD_LIBRARY);
4832+
codegen.setOutputDir(output.getAbsolutePath());
4833+
codegen.additionalProperties().put(CodegenConstants.MODEL_PACKAGE, "xyz.model");
4834+
codegen.additionalProperties().put(CodegenConstants.API_NAME_SUFFIX, "Controller");
4835+
codegen.additionalProperties().put(CodegenConstants.API_PACKAGE, "xyz.controller");
4836+
codegen.additionalProperties().put(CodegenConstants.MODEL_NAME_SUFFIX, "Dto");
4837+
codegen.setContainerDefaultToNull(false);
4838+
4839+
4840+
ClientOptInput input = new ClientOptInput()
4841+
.openAPI(openAPI)
4842+
.config(codegen);
4843+
4844+
DefaultGenerator generator = new DefaultGenerator();
4845+
Map<String, File> files = generator.opts(input).generate().stream()
4846+
.collect(Collectors.toMap(File::getName, Function.identity()));
4847+
4848+
JavaFileAssert.assertThat(files.get("PetDto.java"))
4849+
.fileContains("private List<@Valid TagDto> tags;")
4850+
.fileContains("private List<@Valid TagDto> tagsRequiredList = new ArrayList<>();")
4851+
.fileContains("private List<String> stringList;")
4852+
.fileContains("private List<String> stringRequiredList = new ArrayList<>();");
4853+
}
4854+
48244855
@Test
48254856
public void shouldGenerateOptionalParameterTypesWhenUsingOptionalAndDelegate_issue17768() throws IOException {
48264857
Map<String, Object> additionalProperties = new HashMap<>();
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
openapi: 3.0.0
2+
servers:
3+
- url: 'http://petstore.swagger.io/v2'
4+
info:
5+
description: >-
6+
This is a sample server Petstore server. For this sample, you can use the api key
7+
`special-key` to test the authorization filters.
8+
version: 1.0.0
9+
title: OpenAPI Petstore
10+
license:
11+
name: Apache-2.0
12+
url: 'https://www.apache.org/licenses/LICENSE-2.0.html'
13+
paths:
14+
'/pet/{petId}':
15+
get:
16+
tags:
17+
- pet
18+
summary: Find pet by ID
19+
description: Returns a single pet
20+
operationId: getPetById
21+
parameters:
22+
- name: petId
23+
in: path
24+
description: ID of pet to return
25+
required: true
26+
schema:
27+
type: integer
28+
format: int64
29+
responses:
30+
'200':
31+
description: successful operation
32+
content:
33+
application/json:
34+
schema:
35+
$ref: '#/components/schemas/Pet'
36+
'400':
37+
description: Invalid ID supplied
38+
'404':
39+
description: Pet not found
40+
components:
41+
schemas:
42+
Tag:
43+
title: Pet Tag
44+
description: A tag for a pet
45+
type: object
46+
properties:
47+
id:
48+
type: integer
49+
format: int64
50+
name:
51+
type: string
52+
Pet:
53+
title: a Pet
54+
description: A pet for sale in the pet store
55+
type: object
56+
required:
57+
- tagsRequiredList
58+
- stringRequiredList
59+
properties:
60+
tags:
61+
type: array
62+
items:
63+
$ref: '#/components/schemas/Tag'
64+
tagsRequiredList:
65+
type: array
66+
items:
67+
$ref: '#/components/schemas/Tag'
68+
stringList:
69+
type: array
70+
items:
71+
type: string
72+
stringRequiredList:
73+
type: array
74+
items:
75+
type: string
76+

0 commit comments

Comments
 (0)