package no.java.incogito.application;
import fj.P;
import fj.data.List;
import static fj.data.List.list;
import fj.data.TreeMap;
import fj.pre.Ord;
import junit.framework.TestCase;
import no.java.ems.client.RestEmsService;
import no.java.ems.domain.Event;
import no.java.incogito.application.IncogitoConfiguration.EventConfiguration;
import no.java.incogito.domain.Label;
import no.java.incogito.domain.Room;
import no.java.incogito.ems.client.EmsWrapper;
import org.joda.time.LocalDate;
import org.joda.time.Interval;
import org.joda.time.DateTime;
import java.util.UUID;
/**
* @author <a href="mailto:trygvis@java.no">Trygve Laugstøl</a>
* @version $Id$
*/
public class ConfigurationLoaderServiceTest extends TestCase {
private LocalDate sep17th = new LocalDate(2008, 9, 17);
private LocalDate sep18th = new LocalDate(2008, 9, 18);
private List<Room> roomsDay1 = list(new Room("Lab I"), new Room("Lab II"), new Room("BoF"));
private List<Room> roomsDay2 = list(new Room("Lab I"), new Room("Lab II"));
public void testReconfigure() throws Exception {
EmsWrapper emsWrapper = new EmsWrapper(new RestEmsService(null));
Event event = new Event();
event.setId(UUID.randomUUID().toString());
event.setName("JavaZone 2009");
final TreeMap<String, Event> events = TreeMap.<String, Event>empty(Ord.stringOrd).set(event.getName(), event);
emsWrapper.getEvents = P.p(events.values());
emsWrapper.findEventByName = DefaultIncogitoApplicationTest.mockFindEventByName.f(events);
DefaultIncogitoApplication application = new DefaultIncogitoApplication(DefaultIncogitoApplicationTest.getIncogitoHome(), null, emsWrapper);
application.afterPropertiesSet();
IncogitoConfiguration configuration = application.getConfiguration();
EventConfiguration eventConfiguration = configuration.findEventConfigurationByName(event.getName()).some();
assertEquals(2, eventConfiguration.dayConfigurations.length());
assertEquals(sep17th, eventConfiguration.dayConfigurations.index(0)._1());
assertEquals(sep18th, eventConfiguration.dayConfigurations.index(1)._1());
assertEquals(2, eventConfiguration.dayConfigurations.index(0)._2().rooms.length());
assertEquals(new Room("Lab I"), eventConfiguration.dayConfigurations.index(0)._2().rooms.index(0));
assertEquals(new Room("Lab II"), eventConfiguration.dayConfigurations.index(0)._2().rooms.index(1));
DateTime s17 = sep17th.toDateMidnight().toDateTime();
DateTime s18 = sep17th.toDateMidnight().toDateTime();
assertEquals(8, eventConfiguration.dayConfigurations.index(0)._2().timeslots.length());
assertEquals(new Interval(s17.withHourOfDay(9), s17.withHourOfDay(10)), eventConfiguration.dayConfigurations.index(0)._2().timeslots.index(0));
assertEquals(new Interval(s17.withHourOfDay(18).withMinuteOfHour(15), s17.withHourOfDay(19).withMinuteOfHour(15)), eventConfiguration.dayConfigurations.index(0)._2().timeslots.index(7));
assertEquals(3, eventConfiguration.dayConfigurations.index(1)._2().rooms.length());
assertEquals(new Room("Lab I"), eventConfiguration.dayConfigurations.index(1)._2().rooms.index(0));
assertEquals(new Room("Lab II"), eventConfiguration.dayConfigurations.index(1)._2().rooms.index(1));
assertEquals(new Room("BoF"), eventConfiguration.dayConfigurations.index(1)._2().rooms.index(2));
assertEquals(2, eventConfiguration.labels.length());
assertEquals(eventConfiguration.labels.length(), eventConfiguration.labelMap.size());
Label actualMyLabel = eventConfiguration.labelMap.get("MyLabel").some();
assertEquals("My label", actualMyLabel.displayName);
assertEquals("MyLabel", actualMyLabel.id);
assertEquals("MyLabel", actualMyLabel.emsId);
Label actualRenamedLabel = eventConfiguration.labelMap.get("renamed-label").some();
assertEquals("Renamed Label", actualRenamedLabel.displayName);
assertEquals("renamed-label", actualRenamedLabel.id);
assertEquals("Renamed label", actualRenamedLabel.emsId);
assertEquals("MyLabel", eventConfiguration.labels.index(0).id);
assertEquals("renamed-label", eventConfiguration.labels.index(1).id);
assertEquals(5, eventConfiguration.levels.size());
}
}