View Javadoc

1   package com.atlassian.plugins.rest.common.security.jersey;
2   
3   import java.lang.annotation.Annotation;
4   import java.util.List;
5   
6   import com.atlassian.plugin.PluginAccessor;
7   import com.atlassian.plugin.event.PluginEventManager;
8   import com.atlassian.plugins.rest.common.security.CorsAllowed;
9   import com.atlassian.plugins.rest.common.security.jersey.test.ResourceClassWithCorsAllowed;
10  import com.atlassian.plugins.rest.common.security.jersey.test.ResourceClassWithoutCorsAllowed;
11  
12  import com.sun.jersey.api.model.AbstractMethod;
13  import com.sun.jersey.api.model.AbstractResource;
14  import com.sun.jersey.spi.container.ResourceFilter;
15  
16  import org.junit.Before;
17  import org.junit.Test;
18  import org.junit.runner.RunWith;
19  import org.mockito.Mock;
20  import org.mockito.runners.MockitoJUnitRunner;
21  
22  import static org.hamcrest.Matchers.empty;
23  import static org.hamcrest.Matchers.instanceOf;
24  import static org.hamcrest.Matchers.is;
25  import static org.junit.Assert.assertThat;
26  import static org.mockito.Mockito.when;
27  
28  @RunWith(MockitoJUnitRunner.class)
29  public class TestCorsResourceFilterFactory {
30      @Mock
31      private PluginEventManager pluginEventManager;
32  
33      @Mock
34      private PluginAccessor pluginAccessor;
35  
36      @Mock
37      private AbstractMethod jerseyMethod;
38  
39      private CorsResourceFilterFactory corsResourceFilterFactory;
40  
41      private static final Annotation[] EMPTY_ANNOTATIONS_ARRAY = new Annotation[0];
42  
43      @Before
44      public void setup() {
45          corsResourceFilterFactory = new CorsResourceFilterFactory(pluginAccessor, pluginEventManager);
46      }
47  
48      @Test
49      public void testThatCorsAllowedIsDetectedOnMethod() {
50          when(jerseyMethod.isAnnotationPresent(CorsAllowed.class)).thenReturn(true);
51          when(jerseyMethod.getAnnotations()).thenReturn(EMPTY_ANNOTATIONS_ARRAY);
52  
53          List<ResourceFilter> resourceFilters = corsResourceFilterFactory.create(jerseyMethod);
54  
55          assertContainsASingleCorsResourceFilter(resourceFilters);
56      }
57  
58      @Test
59      public void testThatCorsAllowedIsDetectedOnJerseyResource() {
60          when(jerseyMethod.getResource()).thenReturn(new AbstractResource(ResourceClassWithCorsAllowed.class));
61          when(jerseyMethod.getAnnotations()).thenReturn(EMPTY_ANNOTATIONS_ARRAY);
62  
63          List<ResourceFilter> resourceFilters = corsResourceFilterFactory.create(jerseyMethod);
64  
65          assertContainsASingleCorsResourceFilter(resourceFilters);
66      }
67  
68      @Test
69      public void testThatCorsAllowedIsDetectedOnResourcePackage() throws ClassNotFoundException {
70          when(jerseyMethod.getResource()).thenReturn(new AbstractResource(ResourceClassWithoutCorsAllowed.class));
71          when(jerseyMethod.getAnnotations()).thenReturn(EMPTY_ANNOTATIONS_ARRAY);
72  
73          List<ResourceFilter> resourceFilters = corsResourceFilterFactory.create(jerseyMethod);
74  
75          assertContainsASingleCorsResourceFilter(resourceFilters);
76      }
77  
78      @Test
79      public void testThatNoCorsAllowedAnnotationsResultsInEmptyFilters() throws ClassNotFoundException {
80          when(jerseyMethod.getResource()).thenReturn(new AbstractResource(this.getClass()));
81  
82          List<ResourceFilter> resourceFilters = corsResourceFilterFactory.create(jerseyMethod);
83          assertThat(resourceFilters, is(empty()));
84      }
85  
86      @Test
87      public void testThatResourceInDefaultPackageIsTolerated() throws ClassNotFoundException {
88          when(jerseyMethod.getResource()).thenReturn(new AbstractResource(Class.forName("ClassInDefaultPackageForTesting")));
89  
90          List<ResourceFilter> resourceFilters = corsResourceFilterFactory.create(jerseyMethod);
91          assertThat(resourceFilters.size(), is(0));
92      }
93  
94      private static void assertContainsASingleCorsResourceFilter(List<ResourceFilter> resourceFilters) {
95          assertThat(resourceFilters.size(), is(1));
96          assertThat(resourceFilters.get(0), is(instanceOf(CorsResourceFilter.class)));
97      }
98  }