package org.springside.examples.showcase.unit.security;
import static org.junit.Assert.*;
import org.easymock.EasyMock;
import org.easymock.IMocksControl;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.security.authentication.encoding.ShaPasswordEncoder;
import org.springframework.security.core.authority.GrantedAuthorityImpl;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springside.examples.showcase.common.entity.Role;
import org.springside.examples.showcase.common.entity.User;
import org.springside.examples.showcase.common.service.AccountManager;
import org.springside.examples.showcase.security.OperatorDetails;
import org.springside.examples.showcase.security.UserDetailsServiceImpl;
public class UserDetailsServiceImplTest {
private IMocksControl control = EasyMock.createControl();
private UserDetailsServiceImpl userDetailsService;
private AccountManager mockAccountManager;
@Before
public void setUp() {
userDetailsService = new UserDetailsServiceImpl();
mockAccountManager = control.createMock(AccountManager.class);
userDetailsService.setAccountManager(mockAccountManager);
}
@After
public void tearDown() {
control.verify();
}
@Test
public void loadUserExist() {
//准备数据
User user = new User();
user.setLoginName("admin");
user.setShaPassword(new ShaPasswordEncoder().encodePassword("admin", null));
Role role1 = new Role();
role1.setName("admin");
Role role2 = new Role();
role2.setName("user");
user.getRoleList().add(role1);
user.getRoleList().add(role2);
//录制脚本
EasyMock.expect(mockAccountManager.findUserByLoginName("admin")).andReturn(user);
control.replay();
//执行测试
OperatorDetails operator = (OperatorDetails) userDetailsService.loadUserByUsername(user.getLoginName());
//校验结果
assertEquals(user.getLoginName(), operator.getUsername());
assertEquals(new ShaPasswordEncoder().encodePassword("admin", null), operator.getPassword());
assertEquals(2, operator.getAuthorities().size());
assertEquals(new GrantedAuthorityImpl("ROLE_admin"), operator.getAuthorities().iterator().next());
assertNotNull(operator.getLoginTime());
}
@Test(expected = UsernameNotFoundException.class)
public void loadUserByWrongUserName() {
//录制脚本
EasyMock.expect(mockAccountManager.findUserByLoginName("foo")).andReturn(null);
control.replay();
assertNull(userDetailsService.loadUserByUsername("foo"));
}
}