package no.java.incogito.web; import fj.F; import static fj.P.p; import fj.P2; import fj.data.List; import static fj.data.List.list; import static fj.data.List.single; import fj.data.Option; import static fj.data.Option.some; import fj.data.TreeMap; import junit.framework.TestCase; import no.java.incogito.Functions; import no.java.incogito.application.IncogitoConfiguration; import no.java.incogito.application.IncogitoConfiguration.DayConfiguration; import no.java.incogito.application.IncogitoConfiguration.EventConfiguration; import static no.java.incogito.application.IncogitoConfiguration.unconfigured; import no.java.incogito.domain.Comment; import no.java.incogito.domain.CssConfiguration; import no.java.incogito.domain.IncogitoTestData; import static no.java.incogito.domain.IncogitoTestData.javaZone2008; import static no.java.incogito.domain.IncogitoTestData.jz08Day1Rooms; import static no.java.incogito.domain.IncogitoTestData.jz08Day1Timeslots; import static no.java.incogito.domain.IncogitoTestData.jz08Day2Rooms; import static no.java.incogito.domain.IncogitoTestData.jz08Day2Timeslots; import static no.java.incogito.domain.IncogitoTestData.sep17th; import static no.java.incogito.domain.IncogitoTestData.sep18th; import no.java.incogito.domain.IncogitoUri; import no.java.incogito.domain.IncogitoUri.IncogitoEventsUri.IncogitoEventUri; import no.java.incogito.domain.IncogitoUri.IncogitoRestEventsUri.IncogitoRestEventUri; import no.java.incogito.domain.Label; import no.java.incogito.domain.Level; import no.java.incogito.domain.Level.LevelId; import no.java.incogito.domain.Room; import no.java.incogito.domain.Schedule; import no.java.incogito.domain.Session; import static no.java.incogito.domain.Session.Format.Presentation; import no.java.incogito.domain.SessionId; import no.java.incogito.domain.Speaker; import no.java.incogito.domain.UserSessionAssociation; import no.java.incogito.domain.WikiString; import no.java.incogito.web.servlet.WebCalendar; import org.joda.time.DateMidnight; import org.joda.time.Duration; import org.joda.time.Interval; /** * @author <a href="mailto:trygvis@java.no">Trygve Laugstøl</a> * @version $Id$ */ public class WebFunctionsTest extends TestCase { DayConfiguration jz08Day1 = new DayConfiguration(jz08Day1Rooms, jz08Day1Timeslots); DayConfiguration jz08Day2 = new DayConfiguration(jz08Day2Rooms, jz08Day2Timeslots); EventConfiguration jz08Configuration = new EventConfiguration(javaZone2008.name, Option.<String>none(), list(p(sep17th, jz08Day1), p(sep18th, jz08Day2)), List.<Room>nil(), List.<Label>nil(), TreeMap.<LevelId, Level>empty(LevelId.ord), 0); Session templateSession = new Session(new SessionId("123"), Presentation, "Session 1", Option.<WikiString>none(), Option.<Level>none(), Option.<Interval>none(), Option.<String>none(), List.<Label>nil(), List.<Speaker>nil(), List.<Comment>nil()); Option<String> room1 = some("Room 1"); Option<String> room2 = some("Room 2"); Option<Interval> day1 = some(new Interval(new DateMidnight(2009, 9, 9), new Duration(1000))); Option<Interval> day2 = some(new Interval(new DateMidnight(2009, 9, 10), new Duration(1000))); CssConfiguration cssConfiguration = new CssConfiguration(2.5, 20.0 / 60.0, 11); IncogitoConfiguration configuration = new IncogitoConfiguration(unconfigured.baseurl, cssConfiguration, Option.<String>none(), Option.<String>none(), single(jz08Configuration)); public void testFunctions() { List<Room> rooms = List.list(new Room("Room 1"), new Room("Room 2")); String s = WebFunctions.generateCalendarCss.f(cssConfiguration).f(rooms).foldRight(Functions.String_join.f("\n"), ""); assertEquals(".start0900 { top: 2.5em; }\n" + ".start0915 { top: 5.8em; }\n" + ".start0930 { top: 9.2em; }\n" + ".start0945 { top: 12.5em; }\n" + ".start1000 { top: 15.8em; }\n" + ".start1015 { top: 19.2em; }\n" + ".start1030 { top: 22.5em; }\n" + ".start1045 { top: 25.8em; }\n" + ".start1100 { top: 29.2em; }\n" + ".start1115 { top: 32.5em; }\n" + ".start1130 { top: 35.8em; }\n" + ".start1145 { top: 39.2em; }\n" + ".start1200 { top: 42.5em; }\n" + ".start1215 { top: 45.8em; }\n" + ".start1230 { top: 49.2em; }\n" + ".start1245 { top: 52.5em; }\n" + ".start1300 { top: 55.8em; }\n" + ".start1315 { top: 59.2em; }\n" + ".start1330 { top: 62.5em; }\n" + ".start1345 { top: 65.8em; }\n" + ".start1400 { top: 69.2em; }\n" + ".start1415 { top: 72.5em; }\n" + ".start1430 { top: 75.8em; }\n" + ".start1445 { top: 79.2em; }\n" + ".start1500 { top: 82.5em; }\n" + ".start1515 { top: 85.8em; }\n" + ".start1530 { top: 89.2em; }\n" + ".start1545 { top: 92.5em; }\n" + ".start1600 { top: 95.8em; }\n" + ".start1615 { top: 99.2em; }\n" + ".start1630 { top: 102.5em; }\n" + ".start1645 { top: 105.8em; }\n" + ".start1700 { top: 109.2em; }\n" + ".start1715 { top: 112.5em; }\n" + ".start1730 { top: 115.8em; }\n" + ".start1745 { top: 119.2em; }\n" + ".start1800 { top: 122.5em; }\n" + ".start1815 { top: 125.8em; }\n" + ".start1830 { top: 129.2em; }\n" + ".start1845 { top: 132.5em; }\n" + ".start1900 { top: 135.8em; }\n" + ".start1915 { top: 139.2em; }\n" + ".start1930 { top: 142.5em; }\n" + ".start1945 { top: 145.8em; }\n" + ".duration10 { height: 10em; margin: 0; padding: 0; }\n" + ".duration60 { height: 10em; margin: 0; padding: 0; }\n", s); } /* public void testFunctions() { List<Room> rooms = List.list(new Room("Room 1"), new Room("Room 2")); F<List<Room>, List<String>> generateCalendarCss = WebFunctions.generateCalendarCss. f(cssConfiguration). f(configuration.findEventConfigurationByName(javaZone2008.name).some()); String s = generateCalendarCss.f(rooms).foldRight(Functions.String_join.f("\n"), ""); assertEquals(".start0900 { top: 2.5em; }\n" + ".start1015 { top: 5.8em; }\n" + ".start1145 { top: 9.2em; }\n" + ".start1300 { top: 12.5em; }\n" + ".start1415 { top: 15.8em; }\n" + ".start1545 { top: 19.2em; }\n" + ".start1700 { top: 22.5em; }\n" + ".start1815 { top: 25.8em; }\n" + ".start0900 { top: 29.2em; }\n" + ".start1015 { top: 32.5em; }\n" + ".start1145 { top: 35.8em; }\n" + ".start1300 { top: 39.2em; }\n" + ".start1415 { top: 42.5em; }\n" + ".start1545 { top: 45.8em; }\n" + ".start1700 { top: 49.2em; }\n" + ".start1815 { top: 52.5em; }\n" + ".duration10 { height: 10em; margin: 0; padding: 0; }\n" + ".duration15 { height: 10em; margin: 0; padding: 0; }\n" + ".duration60 { height: 10em; margin: 0; padding: 0; }\n", s); } */ public void testSessionCss() { List<String> lines = WebFunctions.generateSessionCss.f(configuration).f(javaZone2008); String s = lines.foldRight(Functions.String_join.f("\n"), ""); System.out.println(s); assertEquals(".level-Intermediate { list-style-image: url('http://unconfigured/rest/events/JavaZone 2008/icons/levels/Intermediate.png'); }", lines.index(3)); } public void testDuration() { F<Integer, String> f = WebFunctions.durationToCss.f(cssConfiguration); System.out.println("cssConfiguration.emPerMinute = " + cssConfiguration.emPerMinute); assertEquals(".duration15 { height: 10em; margin: 0; padding: 0; }", f.f(15)); // assertEquals(".duration15 { height: 5.0em; margin: 0; padding: 0; }", f.f(15)); // assertEquals(".duration30 { height: 10.0em; margin: 0; padding: 0; }", f.f(30)); // assertEquals(".duration60 { height: 20.0em; margin: 0; padding: 0; }", f.f(60)); } public void testHourToCss() { F<P2<P2<String, String>, Integer>, String> f = WebFunctions.hourToSessionCss.f(cssConfiguration); assertEquals(".start0900 { top: 2.5em; }", f.f(p(p("09", "00"), 0))); assertEquals(".start0915 { top: 5.8em; }", f.f(p(p("09", "15"), 1))); assertEquals(".start0930 { top: 9.2em; }", f.f(p(p("09", "30"), 2))); // F<P2<String, Integer>, String> f = WebFunctions.hourToSessionCss.f(cssConfiguration); // // assertEquals(".start0900 { top: 2.5em; }", f.f(p("0900", 0))); // assertEquals(".start0915 { top: 5.8em; }", f.f(p("0915", 1))); // assertEquals(".start0930 { top: 9.2em; }", f.f(p("0930", 2))); } public void testEmptyCalendar() { WebCalendar calendar = createCalendar(list(templateSession)); assertEquals(2, calendar.getDayToRoomToPresentationsMap().size()); assertEquals(2, calendar.getRoomsByDate().size()); assertEquals(3, calendar.getRoomsByDate().get(sep17th).size()); assertEquals(2, calendar.getRoomsByDate().get(sep18th).size()); calendar = createCalendar(list(templateSession.room(room1), templateSession.room(room2))); assertEquals(2, calendar.getDayToRoomToPresentationsMap().size()); assertEquals(2, calendar.getRoomsByDate().size()); assertEquals(3, calendar.getRoomsByDate().get(sep17th).size()); assertEquals(2, calendar.getRoomsByDate().get(sep18th).size()); calendar = createCalendar(list(templateSession.timeslot(day1), templateSession.timeslot(day2))); assertEquals(2, calendar.getRoomsByDate().size()); assertEquals(3, calendar.getRoomsByDate().get(sep17th).size()); assertEquals(2, calendar.getRoomsByDate().get(sep18th).size()); } public void testCalendarWithSessions() { WebCalendar calendar = createCalendar(IncogitoTestData.sessions); assertEquals(2, calendar.getRoomsByDate().size()); assertEquals(3, calendar.getRoomsByDate().get(sep17th).size()); assertEquals(2, calendar.getRoomsByDate().get(sep18th).size()); assertEquals(2, calendar.getDayToRoomToPresentationsMap().size()); assertEquals(2, calendar.getQuickiesByDay().size()); } private WebCalendar createCalendar(List<Session> sessions) { IncogitoUri incogitoUri = new IncogitoUri("poop"); IncogitoRestEventUri restEventUri = incogitoUri.restEvents().eventUri("myevent"); IncogitoEventUri eventUri = incogitoUri.events().eventUri("myevent"); Schedule schedule = new Schedule(javaZone2008, sessions, TreeMap.<SessionId, UserSessionAssociation>empty(SessionId.ord)); return WebFunctions.webCalendar.f(restEventUri).f(eventUri).f(schedule); } }