View Javadoc

1   package com.atlassian.asap.core.server.filter;
2   
3   import com.atlassian.asap.api.server.http.RequestAuthenticator;
4   import com.atlassian.asap.core.server.AuthenticationContext;
5   import com.atlassian.asap.core.server.http.RequestAuthenticatorFactory;
6   import org.junit.Before;
7   import org.junit.Rule;
8   import org.junit.Test;
9   import org.junit.rules.ExpectedException;
10  import org.mockito.Mock;
11  import org.mockito.MockitoAnnotations;
12  import org.springframework.beans.factory.NoSuchBeanDefinitionException;
13  import org.springframework.web.context.WebApplicationContext;
14  
15  import javax.servlet.FilterConfig;
16  import javax.servlet.ServletContext;
17  
18  import static com.atlassian.asap.core.server.filter.SpringRequestAuthenticatorSupplier.SPRING_CONTEXT_NAME_INIT_PARAM_KEY;
19  import static org.junit.Assert.assertNotNull;
20  import static org.mockito.Matchers.any;
21  import static org.mockito.Mockito.spy;
22  import static org.mockito.Mockito.verify;
23  import static org.mockito.Mockito.when;
24  
25  public class SpringRequestAuthenticatorSupplierTest {
26      private static final AuthenticationContext AUTHENTICATION_CONTEXT = new AuthenticationContext("The Audience", "https://mock.invalid/");
27  
28      @Rule
29      public ExpectedException expectedException = ExpectedException.none();
30  
31      @Mock
32      private FilterConfig filterConfig;
33      @Mock
34      private ServletContext servletContext;
35      @Mock
36      private WebApplicationContext springContext;
37  
38      private SpringRequestAuthenticatorSupplier supplier;
39  
40      @Before
41      public void setUp() {
42          MockitoAnnotations.initMocks(this);
43  
44          setupMockSpringContext();
45  
46          supplier = new SpringRequestAuthenticatorSupplier(filterConfig);
47      }
48  
49      private void setupMockSpringContext() {
50          when(filterConfig.getServletContext()).thenReturn(servletContext);
51          when(servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)).thenReturn(springContext);
52          when(springContext.getBean(AuthenticationContext.class)).thenReturn(AUTHENTICATION_CONTEXT);
53      }
54  
55      @Test
56      public void resolvesSpringContextWithCustomName() {
57          when(filterConfig.getInitParameter(SPRING_CONTEXT_NAME_INIT_PARAM_KEY)).thenReturn("customSpringContext");
58          SpringRequestAuthenticatorSupplier customContextSupplier = new SpringRequestAuthenticatorSupplier(filterConfig);
59          verify(servletContext).getAttribute("customSpringContext");
60      }
61  
62      @Test
63      public void getSucceedsWithDefaultRequestAuthenticatorFactory() {
64          when(springContext.getBean(RequestAuthenticatorFactory.class)).thenThrow(new NoSuchBeanDefinitionException("no such bean"));
65          RequestAuthenticator requestAuthenticator = supplier.get();
66          assertNotNull(requestAuthenticator);
67      }
68  
69      @Test
70      public void getSucceedsWithCustomRequestAuthenticatorFactory() {
71          RequestAuthenticatorFactory customRequestAuthenticatorFactory = spy(new RequestAuthenticatorFactory());
72          when(springContext.getBean(RequestAuthenticatorFactory.class)).thenReturn(customRequestAuthenticatorFactory);
73          RequestAuthenticator requestAuthenticator = supplier.get();
74          assertNotNull(requestAuthenticator);
75          verify(customRequestAuthenticatorFactory).create(any(AuthenticationContext.class));
76      }
77  
78      @Test
79      public void getFailsIfAuthenticationContextIsMissing() {
80          when(springContext.getBean(RequestAuthenticatorFactory.class)).thenThrow(new NoSuchBeanDefinitionException("no such bean"));
81          when(springContext.getBean(AuthenticationContext.class)).thenThrow(new NoSuchBeanDefinitionException("no such bean"));
82          expectedException.expectMessage("Unable to find unique bean");
83          expectedException.expectMessage(AuthenticationContext.class.getName());
84  
85          supplier.get();
86      }
87  }