Package org.springside.examples.quickstart.service.account

Source Code of org.springside.examples.quickstart.service.account.AccountServiceTest

/*******************************************************************************
* 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);
  }

}
TOP

Related Classes of org.springside.examples.quickstart.service.account.AccountServiceTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.