View Javadoc

1   package com.atlassian.plugins.rest.doclet.generators.resourcedoc;
2   
3   import com.atlassian.plugins.rest.doclet.generators.resourcedoc.resource.ExampleResource;
4   import com.atlassian.plugins.rest.doclet.generators.schema.RichClass;
5   import com.atlassian.plugins.rest.doclet.generators.schema.beans.artificial.ArrayBean;
6   import com.atlassian.plugins.rest.doclet.generators.schema.beans.artificial.SimpleBean;
7   import com.atlassian.plugins.rest.doclet.generators.schema.beans.artificial.SimpleListBean;
8   import org.junit.Test;
9   
10  import java.lang.reflect.Method;
11  import java.util.Optional;
12  
13  import static com.atlassian.plugins.rest.doclet.generators.resourcedoc.RestMethod.restMethod;
14  import static org.hamcrest.Matchers.contains;
15  import static org.hamcrest.Matchers.equalTo;
16  import static org.hamcrest.Matchers.hasSize;
17  import static org.junit.Assert.assertThat;
18  
19  public class RestMethodTest {
20      private final Class<?> resourceClass = ExampleResource.class;
21      private final Method createSimple = method("createSimple", String.class, ArrayBean.class);
22      private final Method createSimpleWithAutoRequestType = method("createSimpleWithAutoRequestType", String.class, String.class, SimpleBean.class, String.class);
23      private final Method methodWithActualReturnType = method("methodWithActualReturnType");
24      private final Method methodWithResponseReturnType = method("methodWithResponseReturnType");
25      private final Method voidResponseTypeAnnotated = method("voidResponseTypeAnnotated");
26      private final Method voidActualReturnType = method("voidActualReturnType");
27  
28      @Test
29      public void responseTypeFromAnnotationOverridesActualMethodReturnType() {
30          assertThat(restMethod(resourceClass, createSimple).responseTypesFor(200), contains(RichClass.of(ArrayBean.class)));
31      }
32  
33      @Test
34      public void requestTypeFromAnnotationOverridesActualParameterFromMethodArgument() {
35          assertThat(restMethod(resourceClass, createSimple).getRequestType(), equalTo(Optional.of(RichClass.of(SimpleBean.class))));
36      }
37  
38      @Test
39      public void responseTypeForSuccessCanBeTakenFromReturnType() {
40          assertThat(restMethod(resourceClass, methodWithActualReturnType).responseTypesFor(200), contains(RichClass.of(SimpleBean.class)));
41      }
42  
43      @Test
44      public void responseTypeIsNotTakenFromReturnTypeIsResponse() {
45          assertThat(restMethod(resourceClass, methodWithResponseReturnType).responseTypesFor(200), hasSize(0));
46      }
47  
48      @Test
49      public void requestTypeCanBeTakenFromParameters() {
50          assertThat(restMethod(resourceClass, createSimpleWithAutoRequestType).getRequestType(), equalTo(Optional.of(RichClass.of(SimpleBean.class))));
51      }
52  
53      @Test
54      public void voidResourceDoesNotHaveAnyReturnType() {
55          assertThat(restMethod(resourceClass, voidResponseTypeAnnotated).responseTypesFor(200), hasSize(0));
56          assertThat(restMethod(resourceClass, voidActualReturnType).responseTypesFor(200), hasSize(0));
57      }
58  
59      @Test
60      public void responseTypeForErrorsCanBeAnnotatedOnClass() {
61          assertThat(restMethod(resourceClass, createSimple).responseTypesFor(401), contains(RichClass.of(SimpleListBean.class)));
62      }
63  
64      private Method method(String methodName, Class<?>... parameterTypes) {
65          try {
66              return resourceClass.getDeclaredMethod(methodName, parameterTypes);
67          } catch (NoSuchMethodException e) {
68              throw new RuntimeException(e);
69          }
70      }
71  }