package de.flower.rmt.service;
import de.flower.rmt.model.db.entity.Team;
import de.flower.rmt.model.db.entity.User;
import de.flower.rmt.model.db.entity.User_;
import de.flower.rmt.model.db.entity.event.Event;
import de.flower.rmt.test.AbstractRMTIntegrationTests;
import org.hibernate.LazyInitializationException;
import org.testng.annotations.Test;
import java.util.Arrays;
import java.util.List;
import static org.testng.Assert.*;
/**
* @author flowerrrr
*/
public class UserManagerTest extends AbstractRMTIntegrationTests {
/**
* Test if clients of service layer can specify
* eager fetching of domain objects to avoid lazy init execptions.
*/
@Test
public void testEagerFetching() {
List<User> users = userManager.findAllFetchTeams(User_.roles);
assertTrue(users.size() > 0);
User user = users.get(0);
log.info(user.toString());
log.info(user.getRoles().iterator().next().getAuthority());
log.info(user.getPlayers().get(0).getTeam().getName());
}
/**
* Test verifies that multitenancy is working.
*/
@Test
public void testFindAllFiltersByClub() {
List<User> list = userManager.findAll(User_.club);
for (User u : list) {
assertEquals(u.getClub(), securityService.getUser().getClub());
}
}
/**
* Test that forces lazy init ex.
*/
@Test(expectedExceptions = {LazyInitializationException.class})
public void testLazyInitException() {
List<User> users = userManager.findAll();
assertTrue(users.size() > 0);
User user = users.get(0);
log.info(user.getRoles().iterator().next().getAuthority());
}
@Test
public void testSaveUser() {
User user = userManager.newInstance();
user.setEmail("foo@bar.com");
user.setFullname("Foo Bar");
userManager.save(user);
// test reattach
user = userManager.loadById(user.getId());
String fullname = "John Doe";
user.setFullname(fullname);
userManager.save(user);
user = userManager.loadById(user.getId());
assertEquals(user.getFullname(), fullname);
}
@Test
public void testSaveUserSavesRoles() {
User user = userManager.newInstance();
user.setEmail("foo@bar.com");
user.setFullname("Foo Bar");
userManager.save(user);
user = userManager.loadById(user.getId(), User_.roles);
assertFalse(user.getRoles().isEmpty());
}
@Test
public void testUnassignedPlayer() {
Team team = testData.getJuveAmateure();
List<User> users = userManager.findAllUnassignedPlayers(team);
assertFalse(users.isEmpty());
for (User u : users) {
playerManager.addPlayer(team, u);
}
users = userManager.findAllUnassignedPlayers(team);
assertTrue(users.isEmpty());
}
@Test
public void testUninvitedPlayers() {
Event event = testData.createEvent();
List<User> users = userManager.findAllUninvitedPlayers(event);
assertFalse(users.isEmpty());
User u = users.get(0);
invitationManager.addUsers(event, Arrays.asList(u.getId()));
List<User> users2 = userManager.findAllUninvitedPlayers(event);
assertEquals(users2.size() + 1, users.size());
assertFalse(users2.contains(u));
}
@Test
public void testResetPassword() {
User user = testData.createUser();
user.setInitialPassword(null);
userRepo.save(user);
userManager.resetPassword(user, true);
// now reload user and assert that new password has been generated
user = userManager.loadById(user.getId());
assertNotNull(user.getInitialPassword());
}
@Test
public void testDelete() {
List<User> users = userManager.findAll();
for (User user : users) {
if (securityService.isCurrentUser(user)) {
continue;
}
userManager.delete(user.getId());
User deleted = userManager.loadById(user.getId());
assertTrue(deleted.getEmail().startsWith("DELETED"));
assertTrue(deleted.getFullname().startsWith("DELETED"));
assertTrue(deleted.isDeleted());
}
// only logged-in user remains undeleted
assertEquals(userManager.findAll().size(), 1);
}
}