Skip to content

Commit 49603bd

Browse files
authored
Merge pull request #1197 from gooddata/ref-parameter
Do not add default values for parameter references
2 parents 1daf4d9 + 784a549 commit 49603bd

File tree

2 files changed

+164
-1
lines changed

2 files changed

+164
-1
lines changed

springdoc-openapi-common/src/main/java/org/springdoc/api/AbstractOpenApiResource.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,9 @@ protected void calculatePath(RouterOperation routerOperation) {
500500

501501
fillParametersList(operation, queryParams, methodAttributes);
502502
if (!CollectionUtils.isEmpty(operation.getParameters()))
503-
operation.getParameters().forEach(parameter -> {
503+
operation.getParameters().stream()
504+
.filter(parameter -> StringUtils.isEmpty(parameter.get$ref()))
505+
.forEach(parameter -> {
504506
if (parameter.getSchema() == null)
505507
parameter.setSchema(new StringSchema());
506508
if (parameter.getIn() == null)
Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
/*
2+
*
3+
* *
4+
* * * Copyright 2019-2021 the original author or authors.
5+
* * *
6+
* * * Licensed under the Apache License, Version 2.0 (the "License");
7+
* * * you may not use this file except in compliance with the License.
8+
* * * You may obtain a copy of the License at
9+
* * *
10+
* * * https://www.apache.org/licenses/LICENSE-2.0
11+
* * *
12+
* * * Unless required by applicable law or agreed to in writing, software
13+
* * * distributed under the License is distributed on an "AS IS" BASIS,
14+
* * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
* * * See the License for the specific language governing permissions and
16+
* * * limitations under the License.
17+
* *
18+
*
19+
*/
20+
21+
package org.springdoc.api;
22+
23+
import io.swagger.v3.oas.annotations.enums.ParameterIn;
24+
import io.swagger.v3.oas.models.OpenAPI;
25+
import io.swagger.v3.oas.models.Operation;
26+
import io.swagger.v3.oas.models.PathItem;
27+
import io.swagger.v3.oas.models.Paths;
28+
import io.swagger.v3.oas.models.media.NumberSchema;
29+
import io.swagger.v3.oas.models.media.StringSchema;
30+
import io.swagger.v3.oas.models.parameters.Parameter;
31+
import org.junit.jupiter.api.BeforeEach;
32+
import org.junit.jupiter.api.Test;
33+
import org.junit.jupiter.api.extension.ExtendWith;
34+
import org.mockito.Mock;
35+
import org.mockito.junit.jupiter.MockitoExtension;
36+
import org.springdoc.core.AbstractRequestService;
37+
import org.springdoc.core.GenericResponseService;
38+
import org.springdoc.core.OpenAPIService;
39+
import org.springdoc.core.OperationService;
40+
import org.springdoc.core.SpringDocConfigProperties;
41+
import org.springdoc.core.fn.RouterOperation;
42+
import org.springframework.beans.factory.ObjectFactory;
43+
import org.springframework.context.ApplicationContext;
44+
import org.springframework.web.bind.annotation.RequestMethod;
45+
46+
import java.util.List;
47+
import java.util.Map;
48+
import java.util.Optional;
49+
50+
import static java.util.Arrays.asList;
51+
import static org.hamcrest.MatcherAssert.assertThat;
52+
import static org.hamcrest.Matchers.containsInAnyOrder;
53+
import static org.hamcrest.Matchers.is;
54+
import static org.hamcrest.Matchers.nullValue;
55+
import static org.mockito.Mockito.when;
56+
import static org.springframework.web.bind.annotation.RequestMethod.GET;
57+
58+
@ExtendWith(MockitoExtension.class)
59+
class AbstractOpenApiResourceTest {
60+
61+
private static final String GROUP_NAME = "groupName";
62+
private static final String PATH = "/some/path";
63+
public static final String PARAMETER_REFERENCE = "#/components/parameters/MyParameter";
64+
public static final String PARAMETER_WITH_NUMBER_SCHEMA_NAME = "parameterWithNumberSchema";
65+
public static final String PARAMETER_WITHOUT_SCHEMA_NAME = "parameterWithoutSchema";
66+
67+
@Mock
68+
private ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory;
69+
70+
@Mock
71+
private OpenAPIService openAPIService;
72+
73+
@Mock
74+
private AbstractRequestService requestBuilder;
75+
76+
@Mock
77+
private GenericResponseService responseBuilder;
78+
79+
@Mock
80+
private OperationService operationParser;
81+
82+
@Mock
83+
private ApplicationContext context;
84+
85+
private OpenAPI openAPI;
86+
87+
private AbstractOpenApiResource resource;
88+
89+
@BeforeEach
90+
public void setUp() {
91+
openAPI = new OpenAPI();
92+
openAPI.setPaths(new Paths().addPathItem(PATH, new PathItem()));
93+
94+
when(openAPIService.getCalculatedOpenAPI()).thenReturn(openAPI);
95+
when(openAPIService.getContext()).thenReturn(context);
96+
97+
when(openAPIBuilderObjectFactory.getObject()).thenReturn(openAPIService);
98+
99+
resource = new AbstractOpenApiResource(
100+
GROUP_NAME,
101+
openAPIBuilderObjectFactory,
102+
requestBuilder,
103+
responseBuilder,
104+
operationParser,
105+
Optional.empty(),
106+
Optional.empty(),
107+
new SpringDocConfigProperties(),
108+
Optional.empty()
109+
) {
110+
111+
@Override
112+
protected void getPaths(final Map<String, Object> findRestControllers) { }
113+
};
114+
}
115+
116+
@Test
117+
void calculatePathFromRouterOperation() {
118+
final Parameter refParameter = new Parameter().$ref(PARAMETER_REFERENCE);
119+
120+
final Parameter numberParameterInPath = new Parameter()
121+
.name(PARAMETER_WITH_NUMBER_SCHEMA_NAME)
122+
.in(ParameterIn.PATH.toString())
123+
.schema(new NumberSchema());
124+
125+
final Parameter parameterWithoutSchema = new Parameter()
126+
.name(PARAMETER_WITHOUT_SCHEMA_NAME);
127+
128+
final Operation operation = new Operation();
129+
operation.setParameters(asList(
130+
refParameter,
131+
numberParameterInPath,
132+
parameterWithoutSchema
133+
));
134+
135+
final RouterOperation routerOperation = new RouterOperation();
136+
routerOperation.setMethods(new RequestMethod[]{ GET });
137+
routerOperation.setOperationModel(operation);
138+
routerOperation.setPath(PATH);
139+
140+
resource.calculatePath(routerOperation);
141+
142+
final List<Parameter> parameters = resource.getOpenApi().getPaths().get(PATH).getGet().getParameters();
143+
assertThat(parameters.size(), is(3));
144+
assertThat(parameters, containsInAnyOrder(refParameter, numberParameterInPath, parameterWithoutSchema));
145+
146+
assertThat(refParameter.getName(), nullValue());
147+
assertThat(refParameter.get$ref(), is(PARAMETER_REFERENCE));
148+
assertThat(refParameter.getSchema(), nullValue());
149+
assertThat(refParameter.getIn(), nullValue());
150+
151+
assertThat(numberParameterInPath.getName(), is(PARAMETER_WITH_NUMBER_SCHEMA_NAME));
152+
assertThat(numberParameterInPath.get$ref(), nullValue());
153+
assertThat(numberParameterInPath.getSchema(), is(new NumberSchema()));
154+
assertThat(numberParameterInPath.getIn(), is(ParameterIn.PATH.toString()));
155+
156+
assertThat(parameterWithoutSchema.getName(), is(PARAMETER_WITHOUT_SCHEMA_NAME));
157+
assertThat(parameterWithoutSchema.get$ref(), nullValue());
158+
assertThat(parameterWithoutSchema.getSchema(), is(new StringSchema()));
159+
assertThat(parameterWithoutSchema.getIn(), is(ParameterIn.QUERY.toString()));
160+
}
161+
}

0 commit comments

Comments
 (0)