Skip to content

Commit 1b9c6a0

Browse files
committed
Added a failing test for bidirectional recursive types
1 parent 4213149 commit 1b9c6a0

File tree

4 files changed

+92
-3
lines changed

4 files changed

+92
-3
lines changed

springfox-spring-web/src/test/groovy/springfox/documentation/spring/web/readers/ApiModelReaderSpec.groovy

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,21 @@ import org.springframework.http.HttpEntity
2424
import org.springframework.http.ResponseEntity
2525
import org.springframework.web.method.HandlerMethod
2626
import spock.lang.Ignore
27-
import springfox.documentation.spring.web.dummy.DummyModels
28-
import springfox.documentation.spring.web.mixins.ServicePluginsSupport
29-
import springfox.documentation.spring.web.scanners.ApiModelReader
3027
import springfox.documentation.schema.Model
3128
import springfox.documentation.schema.ModelProperty
3229
import springfox.documentation.spi.service.contexts.RequestMappingContext
30+
import springfox.documentation.spring.web.dummy.DummyModels
3331
import springfox.documentation.spring.web.dummy.controllers.BusinessService
3432
import springfox.documentation.spring.web.dummy.controllers.PetService
3533
import springfox.documentation.spring.web.dummy.models.FoobarDto
34+
import springfox.documentation.spring.web.dummy.models.Monkey
35+
import springfox.documentation.spring.web.dummy.models.Pirate
3636
import springfox.documentation.spring.web.mixins.ModelProviderForServiceSupport
3737
import springfox.documentation.spring.web.mixins.RequestMappingSupport
38+
import springfox.documentation.spring.web.mixins.ServicePluginsSupport
3839
import springfox.documentation.spring.web.plugins.DocumentationContextSpec
3940
import springfox.documentation.spring.web.plugins.DocumentationPluginsManager
41+
import springfox.documentation.spring.web.scanners.ApiModelReader
4042

4143
import javax.servlet.http.HttpServletResponse
4244

@@ -246,4 +248,24 @@ class ApiModelReaderSpec extends DocumentationContextSpec {
246248
modelProperties.containsKey('visibleForSerialize')
247249

248250
}
251+
def "Test to verify issue #1196"() {
252+
given:
253+
HandlerMethod handlerMethod = dummyHandlerMethod('methodToTestBidrectionalRecursiveTypes', Pirate)
254+
RequestMappingContext context = new RequestMappingContext(context(), requestMappingInfo('/somePath'), handlerMethod)
255+
256+
when:
257+
def models = sut.read(context)
258+
Model pirate = models[Pirate.simpleName]
259+
Model monkey = models[Monkey.simpleName]
260+
261+
then:
262+
models.size() == 2
263+
and:
264+
pirate != null
265+
monkey != null
266+
and:
267+
pirate.getProperties().containsKey('monkey')
268+
monkey.getProperties().containsKey('pirate')
269+
270+
}
249271
}

springfox-spring-web/src/test/java/springfox/documentation/spring/web/dummy/DummyClass.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import springfox.documentation.spring.web.dummy.models.EnumType;
4646
import springfox.documentation.spring.web.dummy.models.Example;
4747
import springfox.documentation.spring.web.dummy.models.FoobarDto;
48+
import springfox.documentation.spring.web.dummy.models.Pirate;
4849
import springfox.documentation.spring.web.dummy.models.Treeish;
4950

5051
import javax.servlet.ServletRequest;
@@ -352,6 +353,10 @@ public FoobarDto methodToTestFoobarDto(@RequestBody FoobarDto model) {
352353
return null;
353354
}
354355

356+
@ResponseBody
357+
public void methodToTestBidrectionalRecursiveTypes(@RequestBody Pirate model) {
358+
}
359+
355360
public enum BusinessType {
356361
PRODUCT(1),
357362
SERVICE(2);
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
*
3+
* Copyright 2016 the original author or authors.
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*
17+
*
18+
*/
19+
package springfox.documentation.spring.web.dummy.models;
20+
21+
public class Monkey {
22+
private Pirate pirate;
23+
24+
public Pirate getPirate() {
25+
return pirate;
26+
}
27+
28+
public void setPirate(Pirate pirate) {
29+
this.pirate = pirate;
30+
}
31+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
*
3+
* Copyright 2016 the original author or authors.
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*
17+
*
18+
*/
19+
package springfox.documentation.spring.web.dummy.models;
20+
21+
public class Pirate {
22+
private Monkey monkey;
23+
24+
public Monkey getMonkey() {
25+
return monkey;
26+
}
27+
28+
public void setMonkey(Monkey monkey) {
29+
this.monkey = monkey;
30+
}
31+
}

0 commit comments

Comments
 (0)