View Javadoc

1   package com.atlassian.plugins.rest.module.scope;
2   
3   
4   import com.atlassian.plugin.PluginAccessor;
5   import com.atlassian.plugin.event.PluginEventManager;
6   import com.atlassian.plugin.module.ModuleFactory;
7   import com.atlassian.plugin.osgi.factory.OsgiPlugin;
8   import com.atlassian.plugin.scope.ScopeManager;
9   import com.atlassian.plugins.rest.module.RestModuleDescriptor;
10  import com.atlassian.plugins.rest.module.servlet.RestServletModuleManager;
11  import com.google.common.collect.ImmutableList;
12  import com.google.common.collect.ImmutableSet;
13  import com.sun.jersey.api.core.DefaultResourceConfig;
14  import com.sun.jersey.api.model.AbstractMethod;
15  import com.sun.jersey.api.model.AbstractResource;
16  import com.sun.jersey.api.model.AbstractResourceMethod;
17  import com.sun.jersey.api.model.PathValue;
18  import com.sun.jersey.spi.container.ResourceFilter;
19  import org.dom4j.Element;
20  import org.hamcrest.CoreMatchers;
21  import org.junit.Before;
22  import org.junit.Test;
23  import org.junit.runner.RunWith;
24  import org.mockito.Mock;
25  import org.mockito.runners.MockitoJUnitRunner;
26  
27  import javax.ws.rs.HttpMethod;
28  import java.lang.annotation.Annotation;
29  import java.lang.reflect.Method;
30  import java.util.List;
31  
32  import static org.junit.Assert.assertThat;
33  import static org.junit.Assert.assertTrue;
34  import static org.mockito.Mockito.when;
35  
36  @RunWith(MockitoJUnitRunner.class)
37  public class ScopeResourceFilterFactoryTest {
38  
39      @Mock
40      PluginAccessor pluginAccessor;
41  
42      @Mock
43      PluginEventManager pluginEventManager;
44  
45      @Mock
46      ScopeManager scopeManager;
47  
48      @Mock
49      ModuleFactory moduleFactory;
50  
51      @Mock
52      RestServletModuleManager restServletModuleManager;
53  
54      @Mock
55      OsgiPlugin plugin;
56  
57      @Mock
58      Element element;
59  
60      static class MappedClass {
61          public void get() {
62          }
63  
64          static Method getMethod() {
65              try {
66                  return MappedClass.class.getMethod("get");
67              } catch (NoSuchMethodException e) {
68                  throw new RuntimeException(e);
69              }
70          }
71      }
72  
73      static class UnmappedClass {
74      }
75  
76  
77      final AbstractMethod httpMethod = new AbstractResourceMethod(
78              new AbstractResource(MappedClass.class, new PathValue("/")),
79              MappedClass.getMethod(),
80              Void.class,
81              Void.class,
82              HttpMethod.GET,
83              new Annotation[]{});
84  
85      @Before
86      public void setUp() {
87          when(element.attributeValue("path")).thenReturn("/rest");
88          when(element.attributeValue("version")).thenReturn("1.0");
89          when(element.elements("package")).thenReturn(ImmutableList.of());
90      }
91  
92      @Test
93      public void verifyEmptyFilterIfRestApiNotInitialized() throws Exception {
94          final RestModuleDescriptor descriptor = new RestModuleDescriptor(moduleFactory, restServletModuleManager, "/rest");
95          descriptor.init(plugin, element);
96  
97          when(pluginAccessor.getEnabledModuleDescriptorsByClass(RestModuleDescriptor.class)).thenReturn(ImmutableList.of(descriptor));
98  
99          final ScopeResourceFilterFactory factory = new ScopeResourceFilterFactory(pluginAccessor, pluginEventManager, scopeManager);
100 
101         final List<ResourceFilter> filters = factory.create(httpMethod);
102 
103         assertTrue(filters.isEmpty());
104     }
105 
106     @Test
107     public void verifyEmptyFilterIfNoClassMatch() throws Exception {
108         final RestModuleDescriptor descriptor = new RestModuleDescriptor(moduleFactory, restServletModuleManager, "/rest");
109         when(pluginAccessor.getEnabledModuleDescriptorsByClass(RestModuleDescriptor.class)).thenReturn(ImmutableList.of(descriptor));
110         descriptor.init(plugin, element);
111 
112         final DefaultResourceConfig config = new DefaultResourceConfig(ImmutableSet.of(UnmappedClass.class));
113 
114         descriptor.getRestApiContext().setConfig(config);
115 
116         final ScopeResourceFilterFactory factory = new ScopeResourceFilterFactory(pluginAccessor, pluginEventManager, scopeManager);
117 
118         final List<ResourceFilter> filters = factory.create(httpMethod);
119 
120         assertTrue(filters.isEmpty());
121     }
122 
123     @Test
124     public void verifyNonEmptyFilterIfRestApiInitializedAndClassMatch() throws Exception {
125         final RestModuleDescriptor descriptor = new RestModuleDescriptor(moduleFactory, restServletModuleManager, "/rest");
126         when(pluginAccessor.getEnabledModuleDescriptorsByClass(RestModuleDescriptor.class)).thenReturn(ImmutableList.of(descriptor));
127         descriptor.init(plugin, element);
128 
129         final DefaultResourceConfig config = new DefaultResourceConfig(ImmutableSet.of(MappedClass.class));
130 
131         descriptor.getRestApiContext().setConfig(config);
132 
133         final ScopeResourceFilterFactory factory = new ScopeResourceFilterFactory(pluginAccessor, pluginEventManager, scopeManager);
134 
135         final List<ResourceFilter> filters = factory.create(httpMethod);
136 
137         assertThat(filters, CoreMatchers.hasItems(CoreMatchers.instanceOf(ScopeResourceFilter.class)));
138     }
139 }