package io.github.jhipster.sample.service; import io.github.jhipster.sample.JhipsterSampleApplicationNg2App; import io.github.jhipster.sample.domain.PersistentToken; import io.github.jhipster.sample.domain.User; import io.github.jhipster.sample.repository.PersistentTokenRepository; import io.github.jhipster.sample.config.Constants; import io.github.jhipster.sample.repository.UserRepository; import io.github.jhipster.sample.service.dto.UserDTO; import io.github.jhipster.sample.service.util.RandomUtil; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import java.time.LocalDate; import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.Optional; import java.util.List; import static org.assertj.core.api.Assertions.*; /** * Test class for the UserResource REST controller. * * @see UserService */ @RunWith(SpringRunner.class) @SpringBootTest(classes = JhipsterSampleApplicationNg2App.class) @Transactional public class UserServiceIntTest { @Autowired private PersistentTokenRepository persistentTokenRepository; @Autowired private UserRepository userRepository; @Autowired private UserService userService; @Test public void testRemoveOldPersistentTokens() { User admin = userRepository.findOneByLogin("admin").get(); int existingCount = persistentTokenRepository.findByUser(admin).size(); generateUserToken(admin, "1111-1111", LocalDate.now()); LocalDate now = LocalDate.now(); generateUserToken(admin, "2222-2222", now.minusDays(32)); assertThat(persistentTokenRepository.findByUser(admin)).hasSize(existingCount + 2); userService.removeOldPersistentTokens(); assertThat(persistentTokenRepository.findByUser(admin)).hasSize(existingCount + 1); } @Test public void assertThatUserMustExistToResetPassword() { Optional<User> maybeUser = userService.requestPasswordReset("john.doe@localhost"); assertThat(maybeUser.isPresent()).isFalse(); maybeUser = userService.requestPasswordReset("admin@localhost"); assertThat(maybeUser.isPresent()).isTrue(); assertThat(maybeUser.get().getEmail()).isEqualTo("admin@localhost"); assertThat(maybeUser.get().getResetDate()).isNotNull(); assertThat(maybeUser.get().getResetKey()).isNotNull(); } @Test public void assertThatOnlyActivatedUserCanRequestPasswordReset() { User user = userService.createUser("johndoe", "johndoe", "John", "Doe", "john.doe@localhost", "http://placehold.it/50x50", "en-US"); Optional<User> maybeUser = userService.requestPasswordReset("john.doe@localhost"); assertThat(maybeUser.isPresent()).isFalse(); userRepository.delete(user); } @Test public void assertThatResetKeyMustNotBeOlderThan24Hours() { User user = userService.createUser("johndoe", "johndoe", "John", "Doe", "john.doe@localhost", "http://placehold.it/50x50", "en-US"); Instant daysAgo = Instant.now().minus(25, ChronoUnit.HOURS); String resetKey = RandomUtil.generateResetKey(); user.setActivated(true); user.setResetDate(daysAgo); user.setResetKey(resetKey); userRepository.save(user); Optional<User> maybeUser = userService.completePasswordReset("johndoe2", user.getResetKey()); assertThat(maybeUser.isPresent()).isFalse(); userRepository.delete(user); } @Test public void assertThatResetKeyMustBeValid() { User user = userService.createUser("johndoe", "johndoe", "John", "Doe", "john.doe@localhost", "http://placehold.it/50x50", "en-US"); Instant daysAgo = Instant.now().minus(25, ChronoUnit.HOURS); user.setActivated(true); user.setResetDate(daysAgo); user.setResetKey("1234"); userRepository.save(user); Optional<User> maybeUser = userService.completePasswordReset("johndoe2", user.getResetKey()); assertThat(maybeUser.isPresent()).isFalse(); userRepository.delete(user); } @Test public void assertThatUserCanResetPassword() { User user = userService.createUser("johndoe", "johndoe", "John", "Doe", "john.doe@localhost", "http://placehold.it/50x50", "en-US"); String oldPassword = user.getPassword(); Instant daysAgo = Instant.now().minus(2, ChronoUnit.HOURS); String resetKey = RandomUtil.generateResetKey(); user.setActivated(true); user.setResetDate(daysAgo); user.setResetKey(resetKey); userRepository.save(user); Optional<User> maybeUser = userService.completePasswordReset("johndoe2", user.getResetKey()); assertThat(maybeUser.isPresent()).isTrue(); assertThat(maybeUser.get().getResetDate()).isNull(); assertThat(maybeUser.get().getResetKey()).isNull(); assertThat(maybeUser.get().getPassword()).isNotEqualTo(oldPassword); userRepository.delete(user); } @Test public void testFindNotActivatedUsersByCreationDateBefore() { userService.removeNotActivatedUsers(); Instant now = Instant.now(); List<User> users = userRepository.findAllByActivatedIsFalseAndCreatedDateBefore(now.minus(3, ChronoUnit.DAYS)); assertThat(users).isEmpty(); } private void generateUserToken(User user, String tokenSeries, LocalDate localDate) { PersistentToken token = new PersistentToken(); token.setSeries(tokenSeries); token.setUser(user); token.setTokenValue(tokenSeries + "-data"); token.setTokenDate(localDate); token.setIpAddress("127.0.0.1"); token.setUserAgent("Test agent"); persistentTokenRepository.saveAndFlush(token); } @Test public void assertThatAnonymousUserIsNotGet() { final PageRequest pageable = new PageRequest(0, (int) userRepository.count()); final Page<UserDTO> allManagedUsers = userService.getAllManagedUsers(pageable); assertThat(allManagedUsers.getContent().stream() .noneMatch(user -> Constants.ANONYMOUS_USER.equals(user.getLogin()))) .isTrue(); } @Test public void testRemoveNotActivatedUsers() { User user = userService.createUser("johndoe", "johndoe", "John", "Doe", "john.doe@localhost", "http://placehold.it/50x50", "en-US"); user.setActivated(false); user.setCreatedDate(Instant.now().minus(30, ChronoUnit.DAYS)); userRepository.save(user); assertThat(userRepository.findOneByLogin("johndoe")).isPresent(); userService.removeNotActivatedUsers(); assertThat(userRepository.findOneByLogin("johndoe")).isNotPresent(); } }