Skip to content

Commit 36a5d31

Browse files
committed
Merge pull request #1303 from lugaru1234/issue1266
Fixes #1266: SwaggerJersey2JaxrsTest has been migrated
2 parents 236254c + 53437ce commit 36a5d31

File tree

9 files changed

+185
-114
lines changed

9 files changed

+185
-114
lines changed
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
package io.swagger;
2+
3+
import static org.testng.Assert.assertEquals;
4+
import static org.testng.Assert.assertNotNull;
5+
import static org.testng.Assert.assertTrue;
6+
import static org.testng.Assert.fail;
7+
8+
import io.swagger.jaxrs.Reader;
9+
import io.swagger.jaxrs.ext.SwaggerExtensions;
10+
import io.swagger.jersey.SwaggerJersey2Jaxrs;
11+
import io.swagger.models.Swagger;
12+
import io.swagger.models.parameters.FormParameter;
13+
import io.swagger.models.parameters.HeaderParameter;
14+
import io.swagger.models.parameters.Parameter;
15+
import io.swagger.models.TestEnum;
16+
import io.swagger.params.BaseBean;
17+
import io.swagger.params.ChildBean;
18+
import io.swagger.params.EnumBean;
19+
import io.swagger.params.RefBean;
20+
import io.swagger.resources.ResourceWithKnownInjections;
21+
22+
import com.google.common.base.Functions;
23+
import com.google.common.collect.Collections2;
24+
import com.google.common.collect.Sets;
25+
26+
import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
27+
import org.glassfish.jersey.media.multipart.FormDataParam;
28+
import org.testng.annotations.Test;
29+
import org.testng.internal.collections.Pair;
30+
31+
import java.io.InputStream;
32+
import java.lang.annotation.Annotation;
33+
import java.lang.reflect.Method;
34+
import java.lang.reflect.Type;
35+
import java.util.ArrayList;
36+
import java.util.Arrays;
37+
import java.util.HashSet;
38+
import java.util.Iterator;
39+
import java.util.List;
40+
import java.util.Set;
41+
42+
import javax.ws.rs.BeanParam;
43+
44+
public class SwaggerJersey2JaxrsTest {
45+
46+
// Here so that we can get the params with the @BeanParam annotation instantiated properly
47+
void testRoute(@BeanParam BaseBean baseBean, @BeanParam ChildBean childBean, @BeanParam RefBean refBean,
48+
@BeanParam EnumBean enumBean, Integer nonBean) {
49+
}
50+
51+
void testFormDataParamRoute(@FormDataParam("file") InputStream uploadedInputStream,
52+
@FormDataParam("file") FormDataContentDisposition fileDetail) {
53+
}
54+
55+
@Test(description = "not skip all types passed to extension")
56+
public void testAllTypes() {
57+
for (Class cls : Arrays.asList(BaseBean.class, ChildBean.class, RefBean.class)) {
58+
Set<Type> typesToSkip = new java.util.HashSet<Type>();
59+
new SwaggerJersey2Jaxrs().extractParameters(new ArrayList<Annotation>(), cls, typesToSkip, SwaggerExtensions.chain());
60+
assertEquals(typesToSkip.size(), 0);
61+
}
62+
}
63+
64+
@Test(description = "return the proper @BeanParam Parameters based on the call to extractParameters")
65+
public void returnProperBeanParam() throws NoSuchMethodException {
66+
final Method method = getClass().getDeclaredMethod("testRoute", BaseBean.class, ChildBean.class, RefBean.class, EnumBean.class, Integer.class);
67+
final List<Pair<Type, Annotation[]>> parameters = getParameters(method.getGenericParameterTypes(), method.getParameterAnnotations());
68+
69+
for (Pair<Type, Annotation[]> parameter : parameters) {
70+
Type parameterType = parameter.first();
71+
List<Parameter> swaggerParams = new SwaggerJersey2Jaxrs().extractParameters(Arrays.asList(parameter.second()),
72+
parameterType, new HashSet<Type>(), SwaggerExtensions.chain());
73+
// Ensure proper number of parameters returned
74+
if (parameterType.equals(BaseBean.class)) {
75+
assertEquals(swaggerParams.size(), 2);
76+
} else if (parameterType.equals(ChildBean.class)) {
77+
assertEquals(swaggerParams.size(), 5);
78+
} else if (parameterType.equals(RefBean.class)) {
79+
assertEquals(swaggerParams.size(), 5);
80+
} else if (parameterType.equals(EnumBean.class)) {
81+
assertEquals(swaggerParams.size(), 1);
82+
HeaderParameter enumParam = (HeaderParameter) swaggerParams.get(0);
83+
assertEquals(enumParam.getType(), "string");
84+
final Set<String> enumValues = Sets.newHashSet(Collections2.transform(Arrays.asList(TestEnum.values()), Functions.toStringFunction()));
85+
assertEquals(enumParam.getEnum(), enumValues);
86+
} else if (parameterType.equals(Integer.class)) {
87+
assertEquals(swaggerParams.size(), 0);
88+
} else {
89+
fail(String.format("Parameter of type %s was not expected", parameterType));
90+
}
91+
92+
// Ensure the proper parameter type and name is returned (The rest is handled by pre-existing logic)
93+
for (Parameter param : swaggerParams) {
94+
assertEquals(param.getName(), param.getClass().getSimpleName().replace("eter", ""));
95+
}
96+
}
97+
}
98+
99+
@Test(description = "return the proper @FormDataParam Parameters based on the call to extractParameters")
100+
public void returnProperFormDataParam() throws NoSuchMethodException {
101+
final Method method = getClass().getDeclaredMethod("testFormDataParamRoute", InputStream.class, FormDataContentDisposition.class);
102+
final List<Pair<Type, Annotation[]>> parameters = getParameters(method.getGenericParameterTypes(), method.getParameterAnnotations());
103+
104+
for (Pair<Type, Annotation[]> parameter : parameters) {
105+
Type parameterType = parameter.first();
106+
List<Parameter> swaggerParams = new SwaggerJersey2Jaxrs().extractParameters(Arrays.asList(parameter.second()),
107+
parameterType, new HashSet<Type>(), SwaggerExtensions.chain());
108+
if (parameterType.equals(InputStream.class)) {
109+
assertEquals(((FormParameter) swaggerParams.get(0)).getType(), "file");
110+
} else {
111+
assertEquals(swaggerParams.size(), 0);
112+
}
113+
}
114+
}
115+
116+
private List<Pair<Type, Annotation[]>> getParameters(Type[] type, Annotation[][] annotations) {
117+
final Iterator<Type> typeIterator = Arrays.asList(type).iterator();
118+
final Iterator<Annotation[]> paramIterator = Arrays.asList(annotations).iterator();
119+
final List<Pair<Type, Annotation[]>> result = new ArrayList<Pair<Type, Annotation[]>>();
120+
while (paramIterator.hasNext() && typeIterator.hasNext()) {
121+
Pair<Type, Annotation[]> pair = new Pair<Type, Annotation[]>(typeIterator.next(), paramIterator.next());
122+
result.add(pair);
123+
}
124+
return result;
125+
}
126+
127+
@Test(description = "scan class level and field level annotations")
128+
public void scanClassAnfFieldLevelAnnotations(){
129+
final Swagger swagger = new Reader(new Swagger()).read(ResourceWithKnownInjections.class);
130+
final List<Parameter> resourceParameters = swagger.getPaths().get("/resource/{id}").getGet().getParameters();
131+
assertNotNull(resourceParameters);
132+
assertEquals(resourceParameters.size(), 4);
133+
assertEquals(getName(resourceParameters, 0), "fieldParam");
134+
assertEquals(getName(resourceParameters, 1), "skip");
135+
assertEquals(getName(resourceParameters, 2), "limit");
136+
assertEquals(getName(resourceParameters, 3), "methodParam");
137+
}
138+
139+
private String getName(List<Parameter> resourceParameters, int i){
140+
return resourceParameters.get(i).getName();
141+
}
142+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package io.swagger.models;
2+
3+
import io.swagger.annotations.ApiParam;
4+
5+
import javax.ws.rs.QueryParam;
6+
7+
public class Pagination {
8+
@QueryParam("skip")
9+
@ApiParam("number of records to skip")
10+
protected Integer skip;
11+
12+
@QueryParam("limit")
13+
@ApiParam("maximum number of records to return")
14+
protected Integer limit;
15+
16+
public Integer getSkip() {
17+
return skip;
18+
}
19+
20+
public void setSkip(Integer skip) {
21+
this.skip = skip;
22+
}
23+
24+
public Integer getLimit() {
25+
return limit;
26+
}
27+
28+
public void setLimit(Integer limit) {
29+
this.limit = limit;
30+
}
31+
}

modules/swagger-jersey2-jaxrs/src/test/scala/models/TestEnum.java renamed to modules/swagger-jersey2-jaxrs/src/test/java/io/swagger/models/TestEnum.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package models;
1+
package io.swagger.models;
22

33
public enum TestEnum {
44
ONE, TWO, THREE;

modules/swagger-jersey2-jaxrs/src/test/scala/params/BaseBean.java renamed to modules/swagger-jersey2-jaxrs/src/test/java/io/swagger/params/BaseBean.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package params;
1+
package io.swagger.params;
22

33
import javax.ws.rs.CookieParam;
44
import javax.ws.rs.FormParam;

modules/swagger-jersey2-jaxrs/src/test/scala/params/ChildBean.java renamed to modules/swagger-jersey2-jaxrs/src/test/java/io/swagger/params/ChildBean.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
package params;
1+
package io.swagger.params;
2+
3+
import io.swagger.params.BaseBean;
24

35
import javax.ws.rs.HeaderParam;
46
import javax.ws.rs.PathParam;

modules/swagger-jersey2-jaxrs/src/test/scala/params/EnumBean.java renamed to modules/swagger-jersey2-jaxrs/src/test/java/io/swagger/params/EnumBean.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package params;
1+
package io.swagger.params;
22

3-
import models.TestEnum;
3+
import io.swagger.models.TestEnum;
44

55
import javax.ws.rs.HeaderParam;
66

modules/swagger-jersey2-jaxrs/src/test/scala/params/RefBean.java renamed to modules/swagger-jersey2-jaxrs/src/test/java/io/swagger/params/RefBean.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
package params;
1+
package io.swagger.params;
22

33
import io.swagger.annotations.ApiModelProperty;
4+
import io.swagger.params.BaseBean;
5+
import io.swagger.params.ChildBean;
46

57
import javax.ws.rs.BeanParam;
68
import javax.ws.rs.HeaderParam;

modules/swagger-jersey2-jaxrs/src/test/scala/resources/ResourceWithKnownInjections.java renamed to modules/swagger-jersey2-jaxrs/src/test/java/io/swagger/resources/ResourceWithKnownInjections.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package resources;
1+
package io.swagger.resources;
22

33
import io.swagger.annotations.Api;
4-
import models.Pagination;
4+
import io.swagger.models.Pagination;
55

66
import javax.inject.Inject;
77
import javax.ws.rs.BeanParam;

modules/swagger-jersey2-jaxrs/src/test/scala/SwaggerJersey2JaxrsTest.scala

Lines changed: 0 additions & 106 deletions
This file was deleted.

0 commit comments

Comments
 (0)