def test_getPeriodsForDay_otherTZ(self): from schooltool.timetable.browser.cal import DailyTimetableCalendarRowsView view = DailyTimetableCalendarRowsView(None, TestRequest()) # Auckland is 12h ahead of London view.getPersonTimezone = lambda: timezone('Pacific/Auckland') uk = timezone('Europe/London') delta = timedelta(minutes=115) td = timedelta ukdt = lambda *args: uk.localize(datetime(*args)) self.assertEquals(view.getPeriodsForDay(date(2004, 10, 14)), [('B', ukdt(2004, 10, 13, 12, 0), td(minutes=55)), ('C', ukdt(2004, 10, 13, 13, 0), delta), ('D', ukdt(2004, 10, 13, 15, 0), delta), ('A', ukdt(2004, 10, 14, 9, 0), delta), ('B', ukdt(2004, 10, 14, 11, 0), td(minutes=60))]) # However, if there is no time period, we return [] self.assertEquals(view.getPeriodsForDay(date(2005, 10, 14)), []) # If there is no timetable schema, we return [] ITimetableSchemaContainer(self.app).default_id = None self.assertEquals(view.getPeriodsForDay(date(2004, 10, 14)), [])
def test_getPeriodsForLastDayOfTerm(self): from schooltool.timetable.browser.cal import DailyTimetableCalendarRowsView view = DailyTimetableCalendarRowsView(None, TestRequest()) # We need the start date and the end date different view.getPersonTimezone = lambda: timezone('America/Chicago') self.assertEquals(view.getPeriodsForDay(date(2005, 6, 1)), [])
def test_calendarRows(self): from schooltool.timetable.browser.cal import DailyTimetableCalendarRowsView from schooltool.app.security import Principal request = TestRequest() principal = Principal('person', 'Some person', person=self.person) request.setPrincipal(principal) view = DailyTimetableCalendarRowsView(ISchoolToolCalendar(self.person), request) result = list(view.calendarRows(date(2004, 11, 5), 8, 19, events=[])) expected = [("1", dt('08:00'), timedelta(hours=1)), ("9:00", dt('09:00'), timedelta(hours=1)), ("10:00", dt('10:00'), timedelta(minutes=15)), ("2", dt('10:15'), timedelta(hours=1)), ("11:15", dt('11:15'), timedelta(minutes=15)), ("3", dt('11:30'), timedelta(hours=1)), ("4", dt('12:30'), timedelta(hours=2)), ("14:30", dt('14:30'), timedelta(minutes=30)), ("15:00", dt('15:00'), timedelta(hours=1)), ("16:00", dt('16:00'), timedelta(hours=1)), ("17:00", dt('17:00'), timedelta(hours=1)), ("18:00", dt('18:00'), timedelta(hours=1))] self.assertEquals(result, expected)
def test_getPersonTimezone(self): from schooltool.timetable.browser.cal import DailyTimetableCalendarRowsView request = TestRequest() view = DailyTimetableCalendarRowsView(ISchoolToolCalendar(self.person), request) # when there is no principal - the default timezone should be # returned self.assertEquals(view.getPersonTimezone(), timezone('UTC'))
def test_calendarRows_default(self): from schooltool.timetable.browser.cal import DailyTimetableCalendarRowsView request = TestRequest() # do not set the principal view = DailyTimetableCalendarRowsView(ISchoolToolCalendar(self.person), request) result = list(view.calendarRows(date(2004, 11, 5), 8, 19, events=[])) # the default is not to show periods expected = [("%d:00" % i, dt('%d:00' % i), timedelta(hours=1)) for i in range(8, 19)] self.assertEquals(result, expected)
def test_getPeriodsForDayBetweenTerms(self): from schooltool.term.term import Term term3 = Term('Sample', date(2005, 6, 2), date(2005, 8, 1)) ITermContainer(self.app)['2005-autumn'] = term3 term3.schooldays = [('A', time(9, 0), timedelta(minutes=115))] self.term2.schooldays = [('B', time(10, 0), timedelta(minutes=115))] from schooltool.timetable.browser.cal import DailyTimetableCalendarRowsView view = DailyTimetableCalendarRowsView(None, TestRequest()) # We need the start date and the end date different view.getPersonTimezone = lambda: timezone('America/Chicago') self.assertEquals(len(view.getPeriodsForDay(date(2005, 6, 1))), 1)
def test_getPeriodsForDayBetweenTerms(self): from schooltool.term.term import Term term3 = Term('Sample', date(2005, 6, 2), date(2005, 8, 1)) ITermContainer(self.app)['2005-autumn'] = term3 term3.schooldays = [('A', time(9,0), timedelta(minutes=115))] self.term2.schooldays = [('B', time(10,0), timedelta(minutes=115))] from schooltool.timetable.browser.cal import DailyTimetableCalendarRowsView view = DailyTimetableCalendarRowsView(None, TestRequest()) # We need the start date and the end date different view.getPersonTimezone = lambda: timezone('America/Chicago') self.assertEquals(len(view.getPeriodsForDay(date(2005, 6, 1))), 1)
def test_calendarRows_no_periods(self): from schooltool.timetable.browser.cal import DailyTimetableCalendarRowsView from schooltool.person.preference import getPersonPreferences from schooltool.app.security import Principal prefs = getPersonPreferences(self.person) prefs.cal_periods = False # do not show periods request = TestRequest() principal = Principal('person', 'Some person', person=self.person) request.setPrincipal(principal) view = DailyTimetableCalendarRowsView(ISchoolToolCalendar(self.person), request) result = list(view.calendarRows(date(2004, 11, 5), 8, 19, events=[])) expected = [("%d:00" % i, dt('%d:00' % i), timedelta(hours=1)) for i in range(8, 19)] self.assertEquals(result, expected)
def test_getPeriods(self): from schooltool.timetable.browser.cal import DailyTimetableCalendarRowsView request = TestRequest() view = DailyTimetableCalendarRowsView(ISchoolToolCalendar(self.person), request) # if no user has logged we should get an empty list self.assertEquals(view.getPeriods(date(2005, 1, 1)), []) # same if our user doesn't want to see periods in his calendar request.setPrincipal(self.person) IPersonPreferences(self.person).cal_periods = False self.assertEquals(view.getPeriods(date(2005, 1, 1)), []) # if currently logged in user wants to see periods, the # parameter is passed to getPeriodsForDay method. view.getPeriodsForDay = lambda cursor: ("Yep", cursor) IPersonPreferences(self.person).cal_periods = True self.assertEquals(view.getPeriods(date(2005, 1, 1)), ("Yep", date(2005, 1, 1)))
def test_calendarRows_otherTZ(self): from schooltool.timetable.browser.cal import DailyTimetableCalendarRowsView from schooltool.app.security import Principal request = TestRequest() principal = Principal('person', 'Some person', person=self.person) request.setPrincipal(principal) view = DailyTimetableCalendarRowsView(ISchoolToolCalendar(self.person), request) km = timezone('Asia/Kamchatka') view.getPersonTimezone = lambda: km result = list(view.calendarRows(date(2004, 11, 5), 8, 19, events=[])) kmdt = lambda arg: km.localize(parse_datetime('2004-11-05 %s:00' % arg) ) expected = [('8:00', kmdt('8:00'), timedelta(0, 3600)), ('9:00', kmdt('9:00'), timedelta(0, 3600)), ('10:00', kmdt('10:00'), timedelta(0, 3600)), ('11:00', kmdt('11:00'), timedelta(0, 3600)), ('12:00', kmdt('12:00'), timedelta(0, 3600)), ('13:00', kmdt('13:00'), timedelta(0, 3600)), ('14:00', kmdt('14:00'), timedelta(0, 3600)), ('15:00', kmdt('15:00'), timedelta(0, 3600)), ('16:00', kmdt('16:00'), timedelta(0, 3600)), ('17:00', kmdt('17:00'), timedelta(0, 3600)), ('18:00', kmdt('18:00'), timedelta(0, 3600)), ('19:00', kmdt('19:00'), timedelta(0, 3600)), ('1', kmdt("20:00"), timedelta(0, 3600)), ('21:00', kmdt("21:00"), timedelta(0, 4500)), ('2', kmdt("22:15"), timedelta(0, 3600)), ('23:15', kmdt("23:15"), timedelta(0, 900)), ('3', kmdt("23:30"), timedelta(0, 1800))] self.assertEquals(result, expected)
def test_calendarRows_otherTZ(self): from schooltool.timetable.browser.cal import DailyTimetableCalendarRowsView from schooltool.app.security import Principal request = TestRequest() principal = Principal('person', 'Some person', person=self.person) request.setPrincipal(principal) view = DailyTimetableCalendarRowsView(ISchoolToolCalendar(self.person), request) km = timezone('Asia/Kamchatka') view.getPersonTimezone = lambda: km result = list(view.calendarRows(date(2004, 11, 5), 8, 19, events=[])) kmdt = lambda arg: km.localize(parse_datetime('2004-11-05 %s:00' % arg)) expected = [('8:00', kmdt('8:00'), timedelta(0, 3600)), ('9:00', kmdt('9:00'), timedelta(0, 3600)), ('10:00', kmdt('10:00'),timedelta(0, 3600)), ('11:00', kmdt('11:00'),timedelta(0, 3600)), ('12:00', kmdt('12:00'),timedelta(0, 3600)), ('13:00', kmdt('13:00'),timedelta(0, 3600)), ('14:00', kmdt('14:00'),timedelta(0, 3600)), ('15:00', kmdt('15:00'),timedelta(0, 3600)), ('16:00', kmdt('16:00'),timedelta(0, 3600)), ('17:00', kmdt('17:00'),timedelta(0, 3600)), ('18:00', kmdt('18:00'),timedelta(0, 3600)), ('19:00', kmdt('19:00'),timedelta(0, 3600)), ('1', kmdt("20:00"), timedelta(0, 3600)), ('21:00', kmdt("21:00"), timedelta(0, 4500)), ('2', kmdt("22:15"), timedelta(0, 3600)), ('23:15', kmdt("23:15"), timedelta(0, 900)), ('3', kmdt("23:30"), timedelta(0, 1800))] self.assertEquals(result, expected)
def test_getPeriodsForDay_sameTZ(self): from schooltool.timetable.browser.cal import DailyTimetableCalendarRowsView view = DailyTimetableCalendarRowsView(None, TestRequest()) uk = timezone('Europe/London') view.getPersonTimezone = lambda: uk delta = timedelta(minutes=115) ukdt = lambda *args: uk.localize(datetime(*args)) self.assertEquals(view.getPeriodsForDay(date(2004, 10, 14)), [('A', ukdt(2004, 10, 14, 9, 0), delta), ('B', ukdt(2004, 10, 14, 11, 0), delta), ('C', ukdt(2004, 10, 14, 13, 0), delta), ('D', ukdt(2004, 10, 14, 15, 0), delta)]) # However, if there is no time period, we return [] self.assertEquals(view.getPeriodsForDay(date(2005, 10, 14)), []) # If there is no timetable schema, we return [] ITimetableSchemaContainer(self.app).default_id = None self.assertEquals(view.getPeriodsForDay(date(2004, 10, 14)), [])