package net.petrikainulainen.spring.datasolr.user.controller; import net.petrikainulainen.spring.datasolr.security.util.SecurityContextUtil; import net.petrikainulainen.spring.datasolr.user.dto.SecurityRole; import net.petrikainulainen.spring.datasolr.user.dto.UserDTO; import org.junit.Before; import org.junit.Test; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.test.util.ReflectionTestUtils; import java.util.ArrayList; import java.util.List; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNull; import static org.mockito.Mockito.*; /** * @author Petri Kainulainen */ public class UserControllerTest { private static final GrantedAuthority AUTHORITY = new SimpleGrantedAuthority(SecurityRole.ROLE_USER.name()); private static final String PASSWORD = "password"; private static final String USERNAME = "user"; private UserController controller; private SecurityContextUtil securityContextUtilMock; @Before public void setUp() { controller = new UserController(); securityContextUtilMock = mock(SecurityContextUtil.class); ReflectionTestUtils.setField(controller, "securityContextUtil", securityContextUtilMock); } @Test public void getLoggedInUser_UserIsLoggedIn_ShouldReturnUser() { List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); authorities.add(AUTHORITY); UserDetails principal = new User(USERNAME, PASSWORD, authorities); when(securityContextUtilMock.getPrincipal()).thenReturn(principal); UserDTO loggedInUser = controller.getLoggedInUser(); verify(securityContextUtilMock, times(1)).getPrincipal(); verifyNoMoreInteractions(securityContextUtilMock); assertEquals(USERNAME, loggedInUser.getUsername()); assertEquals(SecurityRole.ROLE_USER, loggedInUser.getRole()); } @Test public void getLoggedInUser_UserIsNotLoggedIn_ShouldReturnNull() { when(securityContextUtilMock.getPrincipal()).thenReturn(null); UserDTO loggedInUser = controller.getLoggedInUser(); verify(securityContextUtilMock, times(1)).getPrincipal(); verifyNoMoreInteractions(securityContextUtilMock); assertNull(loggedInUser); } }