package de.flower.rmt.service;
import de.flower.rmt.model.db.entity.Invitation;
import de.flower.rmt.model.db.entity.Invitation_;
import de.flower.rmt.model.db.entity.Team;
import de.flower.rmt.model.db.entity.User;
import de.flower.rmt.model.db.entity.event.Event;
import de.flower.rmt.model.db.entity.event.Match;
import de.flower.rmt.model.db.entity.event.QEvent;
import de.flower.rmt.model.db.entity.event.Training;
import de.flower.rmt.model.db.type.EventType;
import de.flower.rmt.model.db.type.Surface;
import de.flower.rmt.test.AbstractRMTIntegrationTests;
import org.hibernate.LazyInitializationException;
import org.joda.time.DateTime;
import org.testng.annotations.Test;
import java.util.Date;
import java.util.List;
import static org.testng.Assert.*;
/**
* @author flowerrrr
*/
public class EventManagerTest extends AbstractRMTIntegrationTests {
@Test
public void testFindAllNextNHours() {
Event event = testData.createEvent();
List<Event> events;
event.setDateTime(new DateTime().minusSeconds(1));
eventManager.save(event);
events = eventManager.findAllNextNHours(1);
assertEquals(events.size(), 0);
event.setDateTime(new DateTime().plusHours(1));
eventManager.save(event);
events = eventManager.findAllNextNHours(1);
assertEquals(events.size(), 1);
event.setDateTime(new DateTime().plusHours(1).plusMinutes(1));
eventManager.save(event);
events = eventManager.findAllNextNHours(1);
assertEquals(events.size(), 0);
}
@Test
public void testFindAllNextHoursRespectsCanceledFlag() {
Event event = testData.createEvent();
event.setDateTime(new DateTime().plusMinutes(1));
eventManager.save(event);
assertEquals(eventManager.findAllNextNHours(1).size(), 1);
event.setCanceled(true);
eventManager.save(event);
assertEquals(eventManager.findAllNextNHours(1).size(), 0);
}
@Test
public void testFindAllEventsByUserEagerFetchesTeams() {
Team team = testData.createTeamWithPlayers("test team", 10);
List<Event> events = testData.createEventsWithInvitations(team, 3, true);
List<Invitation> invitations = invitationManager.findAllByEvent(events.get(0), Invitation_.user);
List<Event> list = eventManager.findAll(0, 10, invitations.get(0).getUser(), QEvent.event.team);
assertEquals(list.size(), 3);
for (Event event : list) {
// check if team can be accessed without LIE
event.getTeam().getName();
}
}
@Test
public void testDelete() {
Event event = testData.createEventWithResponses();
eventManager.delete(event.getId());
// assert that event is hard-deleted
assertNull(eventRepo.findOne(event.getId()));
}
@Test
public void testSurfaceUserType() {
testData.setEventType(EventType.Match);
// reload from database
Match event = (Match) testData.createEvent();
event = (Match) eventManager.loadById(event.getId());
assertTrue(event.getSurfaceList().isEmpty());
event.getSurfaceList().add(Surface.NATURAL_GRASS);
event.getSurfaceList().add(Surface.ASH);
eventManager.save(event);
event = (Match) eventManager.loadById(event.getId());
assertEquals(event.getSurfaceList().get(0), Surface.NATURAL_GRASS);
assertEquals(event.getSurfaceList().get(1), Surface.ASH);
}
@Test(expectedExceptions = LazyInitializationException.class)
public void testLoadNoPrefetchedAssociations() {
testData.setEventType(EventType.Match);
Event event = testData.createEvent();
// reload from database
event = eventManager.loadById(event.getId());
event.getTeam().getName();
}
@Test
public void testSorting() {
Team team = testData.createTeamWithPlayers("test team", 10);
User user = team.getPlayers().get(0).getUser();
testData.createEventsWithInvitations(team, 10, true);
testData.createEventsWithInvitations(team, 10, false);
List<Event> events = eventManager.findAll(0, 20, user);
Date last = new DateTime().plusYears(1000).toDate();
for (Event event : events) {
assertTrue(event.getDateTimeAsDate().getTime() <= last.getTime());
last = event.getDateTimeAsDate();
}
}
@Test
public void testCancelEvent() {
Event event = testData.createEventWithResponses();
eventManager.cancelEvent(event.getId());
}
@Test
public void testFetchOpponent() {
eventManager.findAll(QEvent.event.team, QEvent.event.opponent);
}
@Test
public void testCopyEvent() {
testData.setEventType(EventType.Training);
Event event = testData.createEvent();
Training copy = (Training) eventManager.copyOf(event);
// check if LIE is thrown
copy.getUniform().getName();
}
}