def test_paints_a_complex_combination_of_events_correctly(self): focus_at = datetime.datetime(2010, 2, 15) now_at = datetime.datetime.now() presenter = self._makeOne(focus_at, now_at, dummy_url_for) single_day_16 = DummyCatalogEvent( title="Single Day on 16", startDate=datetime.datetime(2010, 2, 16, 13, 0, 0), endDate =datetime.datetime(2010, 2, 16, 13, 30, 0) ) all_day_15_16 = DummyCatalogEvent( title="All-Day on 15 & 16", startDate=datetime.datetime(2010, 2, 15, 0, 0, 0), endDate =datetime.datetime(2010, 2, 17, 0, 0, 0) ) multi_day_17_19 = DummyCatalogEvent( title="Multi-Day", startDate=datetime.datetime(2010, 2, 17, 15, 15, 0), endDate =datetime.datetime(2010, 2, 19, 16, 15, 0) ) all_day_16_17 = DummyCatalogEvent( title="All-Day on 16 & 17", startDate=datetime.datetime(2010, 2, 16, 0, 0, 0), endDate =datetime.datetime(2010, 2, 18, 0, 0, 0) ) presenter.paint_events( [single_day_16, all_day_15_16, multi_day_17_19, all_day_16_17] ) week_of_feb_14 = presenter.weeks[2] feb_15 = week_of_feb_14[1] feb_16 = week_of_feb_14[2] feb_17 = week_of_feb_14[3] feb_18 = week_of_feb_14[4] feb_19 = week_of_feb_14[5] # all-day event on 15 and 16 for day in (feb_15, feb_16): painted_event = day.event_slots[0] self.assertEqual(painted_event.title, all_day_15_16.title) self.assertTrue(painted_event.bubbled) # all-day event on 16 and 17 for day in (feb_16, feb_17): painted_event = day.event_slots[1] self.assertEqual(painted_event.title, all_day_16_17.title) self.assertTrue(painted_event.bubbled) # single day event on feb 16 painted_event = feb_16.event_slots[2] self.assertEqual(painted_event.title, single_day_16.title) self.assertFalse(painted_event.bubbled) # event spanning feb 17-19, starts middle of 17 and ends middle of 19 for day in (feb_17, feb_18, feb_18): painted_event = day.event_slots[0] self.assertEqual(painted_event.title, multi_day_17_19.title) self.assertTrue(painted_event.bubbled)
def test_paints_events_that_caused_launchpad_bug_523333(self): focus_at = datetime.datetime(2010, 2, 14) now_at = datetime.datetime.now() presenter = self._makeOne(focus_at, now_at, dummy_url_for) first = DummyCatalogEvent( title="First Line", startDate=datetime.datetime(2010, 2, 16, 0, 0, 0), endDate=datetime.datetime(2010, 2, 19, 0, 0, 0)) second = DummyCatalogEvent( title="Second Line", startDate=datetime.datetime(2010, 2, 17, 0, 0, 0), endDate=datetime.datetime(2010, 2, 20, 0, 0, 0)) presenter.paint_events([first, second]) week_of_feb_14 = presenter.week feb_16 = week_of_feb_14[2] feb_17 = week_of_feb_14[3] feb_18 = week_of_feb_14[4] feb_19 = week_of_feb_14[5] feb_20 = week_of_feb_14[6] # first line, first day painted_event = feb_16.event_slots[0] self.assertEqual(painted_event.title, first.title) self.assertTrue(painted_event.bubbled) self.assertEqual(painted_event.rounding_class, "left") # first line, second day painted_event = feb_17.event_slots[0] self.assertEqual(painted_event.title, first.title) self.assertTrue(painted_event.bubbled) self.assertEqual(painted_event.rounding_class, "center") # first line, last day painted_event = feb_18.event_slots[0] self.assertEqual(painted_event.title, first.title) self.assertTrue(painted_event.bubbled) self.assertEqual(painted_event.rounding_class, "right") # second line, first day painted_event = feb_17.event_slots[1] self.assertEqual(painted_event.title, second.title) self.assertTrue(painted_event.bubbled) self.assertEqual(painted_event.rounding_class, "left") # second line, second day painted_event = feb_18.event_slots[1] self.assertEqual(painted_event.title, second.title) self.assertTrue(painted_event.bubbled) self.assertEqual(painted_event.rounding_class, "center") # second line, last day painted_event = feb_19.event_slots[1] self.assertEqual(painted_event.title, second.title) self.assertTrue(painted_event.bubbled) self.assertEqual(painted_event.rounding_class, "right")
def test__find_contiguous_slot_across_days_searches_top_down(self): presenter = self._makePresenter() bubble_painter = self._makeOne(presenter) days = [ DummyDayWithEvents(), DummyDayWithEvents() ] days[0].event_slots[0] = DummyCatalogEvent() days[1].event_slots[1] = DummyCatalogEvent() index = bubble_painter._find_contiguous_slot_across_days(days) self.assertEqual(index, 2)
def test_paints_a_variation_of_launchpad_bug_503451(self): focus_at = datetime.datetime(2010, 1, 3) now_at = datetime.datetime.now() presenter = self._makeOne(focus_at, now_at, dummy_url_for) event = DummyCatalogEvent( title="Travel", startDate=datetime.datetime(2010, 1, 5, 23, 0, 0), endDate=datetime.datetime(2010, 1, 6, 23, 0, 0)) presenter.paint_events([event]) week_of_jan_3 = presenter.week jan_5 = week_of_jan_3[2] jan_6 = week_of_jan_3[3] # presenters.week.EventInUpperTray painted_event = jan_5.event_slots[0] self.assertEqual(painted_event.title, "Travel") self.assertTrue(painted_event.bubbled) self.assertEqual(painted_event.rounding_class, "left") painted_event = jan_6.event_slots[0] self.assertEqual(painted_event.title, "Travel") self.assertTrue(painted_event.bubbled) self.assertEqual(painted_event.rounding_class, "right")
def test_paints_event_of_one_hour(self): focus_at = datetime.datetime(2010, 2, 15) now_at = datetime.datetime.now() presenter = self._makeOne(focus_at, now_at, dummy_url_for) event = DummyCatalogEvent( title="Meeting", startDate=datetime.datetime(2010, 2, 15, 13, 0, 0), endDate =datetime.datetime(2010, 2, 15, 14, 0, 0), ) presenter.paint_events([event]) # presenters.list.Event painted_event = presenter.events[0] self.assertEqual(painted_event.title, event.title) # Meeting self.assertEqual(painted_event.first_line_day, event.startDate.strftime("%m/%d/%Y")) # Mon, Feb 15 self.assertEqual(painted_event.second_line_day, '') starts = painted_event._format_time_of_day(event.startDate) ends = painted_event._format_time_of_day(event.endDate) desc = "%s - %s" % (starts, ends) self.assertEqual(painted_event.first_line_time, desc) # 1pm - 2pm self.assertEqual(painted_event.second_line_time, '')
def test_paints_event_of_one_hour(self): focus_at = datetime.datetime(2010, 2, 15) now_at = datetime.datetime.now() presenter = self._makeOne(focus_at, now_at, dummy_url_for) event = DummyCatalogEvent( title="Meeting", startDate=datetime.datetime(2010, 2, 15, 13, 0, 0), endDate=datetime.datetime(2010, 2, 15, 14, 0, 0)) presenter.paint_events([event]) # dummy event falls on monday monday = presenter.week[1] # search for 1pm time slot (dummy event starts at 1pm) for i, time_slot in enumerate(monday.half_hour_slots): if time_slot.start_datetime == event.startDate: break # presenters.day.TimeSlot bubble_containing_event = time_slot.bubbles[0] self.assertEqual(bubble_containing_event.length, 2) # 2 half hours # presenters.day.EventOnDayView painted_event = bubble_containing_event.event self.assertEqual(painted_event.title, "Meeting")
def test_paints_event_of_three_full_days(self): focus_at = datetime.datetime(2010, 2, 15) now_at = datetime.datetime.now() presenter = self._makeOne(focus_at, now_at, dummy_url_for) event = DummyCatalogEvent( title="Vacation", startDate=datetime.datetime(2010, 2, 15, 0, 0, 0), endDate=datetime.datetime(2010, 2, 18, 0, 0, 0)) presenter.paint_events([event]) # find days of Feb 15, 16, 17 week_of_feb_14 = presenter.week feb_15 = week_of_feb_14[1] # dummy event on feb 15 feb_16 = week_of_feb_14[2] # continues through feb 16 feb_17 = week_of_feb_14[3] # and through feb 17 # presenters.week.EventInUpperTray painted_event = feb_15.event_slots[0] self.assertEqual(painted_event.title, "Vacation") self.assertTrue(painted_event.bubbled) self.assertEqual(painted_event.rounding_class, "left") painted_event = feb_16.event_slots[0] self.assertEqual(painted_event.title, "Vacation") self.assertTrue(painted_event.bubbled) self.assertEqual(painted_event.rounding_class, "center") painted_event = feb_17.event_slots[0] self.assertEqual(painted_event.title, "Vacation") self.assertTrue(painted_event.bubbled) self.assertEqual(painted_event.rounding_class, "right")
def test_paints_event_of_three_days_with_partial_days_first_day(self): focus_at = datetime.datetime(2010, 2, 15) now_at = datetime.datetime.now() presenter = self._makeOne(focus_at, now_at, dummy_url_for) event = DummyCatalogEvent( title="Travel", startDate=datetime.datetime(2010, 2, 15, 13, 0, 0), endDate=datetime.datetime(2010, 2, 17, 16, 0, 0)) presenter.paint_events([event]) self.assertEqual(len(presenter.all_day_events), 0) # search for 1pm time slot (dummy event starts at 1pm) for time_slot in presenter.half_hour_slots: if time_slot.start_datetime == event.startDate: break # presenters.day.TimeSlot bubble_containing_event = time_slot.bubbles[0] self.assertEqual(bubble_containing_event.length, 22) # 22 half hours # presenters.day.EventOnDayView painted_event = bubble_containing_event.event self.assertEqual(painted_event.title, "Travel")
def test_paints_event_of_three_full_days(self): focus_at = datetime.datetime(2010, 2, 15) now_at = datetime.datetime.now() presenter = self._makeOne(focus_at, now_at, dummy_url_for) event = DummyCatalogEvent( title="Vacation", startDate=datetime.datetime(2010, 2, 15, 0, 0, 0), endDate =datetime.datetime(2010, 2, 18, 0, 0, 0) ) presenter.paint_events([event]) # presenters.list.Event painted_event = presenter.events[0] self.assertEqual(painted_event.title, event.title) # Vacation self.assertEqual(painted_event.first_line_day, event.startDate.strftime("%m/%d/%Y")) # Mon, Feb 15 self.assertEqual(painted_event.first_line_time, 'all-day') ends_at = event.endDate - datetime.timedelta(days=1) self.assertEqual(painted_event.second_line_day, '') # all day events: no second line. self.assertEqual(painted_event.second_line_time, '')
def test_paints_event_sameday_suppresses_label(self): focus_at = datetime.datetime(2010, 2, 15) now_at = datetime.datetime.now() presenter = self._makeOne(focus_at, now_at, dummy_url_for) event = DummyCatalogEvent( title="Vacation", startDate=datetime.datetime(2010, 2, 15, 0, 0, 0), endDate =datetime.datetime(2010, 2, 18, 0, 0, 0) ) import copy event2 = copy.copy(event) event2.prev_start_date = event.startDate presenter.paint_events([event, event2]) # presenters.list.Event painted_events = presenter.events self.assertEqual(len(painted_events), 2) for i, _e in enumerate(painted_events): if i == 0: # first one has the date self.assertEqual(_e.first_line_day, event.startDate.strftime("%m/%d/%Y")) # Mon, Feb 15 else: # Consequtive lines that have the same date, # have the day-label missing. self.assertEqual(_e.first_line_day, '') self.assertEqual(_e.first_line_time, 'all-day') self.assertEqual(_e.second_line_day, '') # all day events: no second line. self.assertEqual(painted_events[0].second_line_time, '')
def test_paints_event_of_three_days_with_partial_days(self): focus_at = datetime.datetime(2010, 2, 17) now_at = datetime.datetime.now() presenter = self._makeOne(focus_at, now_at, dummy_url_for) event = DummyCatalogEvent( title="Travel", startDate=datetime.datetime(2010, 2, 15, 13, 0, 0), endDate =datetime.datetime(2010, 2, 17, 16, 0, 0) ) presenter.paint_events([event]) # presenters.list.Event painted_event = presenter.events[0] self.assertEqual(painted_event.title, event.title) # Travel self.assertEqual(painted_event.first_line_day, event.startDate.strftime("%m/%d/%Y")) # Mon, Feb 15 starts = painted_event._format_time_of_day(event.startDate) desc = "%s - " % (starts) self.assertEqual(painted_event.first_line_time, desc) # 1pm - self.assertEqual(painted_event.second_line_day, '') self.assertEqual(painted_event.second_line_time, '')
def test_paints_event_of_three_days_with_partial_days_on_ends(self): focus_at = datetime.datetime(2010, 2, 15) now_at = datetime.datetime.now() presenter = self._makeOne(focus_at, now_at, dummy_url_for) event = DummyCatalogEvent( title="Travel", startDate=datetime.datetime(2010, 2, 15, 13, 0, 0), endDate =datetime.datetime(2010, 2, 17, 16, 0, 0) ) presenter.paint_events([event]) # find days of Feb 15, 16, 17 week_of_feb_14 = presenter.weeks[2] feb_15 = week_of_feb_14[1] # dummy event on feb 15 @ 1pm feb_16 = week_of_feb_14[2] # continues through feb 16 feb_17 = week_of_feb_14[3] # and until feb 17 @ 4pm # presenters.month.EventOnMonthView painted_event = feb_15.event_slots[0] self.assertEqual(painted_event.title, "Travel") self.assertTrue(painted_event.bubbled) self.assertEqual(painted_event.rounding_class, "left") painted_event = feb_16.event_slots[0] self.assertEqual(painted_event.title, "Travel") self.assertTrue(painted_event.bubbled) self.assertEqual(painted_event.rounding_class, "center") painted_event = feb_17.event_slots[0] self.assertEqual(painted_event.title, "Travel") self.assertTrue(painted_event.bubbled) self.assertEqual(painted_event.rounding_class, "right")
def test_paint_events_separates_all_day_events_from_others(self): focus_at = datetime.datetime(2009, 9, 14) now_at = datetime.datetime(2009, 8, 26) presenter = self._makeOne(focus_at, now_at, dummy_url_for) all_day_catalog_event = DummyCatalogEvent( startDate=datetime.datetime(2009, 9, 14, 0, 0, 0), endDate=datetime.datetime(2009, 9, 15, 0, 0, 0), title='all-day-event') other_catalog_event = DummyCatalogEvent( startDate=datetime.datetime(2009, 9, 14, 1, 0, 0), endDate=datetime.datetime(2009, 9, 14, 2, 0, 0), title='other-event') presenter.paint_events([all_day_catalog_event, other_catalog_event]) self.assertEqual(len(presenter.all_day_events), 1) self.assertEqual(presenter.all_day_events[0].title, 'all-day-event')
def test__find_contiguous_slot_across_days_may_find_None(self): presenter = self._makePresenter() bubble_painter = self._makeOne(presenter) days = [DummyDayWithEvents]*2 days[0].event_slots = [DummyCatalogEvent()]*5 index = bubble_painter._find_contiguous_slot_across_days(days) self.assert_(index is None)
def test_should_paint_event_no_for_event_less_than_whole_day(self): presenter = self._makePresenter() bubble_painter = self._makeOne(presenter) event = DummyCatalogEvent( startDate=datetime.datetime(2009, 9, 14, 1, 0, 0), endDate =datetime.datetime(2009, 9, 14, 2, 0, 0) ) self.assertFalse(bubble_painter.should_paint_event(event))
def test_should_paint_event_yes_for_spans_of_multiple_days(self): presenter = self._makePresenter() bubble_painter = self._makeOne(presenter) event = DummyCatalogEvent( startDate=datetime.datetime(2009, 9, 14, 0, 0, 0), endDate =datetime.datetime(2009, 9, 16, 0, 0, 0) ) self.assertTrue(bubble_painter.should_paint_event(event))
def test_should_paint_event_yes_for_whole_single_day(self): presenter = self._makePresenter() bubble_painter = self._makeOne(presenter) event = DummyCatalogEvent( startDate=datetime.datetime(2009, 9, 14, 0, 0, 0), endDate =datetime.datetime(2009, 9, 14, 23, 59, 59) ) self.assertTrue(bubble_painter.should_paint_event(event))
def test_map_catalog_events_to_slot_stacks_events_in_a_slot(self): focus_at = datetime.datetime(2009, 8, 1) now_at = datetime.datetime(2009, 8, 26) presenter = self._makeOne(focus_at, now_at, dummy_url_for) event_1 = DummyCatalogEvent( startDate=datetime.datetime(2009, 8, 1, 0, 0, 0), endDate=datetime.datetime(2009, 8, 1, 0, 35, 0)) event_2 = DummyCatalogEvent( startDate=datetime.datetime(2009, 8, 1, 0, 0, 0), endDate=datetime.datetime(2009, 8, 1, 0, 35, 0)) events = [event_1, event_2] mapping = presenter._map_catalog_events_to_slot_indices(events) self.assert_(event_1 in mapping[0]) self.assert_(event_2 in mapping[0]) self.assert_(event_1 in mapping[1]) self.assert_(event_2 in mapping[1]) self.assertEqual(mapping[2], [])
def test_find_starting_slot_index_None_if_event_ends_before_day(self): focus_at = datetime.datetime(2009, 8, 1) now_at = datetime.datetime(2009, 8, 26) presenter = self._makeOne(focus_at, now_at, dummy_url_for) event = DummyCatalogEvent( startDate=datetime.datetime(2009, 7, 25, 0, 0, 0), endDate=datetime.datetime(2009, 7, 25, 10, 0, 0)) index = presenter._find_first_slot_index_for_event(event) self.assert_(index is None)
def test_find_starting_slot_index_coeres_start_date_too_early(self): focus_at = datetime.datetime(2009, 8, 1) now_at = datetime.datetime(2009, 8, 26) presenter = self._makeOne(focus_at, now_at, dummy_url_for) event = DummyCatalogEvent( startDate=datetime.datetime(2009, 7, 25, 0, 0, 0), endDate=datetime.datetime(2009, 8, 1, 10, 0, 0)) index = presenter._find_first_slot_index_for_event(event) self.assertEqual(index, 0)
def test_find_starting_slot_index_finds_last_slot(self): focus_at = datetime.datetime(2009, 8, 1) now_at = datetime.datetime(2009, 8, 26) presenter = self._makeOne(focus_at, now_at, dummy_url_for) event = DummyCatalogEvent( startDate=datetime.datetime(2009, 8, 1, 23, 30, 0), endDate=datetime.datetime(2009, 8, 1, 23, 31, 0)) index = presenter._find_first_slot_index_for_event(event) self.assertEqual(index, 47)
def test_find_starting_slot_index_does_not_exceed_event_start_time(self): focus_at = datetime.datetime(2009, 8, 1) now_at = datetime.datetime(2009, 8, 26) presenter = self._makeOne(focus_at, now_at, dummy_url_for) event = DummyCatalogEvent( startDate=datetime.datetime(2009, 8, 1, 0, 57, 0), endDate=datetime.datetime(2009, 8, 1, 0, 58, 0)) index = presenter._find_first_slot_index_for_event(event) self.assertEqual(index, 1)
def test_find_starting_slot_index_aligns_down_to_nearest_half_hour(self): focus_at = datetime.datetime(2009, 8, 1) now_at = datetime.datetime(2009, 8, 26) presenter = self._makeOne(focus_at, now_at, dummy_url_for) event = DummyCatalogEvent( startDate=datetime.datetime(2009, 8, 1, 1, 13, 0), endDate=datetime.datetime(2009, 8, 1, 1, 14, 0)) index = presenter._find_first_slot_index_for_event(event) self.assertEqual(index, 2)
def test_paints_event_of_three_full_days_stays_within_bounds(self): focus_at = datetime.datetime(2010, 2, 18) # out of bounds now_at = datetime.datetime.now() presenter = self._makeOne(focus_at, now_at, dummy_url_for) event = DummyCatalogEvent( title="Vacation", startDate=datetime.datetime(2010, 2, 15, 0, 0, 0), endDate=datetime.datetime(2010, 2, 18, 0, 0, 0)) presenter.paint_events([event]) self.assertEqual(len(presenter.all_day_events), 0)
def test_map_catalog_events_maps_into_last_slot(self): focus_at = datetime.datetime(2009, 8, 1) now_at = datetime.datetime(2009, 8, 26) presenter = self._makeOne(focus_at, now_at, dummy_url_for) event = DummyCatalogEvent( startDate=datetime.datetime(2009, 8, 1, 23, 0, 0), endDate=datetime.datetime(2009, 8, 1, 23, 45, 0)) events = [event] mapping = presenter._map_catalog_events_to_slot_indices(events) self.assertEqual(mapping[46], [event]) self.assertEqual(mapping[47], [event])
def test_paints_event_of_three_days_with_partial_days_second_day(self): focus_at = datetime.datetime(2010, 2, 16) now_at = datetime.datetime.now() presenter = self._makeOne(focus_at, now_at, dummy_url_for) event = DummyCatalogEvent( title="Travel", startDate=datetime.datetime(2010, 2, 15, 13, 0, 0), endDate=datetime.datetime(2010, 2, 17, 16, 0, 0)) presenter.paint_events([event]) # presenters.day.EventOnDayView painted_event = presenter.all_day_events[0] self.assertEqual(painted_event.title, "Travel")
def test_paint_events_wraps_all_day_event_and_assigns_show_url(self): focus_at = datetime.datetime(2009, 9, 14) now_at = datetime.datetime(2009, 8, 26) presenter = self._makeOne(focus_at, now_at, dummy_url_for) all_day_catalog_event = DummyCatalogEvent( startDate=datetime.datetime(2009, 9, 14, 0, 0, 0), endDate=datetime.datetime(2009, 9, 15, 0, 0, 0), title='all-day-event') presenter.paint_events([all_day_catalog_event]) self.assertEqual(len(presenter.all_day_events), 1) self.assert_(presenter.all_day_events[0].show_url.startswith('http'))
def test_painting_an_all_day_event_does_not_bleed_into_next_day(self): focus_at = datetime.datetime(2010, 2, 15) # next day now_at = datetime.datetime.now() presenter = self._makeOne(focus_at, now_at, dummy_url_for) all_day_catalog_event = DummyCatalogEvent( startDate=datetime.datetime(2009, 9, 14, 0, 0, 0), endDate=datetime.datetime(2009, 9, 15, 0, 0, 0), title='all-day-event') presenter.paint_events([all_day_catalog_event]) self.assertEqual(len(presenter.all_day_events), 0) self.assertEqual(len(presenter.half_hour_slots[0].bubbles), 0)
def test_paints_event_of_three_full_days_on_its_last_day(self): focus_at = datetime.datetime(2010, 2, 17) now_at = datetime.datetime.now() presenter = self._makeOne(focus_at, now_at, dummy_url_for) event = DummyCatalogEvent( title="Vacation", startDate=datetime.datetime(2010, 2, 15, 0, 0, 0), endDate=datetime.datetime(2010, 2, 18, 0, 0, 0)) presenter.paint_events([event]) # presenters.day.EventOnDayView painted_event = presenter.all_day_events[0] self.assertEqual(painted_event.title, "Vacation")
def test_painting_an_event_out_of_range_ignores_the_event(self): focus_at = datetime.datetime(2008, 1, 3) now_at = datetime.datetime.now() presenter = self._makeOne(focus_at, now_at, dummy_url_for) out_of_range_event = DummyCatalogEvent( title="Out of Range of Calendar", startDate=datetime.datetime(2010, 1, 5, 11, 15, 0), endDate=datetime.datetime(2010, 1, 6, 12, 15, 0)) presenter.paint_events([out_of_range_event]) for day in presenter.week: for slot in day.event_slots: self.assert_(slot is None)