1 package com.atlassian.plugins.rest.common.sal.websudo;
2
3 import static org.junit.Assert.assertNotNull;
4 import static org.junit.Assert.fail;
5 import static org.mockito.Mockito.when;
6 import static org.mockito.MockitoAnnotations.initMocks;
7
8 import com.atlassian.plugins.rest.common.sal.websudo.nopackageprotection.ClassNoAnnotation;
9 import com.atlassian.plugins.rest.common.sal.websudo.nopackageprotection.ClassProtectedByClassAnnotation;
10 import com.atlassian.plugins.rest.common.sal.websudo.nopackageprotection.MethodProtectedByMethodAnnotation;
11 import com.atlassian.plugins.rest.common.sal.websudo.packageannotationnotrequired.MethodOverridesPackage;
12 import com.atlassian.plugins.rest.common.sal.websudo.packageannotationrequired.ClassProtectedByPackageAnnotation;
13 import com.atlassian.plugins.rest.common.sal.websudo.packageannotationrequired.ClassWebSudoNotRequiredAnnotation;
14 import com.atlassian.plugins.rest.common.sal.websudo.packageannotationrequired.MethodWebSudoNotRequiredAnnotation;
15 import com.sun.jersey.api.model.AbstractMethod;
16 import com.sun.jersey.api.model.AbstractResource;
17 import com.sun.jersey.api.model.AbstractResourceMethod;
18 import com.sun.jersey.api.model.PathValue;
19 import com.sun.jersey.spi.container.ContainerRequest;
20 import org.junit.After;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.mockito.Mock;
24
25 import java.lang.annotation.Annotation;
26
27
28
29
30
31
32
33
34
35
36
37 public final class TestWebSudoResourceFilter {
38 private static final String METHOD_ONE = "aMethod";
39 private static final String METHOD_TWO = "bMethod";
40
41 private WebSudoResourceFilter webSudoResourceFilter;
42
43 @Mock
44 private WebSudoResourceContext webSudoResourceContext;
45
46 @Mock
47 private ContainerRequest containerRequest;
48
49 @Before
50 public void setUp() {
51 initMocks(this);
52
53 when(webSudoResourceContext.shouldEnforceWebSudoProtection()).thenReturn(true);
54 }
55
56 @After
57 public void teardown() {
58 webSudoResourceFilter = null;
59 webSudoResourceContext = null;
60 containerRequest = null;
61 }
62
63 @Test
64 public void filterPassesWithWebSudoProtectionOn() {
65 setupResourceFilter(ClassProtectedByPackageAnnotation.class, METHOD_ONE);
66 when(webSudoResourceContext.shouldEnforceWebSudoProtection()).thenReturn(false);
67 assertNotNull(webSudoResourceFilter.filter(containerRequest));
68 }
69
70 @Test
71 public void filterPassesWithWebSudoProtectionOnNoAnnotations() {
72 setupResourceFilter(ClassNoAnnotation.class, METHOD_ONE);
73 when(webSudoResourceContext.shouldEnforceWebSudoProtection()).thenReturn(false);
74 assertNotNull(webSudoResourceFilter.filter(containerRequest));
75 }
76
77 @Test
78 public void filterPasses() {
79 setupResourceFilter(MethodProtectedByMethodAnnotation.class, METHOD_ONE);
80 webSudoResourceFilter.filter(containerRequest);
81 }
82
83 @Test
84 public void filterPassesWithWebSudoNotRequiredClassAnnotation() {
85 setupResourceFilter(ClassWebSudoNotRequiredAnnotation.class, METHOD_ONE);
86 webSudoResourceFilter.filter(containerRequest);
87 }
88
89 @Test
90 public void filterPassesWithWebSudoNotRequiredMethodAnnotation() {
91 setupResourceFilter(MethodWebSudoNotRequiredAnnotation.class, METHOD_ONE);
92 webSudoResourceFilter.filter(containerRequest);
93 }
94
95 @Test(expected = WebSudoRequiredException.class)
96 public void filterRejectedWithPackageAnnotation() {
97 setupResourceFilter(ClassProtectedByPackageAnnotation.class, METHOD_ONE);
98 webSudoResourceFilter.filter(containerRequest);
99 }
100
101 @Test(expected = WebSudoRequiredException.class)
102 public void filterRejectedWithClassAnnotation() {
103 setupResourceFilter(ClassProtectedByClassAnnotation.class, METHOD_ONE);
104 assertNotNull(webSudoResourceFilter.filter(containerRequest));
105 }
106
107 @Test(expected = WebSudoRequiredException.class)
108 public void filterRejectedWithMethodAnnotation() {
109 setupResourceFilter(MethodProtectedByMethodAnnotation.class, METHOD_TWO);
110 webSudoResourceFilter.filter(containerRequest);
111 }
112
113 @Test(expected = WebSudoRequiredException.class)
114 public void filterRejectedMethodAnnotationOverridesClassAnnotation() {
115 setupResourceFilter(ClassWebSudoNotRequiredAnnotation.class, METHOD_TWO);
116 webSudoResourceFilter.filter(containerRequest);
117 }
118
119 @Test(expected = WebSudoRequiredException.class)
120 public void filterRejectedMethodAnnotationOverridesPackageAnnotation() {
121 setupResourceFilter(MethodOverridesPackage.class, METHOD_ONE);
122 webSudoResourceFilter.filter(containerRequest);
123 }
124
125 private void setupResourceFilter(final Class clazz, final String methodName, final Annotation... annotations) {
126 try {
127 AbstractMethod m = new AbstractResourceMethod(new AbstractResource(clazz, new PathValue("/")),
128 clazz.getMethod(methodName), clazz, clazz, "test", annotations);
129 webSudoResourceFilter = new WebSudoResourceFilter(m, webSudoResourceContext);
130 } catch (NoSuchMethodException nsme) {
131 fail("Test setup failed due to " + nsme.getMessage());
132 }
133 }
134 }