package com.huixinpn.dionysus; import java.util.UUID; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.junit.Before; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.transaction.annotation.Transactional; import com.huixinpn.dionysus.domain.user.User; import com.huixinpn.dionysus.repository.user.ConsultantRepository; import com.huixinpn.dionysus.repository.user.UserRepository; @Transactional @RunWith(SpringJUnit4ClassRunner.class) @ActiveProfiles("test") @WebAppConfiguration @SpringApplicationConfiguration(classes = DomainApplicationContext.class) public abstract class AbstractPersistentTest { protected static final String DEFAULT_USERNAME = "testUser"; @PersistenceContext protected EntityManager entityManager; @Autowired protected UserRepository userRepository; @Autowired protected ConsultantRepository consultantRepository; protected User createUser(String username) { User user = userRepository.findByUsername(username); if (user == null) { user = new User(username, "password"); //Inbox inbox = new Inbox(); //inbox.setUser(user); //user.setInbox(inbox); userRepository.save(user); } return user; } protected void runAs(String username) { User user = createUser(username); String password = UUID.randomUUID().toString(); SecurityContext context = SecurityContextHolder.getContext(); context.setAuthentication(new UsernamePasswordAuthenticationToken(user, password)); } @Before public void wireUpAuditor() { runAs(DEFAULT_USERNAME); } }