package com.nicusa.controller;
import com.nicusa.domain.UserProfile;
import com.nicusa.resource.UserProfileResource;
import org.hamcrest.CoreMatchers;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.social.connect.Connection;
import org.springframework.social.connect.web.ProviderSignInUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.context.request.WebRequest;
import javax.persistence.EntityManager;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.nullValue;
import static org.hamcrest.core.IsInstanceOf.instanceOf;
import static org.junit.Assert.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class SecurityControllerTest {
@InjectMocks
private SecurityController securityController;
@Mock
private EntityManager entityManager;
@Mock
private ProviderSignInUtils providerSignInUtils;
@Before
public void before() {
SecurityContextHolder.getContext().setAuthentication(null);
}
@After
public void after() {
SecurityContextHolder.getContext().setAuthentication(null);
}
@Test
public void testSignin() {
UserProfile userProfile = new UserProfile();
userProfile.setId(1L);
securityController.signin(userProfile);
assertCorrectPrincipalSetup();
}
private void assertCorrectPrincipalSetup() {
assertThat(SecurityContextHolder.getContext().getAuthentication(), is(not(nullValue())));
assertThat(SecurityContextHolder.getContext().getAuthentication(),
instanceOf(UsernamePasswordAuthenticationToken.class));
assertThat(SecurityContextHolder.getContext().getAuthentication().getPrincipal(), is(not(nullValue())));
assertThat(SecurityContextHolder.getContext().getAuthentication().getPrincipal(), instanceOf(Long.class));
assertThat(SecurityContextHolder.getContext().getAuthentication().getPrincipal(), is(1L));
}
@Test
public void testGetAuthenticatedUserProfileId() {
UserProfile userProfile = new UserProfile();
userProfile.setId(1L);
securityController.signin(userProfile);
assertThat(securityController.getAuthenticatedUserProfileId(), is(1L));
}
@Test
public void testGetAuthenticateUserProfileIdAnonymous() {
RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(new MockHttpServletRequest()));
assertThat(securityController.getAuthenticatedUserProfileId(), is(UserProfileResource.ANONYMOUS_USER_PROFILE_ID));
}
@Test
public void testSignupNoArgs() throws Exception {
assertThat(securityController.signin(), is("redirect:/"));
}
@Test
public void testSignupWithWebRequest() {
RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(new MockHttpServletRequest()));
WebRequest webRequest = mock(WebRequest.class);
Connection connection = mock(Connection.class);
org.springframework.social.connect.UserProfile socialUserProfile =
mock(org.springframework.social.connect.UserProfile.class);
when(providerSignInUtils.getConnectionFromSession(webRequest)).thenReturn(connection);
when(connection.fetchUserProfile()).thenReturn(socialUserProfile);
UserProfile userProfile = new UserProfile();
assertThat(securityController.signup(webRequest), is("redirect:/"));
}
}