/******************************************************************************* * Copyright (c) 2005, 2014 springside.github.io * * Licensed under the Apache License, Version 2.0 (the "License"); *******************************************************************************/ package org.springside.examples.quickstart.service.account; import static org.assertj.core.api.Assertions.*; import java.util.Date; import org.junit.Before; import org.junit.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.springside.examples.quickstart.data.UserData; import org.springside.examples.quickstart.entity.User; import org.springside.examples.quickstart.repository.TaskDao; import org.springside.examples.quickstart.repository.UserDao; import org.springside.examples.quickstart.service.ServiceException; import org.springside.examples.quickstart.service.account.ShiroDbRealm.ShiroUser; import org.springside.modules.test.security.shiro.ShiroTestUtils; import org.springside.modules.utils.Clock.MockClock; /** * AccountService的测试用例, 测试Service层的业务逻辑. * * @author calvin */ public class AccountServiceTest { @InjectMocks private AccountService accountService; @Mock private UserDao mockUserDao; @Mock private TaskDao mockTaskDao; @Before public void setUp() { MockitoAnnotations.initMocks(this); ShiroTestUtils.mockSubject(new ShiroUser(3L, "foo", "Foo")); } @Test public void registerUser() { User user = UserData.randomNewUser(); Date currentTime = new Date(); accountService.setClock(new MockClock(currentTime)); accountService.registerUser(user); // 验证user的角色,注册日期和加密后的密码都被自动更新了。 assertThat(user.getRoles()).isEqualTo("user"); assertThat(user.getRegisterDate()).isEqualTo(currentTime); assertThat(user.getPassword()).isNotNull(); assertThat(user.getSalt()).isNotNull(); } @Test public void updateUser() { // 如果明文密码不为空,加密密码会被更新. User user = UserData.randomNewUser(); accountService.updateUser(user); assertThat(user.getSalt()).isNotNull(); // 如果明文密码为空,加密密码无变化。 User user2 = UserData.randomNewUser(); user2.setPlainPassword(null); accountService.updateUser(user2); assertThat(user2.getSalt()).isNull(); } @Test public void deleteUser() { // 正常删除用户. accountService.deleteUser(2L); Mockito.verify(mockUserDao).delete(2L); // 删除超级管理用户抛出异常, userDao没有被执行 try { accountService.deleteUser(1L); failBecauseExceptionWasNotThrown(ServiceException.class); } catch (ServiceException e) { // expected exception } Mockito.verify(mockUserDao, Mockito.never()).delete(1L); } }