def test_flextime(self): day_1 = day.Day("2014-09-01") nt.assert_equal(day_1.calculate_flextime(), datetime.timedelta()) day_1.report_start_time("8:00") day_1.report_lunch_duration("0:45") day_1.report_end_time("17:00") nt.assert_equal(day_1.calculate_flextime(), datetime.timedelta(minutes=15)) day_2 = day.Day("2014-09-02") day_2.report_start_time("9:00") day_2.report_lunch_duration("0:30") day_2.report_end_time("17:00") nt.assert_equal(day_2.calculate_flextime(), datetime.timedelta(minutes=-30)) day_3 = day.Day("2014-09-03") day_3.set_type(day.DayType.sick_day) nt.assert_equal(day_3.calculate_flextime(), datetime.timedelta()) day_3.set_type(day.DayType.vacation) nt.assert_equal(day_3.calculate_flextime(), datetime.timedelta()) day_3.set_type(day.DayType.weekend) nt.assert_equal(day_3.calculate_flextime(), datetime.timedelta()) day_3.set_type(day.DayType.holiday) nt.assert_equal(day_3.calculate_flextime(), datetime.timedelta()) day_3.set_type(day.DayType.working_day) day_3.report_start_time("8:00") day_3.report_lunch_duration("1:01") day_3.report_end_time("17:00") nt.assert_equal(day_3.calculate_flextime(), datetime.timedelta(minutes=-1))
def test_create_week_with_days_from_different_weeks_should_raise(self): day_1 = day.Day("2015-01-01") day_2 = day.Day("2015-07-01") nt.assert_raises_regexp( errors.BadDateError, "All added days doesn't belong to the same week\.", week.Week.from_days, day_1, day_2)
def test_create_week_from_two_days(self): day_1 = day.Day("2015-02-23") day_2 = day.Day("2015-02-24") week_9 = week.Week.from_days(day_1, day_2) nt.assert_equal(week_9.number, 9) nt.assert_equal(week_9.year, 2015) nt.assert_is(week_9.monday, day_1) nt.assert_is(week_9.tuesday, day_2) nt.assert_equal(week_9.wednesday.date, date(2015, 2, 25)) nt.assert_equal(week_9.thursday.date, date(2015, 2, 26)) nt.assert_equal(week_9.friday.date, date(2015, 2, 27)) nt.assert_equal(week_9.saturday.date, date(2015, 2, 28)) nt.assert_equal(week_9.sunday.date, date(2015, 3, 1))
def test_worked_hours(self): day_1 = day.Day("2014-09-01") nt.assert_equal(day_1.worked_hours(), datetime.timedelta()) day_1.report_start_time("8:00") day_1.report_lunch_duration("1:00") day_1.report_end_time("17:00") nt.assert_equal(day_1.worked_hours(), datetime.timedelta(hours=8)) day_2 = day.Day("2014-09-02") day_2.report_start_time("8:10") day_2.report_lunch_duration("0:30") day_2.report_end_time("16:50") nt.assert_equal(day_2.worked_hours(), datetime.timedelta(hours=8, minutes=10))
def test_create_week_with_duplicate_days_should_raise(self): any_day = day.Day("2015-03-15") nt.assert_raises_regexp( errors.BadDateError, "The same date \(2015-03-15\) was added multiple times to week\.", week.Week.from_days, any_day, any_day) another_day = day.Day("2015-03-16") same_day = day.Day("2015-03-16") nt.assert_raises_regexp( errors.BadDateError, "The same date \(2015-03-16\) was added multiple times to week\.", week.Week.from_days, another_day, same_day)
def test_worked_hours_custom_end_time(self): day_1 = day.Day("2014-09-01") nt.assert_raises_regexp( errors.ChronoError, "Custom end times can only be tried on days in progress.", day_1.worked_hours, end_time=datetime.datetime(2014, 9, 1, hour=17)) day_1.report_start_time("8:00") nt.assert_equal( day_1.worked_hours( end_time=datetime.datetime(2014, 9, 1, hour=16, minute=30)), datetime.timedelta(hours=8, minutes=30)) day_1.report_lunch_duration("0:30") nt.assert_equal( day_1.worked_hours( end_time=datetime.datetime(2014, 9, 1, hour=16, minute=30)), datetime.timedelta(hours=8)) day_1.report_deviation("0:45") nt.assert_equal( day_1.worked_hours( end_time=datetime.datetime(2014, 9, 1, hour=16, minute=30)), datetime.timedelta(hours=7, minutes=15)) day_1.report_end_time("17:00") nt.assert_raises_regexp( errors.ChronoError, "Custom end times can only be tried on days in progress.", day_1.worked_hours, end_time=datetime.datetime(2014, 9, 1, hour=16, minute=30))
def test_vacation_list_string(self): any_vacation_day = day.Day("2015-02-23") any_vacation_day.set_type(day.DayType.vacation) nt.assert_equal(any_vacation_day.list_str(), "Mon 23. Vacation") any_vacation_day.comment = "Leaving on a jet plane." nt.assert_equal(any_vacation_day.list_str(), "Mon 23. Vacation Leaving on a jet plane.")
def test_sick_day_list_string(self): any_sick_day = day.Day("2015-02-23") any_sick_day.set_type(day.DayType.sick_day) nt.assert_equal(any_sick_day.list_str(), "Mon 23. Sickday") any_sick_day.comment = "Poor me." nt.assert_equal(any_sick_day.list_str(), "Mon 23. Sickday Poor me.")
def test_day_type(self): day_1 = day.Day("2014-09-01") day_2 = day.Day("2014-09-06") nt.assert_equal(day_1.day_type, day.DayType.working_day) nt.assert_equal(day_1.expected_hours(), datetime.timedelta(hours=8)) nt.assert_equal(day_2.day_type, day.DayType.weekend) nt.assert_equal(day_2.expected_hours(), datetime.timedelta(hours=0)) day_1.set_type(day.DayType.sick_day) nt.assert_equal(day_1.expected_hours(), datetime.timedelta(hours=0)) day_1.set_type(day.DayType.vacation) nt.assert_equal(day_1.expected_hours(), datetime.timedelta(hours=0)) day_1.set_type(day.DayType.weekend) nt.assert_equal(day_1.expected_hours(), datetime.timedelta(hours=0)) day_1.set_type(day.DayType.holiday) nt.assert_equal(day_1.expected_hours(), datetime.timedelta(hours=0)) day_1.set_type(day.DayType.working_day) nt.assert_equal(day_1.expected_hours(), datetime.timedelta(hours=8))
def test_holiday_list_string(self): any_holiday = day.Day("2014-12-31") any_holiday.set_type(day.DayType.holiday) any_holiday.info = "New Years Eve" nt.assert_equal(any_holiday.list_str(), "Wed 31. New Years Eve") any_holiday.comment = "Party." nt.assert_equal(any_holiday.list_str(), "Wed 31. New Years Eve. Party.")
def test_report_deviation(self): day_1 = day.Day("2014-09-01") nt.assert_equal(day_1.deviation, datetime.timedelta()) day_1.report("8:00", "1:00", "17:00") day_1.report_deviation("1:10") nt.assert_equal(day_1.deviation, datetime.timedelta(hours=1, minutes=10)) nt.assert_equal(day_1.worked_hours(), datetime.timedelta(hours=6, minutes=50)) day_2 = day.Day("2014-10-01") nt.assert_equal(day_2.deviation, datetime.timedelta()) day_2.report("8:00", "1:00", "17:00") day_2.report_deviation("0") nt.assert_equal(day_2.deviation, datetime.timedelta()) nt.assert_equal(day_2.worked_hours(), datetime.timedelta(hours=8))
def test_get_flextime_for_week_with_five_workdays(self): day_1 = day.Day("2015-02-16") day_1.report("8:00", "1:00", "17:01") day_2 = day.Day("2015-02-17") day_2.report("8:00", "1:00", "16:54") day_3 = day.Day("2015-02-18") day_3.report("8:00", "1:00", "18:00") day_4 = day.Day("2015-02-19") day_4.report("8:00", "1:00", "16:00") day_5 = day.Day("2015-02-20") day_5.report("8:00", "1:00", "16:55") week_1 = week.Week.from_days(day_1, day_2, day_3, day_4, day_5) nt.assert_equal(week_1.calculate_flextime(), timedelta(minutes=-10))
def test_report(self): day_1 = day.Day("2014-09-01") nt.assert_false(day_1.complete()) day_1.report("8:00", "1:00", "17:00") nt.assert_true(day_1.complete()) nt.assert_equal(day_1.start_time, datetime.datetime(year=2014, month=9, day=1, hour=8)) nt.assert_equal(day_1.lunch_duration, datetime.timedelta(hours=1)) nt.assert_equal(day_1.end_time, datetime.datetime(year=2014, month=9, day=1, hour=17)) day_2 = day.Day("2014-09-02") day_2.report("8:00", "1:00", "16:30") nt.assert_equal( day_2.end_time, datetime.datetime(year=2014, month=9, day=2, hour=16, minute=30))
def test_day_optional_info_period(self): day_1 = day.Day("2014-09-01") day_1.info = "A day in life" nt.assert_equal(day_1.get_info(), "A day in life") day_1.comment = "I read the news today, Oh boy" nt.assert_equal(day_1.get_info(), "A day in life. I read the news today, Oh boy.") nt.assert_equal(day_1.info, "A day in life") nt.assert_equal(day_1.comment, "I read the news today, Oh boy.")
def test_create_week_from_one_day(self): day_1 = day.Day("2015-02-16") week_8 = week.Week.from_days(day_1) nt.assert_equal(week_8.number, 8) nt.assert_equal(week_8.year, 2015) nt.assert_is(week_8.monday, day_1) nt.assert_equal(week_8.tuesday.date, date(2015, 2, 17)) nt.assert_equal(week_8.wednesday.date, date(2015, 2, 18)) nt.assert_equal(week_8.thursday.date, date(2015, 2, 19)) nt.assert_equal(week_8.friday.date, date(2015, 2, 20)) nt.assert_equal(week_8.saturday.date, date(2015, 2, 21)) nt.assert_equal(week_8.sunday.date, date(2015, 2, 22))
def __init__(self, year: int, week_number: int): self._week = isoweek.Week(year, week_number) self.number = week_number self.year = year self.monday = day.Day(self._week.monday().isoformat()) self.tuesday = day.Day(self._week.tuesday().isoformat()) self.wednesday = day.Day(self._week.wednesday().isoformat()) self.thursday = day.Day(self._week.thursday().isoformat()) self.friday = day.Day(self._week.friday().isoformat()) self.saturday = day.Day(self._week.saturday().isoformat()) self.sunday = day.Day(self._week.sunday().isoformat())
def add_day(self, date_string: str) -> day.Day: new_day = day.Day(date_string) if new_day.date.year != self.year: raise errors.ReportError( "New date string didn't match year. {} doesn't include {}.". format(self.year, date_string)) if self.next_workday()[:7] == self.next_month(): new_month = month.Month(self.next_month()) for date, name in self.holidays[self.next_month()].items(): new_month.add_holiday(date, name) self.months.append(new_month) day_1 = self.months[-1].add_day(date_string) return day_1
def test_day_messy_info(self): day_1 = day.Day("2014-09-01") day_1.info = " A day in life... " day_1.comment = " I read the news today, oh boy " nt.assert_equal(day_1.get_info(), "A day in life... I read the news today, oh boy.") day_2 = day.Day("2014-09-01") day_2.info = "How many roads must a man walk down?\n" day_2.comment = """ The answer my friend, is blowing in the wind. The answer is blowing in the wind""" nt.assert_equal( day_2.get_info(), "How many roads must a man walk down? The answer my friend, " "is blowing in the wind. The answer is blowing in the wind.") nt.assert_equal(day_2.info, "How many roads must a man walk down?") nt.assert_equal(day_2.comment, "The answer my friend, is blowing in the wind. " "The answer is blowing in the wind.")
def test_report_start_time(self): day_1 = day.Day("2014-09-01") nt.assert_equal(day_1.start_time, None) day_1.report_start_time("8:00") nt.assert_equal(day_1.start_time, datetime.datetime(year=2014, month=9, day=1, hour=8)) day_2 = day.Day("2014-09-02") day_2.report_start_time("8:30") nt.assert_equal( day_2.start_time, datetime.datetime(year=2014, month=9, day=2, hour=8, minute=30)) nt.assert_raises_regexp( errors.ReportError, "^Date 2014-09-01 allready has a start time.", day_1.report_start_time, "8.00") day_3 = day.Day("2014-09-03") nt.assert_raises_regexp( errors.BadTimeError, "^Bad start time: \"8\".", day_3.report_start_time, "8") nt.assert_raises_regexp( errors.BadTimeError, "^Bad start time: \"8.30\".", day_3.report_start_time, "8.30") nt.assert_raises_regexp( errors.BadTimeError, "^Bad start time: \"8:10:14\".", day_3.report_start_time, "8:10:14")
def test_report_lunch(self): day_1 = day.Day("2014-09-01") nt.assert_equal(day_1.lunch_duration, None) nt.assert_raises_regexp( errors.ReportError, "^Date 2014-09-01 must have a start time before a lunch duration " "can be reported.", day_1.report_lunch_duration, "1:00") day_1.report_start_time("8:00") day_1.report_lunch_duration("1:00") nt.assert_equal(day_1.lunch_duration, datetime.timedelta(hours=1)) day_2 = day.Day("2014-09-02") day_2.report_start_time("8:10") day_2.report_lunch_duration("0:45") nt.assert_equal(day_2.lunch_duration, datetime.timedelta(minutes=45)) nt.assert_raises_regexp( errors.ReportError, "^Date 2014-09-01 allready has a lunch duration.", day_1.report_lunch_duration, "1:00")
def test_workday_list_string(self): any_workday = day.Day("2015-02-23") nt.assert_equal(any_workday.list_str(), "Mon 23.") any_workday.report_start_time("8:00") nt.assert_equal(any_workday.list_str(), "Mon 23. 08:00") any_workday.report_lunch_duration("1:00") nt.assert_equal(any_workday.list_str(), "Mon 23. 08:00 1:00") any_workday.report_end_time("17:00") nt.assert_equal(any_workday.list_str(), "Mon 23. 08:00 1:00 17:00 0:00") any_workday.report_deviation("0:30") nt.assert_equal(any_workday.list_str(), "Mon 23. 08:00 1:00 17:00 0:30 -0:30") any_workday.comment = "Any day." nt.assert_equal(any_workday.list_str(), "Mon 23. 08:00 1:00 17:00 0:30 -0:30 Any day.")
def test_bad_end_time(self): day_1 = day.Day("2014-09-01") day_1.report_start_time("8:00") day_1.report_lunch_duration("1:00") nt.assert_raises_regexp( TypeError, "^Given end time must be a string.", day_1.report_end_time, datetime.time(hour=17)) nt.assert_raises_regexp( errors.BadTimeError, "^Bad end time: \"24:00\"$", day_1.report_end_time, "24:00") nt.assert_raises_regexp( errors.BadTimeError, "^Bad end time: \"17:00:00\"$", day_1.report_end_time, "17:00:00")
def test_report_end_time(self): day_1 = day.Day("2014-09-01") nt.assert_equal(day_1.end_time, None) nt.assert_raises_regexp( errors.ReportError, "^Date 2014-09-01 must have a start time before an end time can " "be reported.", day_1.report_end_time, "17:00") day_1.report_start_time("8:00") nt.assert_raises_regexp( errors.ReportError, "^Date 2014-09-01 must have a lunch duration before an end time " "can be reported.", day_1.report_end_time, "17:00") day_1.report_lunch_duration("1:00") day_1.report_end_time("17:00") nt.assert_equal(day_1.end_time, datetime.datetime(year=2014, month=9, day=1, hour=17))
def test_create_week_from_seven_days(self): day_1 = day.Day("2015-03-02") day_2 = day.Day("2015-03-03") day_3 = day.Day("2015-03-04") day_4 = day.Day("2015-03-05") day_5 = day.Day("2015-03-06") day_6 = day.Day("2015-03-07") day_7 = day.Day("2015-03-08") week_10 = week.Week.from_days(day_1, day_2, day_3, day_4, day_5, day_6, day_7) nt.assert_equal(week_10.number, 10) nt.assert_equal(week_10.year, 2015) nt.assert_is(week_10.monday, day_1) nt.assert_is(week_10.tuesday, day_2) nt.assert_is(week_10.wednesday, day_3) nt.assert_is(week_10.thursday, day_4) nt.assert_is(week_10.friday, day_5) nt.assert_is(week_10.saturday, day_6) nt.assert_is(week_10.sunday, day_7)
def test_expected_hours(self): nt.assert_equal(day.Day("2014-09-01").expected_hours(), datetime.timedelta(hours=8)) nt.assert_equal(day.Day("2014-09-02").expected_hours(), datetime.timedelta(hours=8)) nt.assert_equal(day.Day("2014-09-03").expected_hours(), datetime.timedelta(hours=8)) nt.assert_equal(day.Day("2014-09-04").expected_hours(), datetime.timedelta(hours=8)) nt.assert_equal(day.Day("2014-09-05").expected_hours(), datetime.timedelta(hours=8)) nt.assert_equal(day.Day("2014-09-06").expected_hours(), datetime.timedelta()) nt.assert_equal(day.Day("2014-09-07").expected_hours(), datetime.timedelta())
def test_day_comment(self): day_1 = day.Day("2014-09-01") day_1.comment = "Good day." nt.assert_equal(day_1.get_info(), "Good day.")
def test_weekend_list_string(self): any_weekend = day.Day("2015-02-22") nt.assert_equal(any_weekend.list_str(), "Sun 22.") any_weekend.comment = "Sunday sundae." nt.assert_equal(any_weekend.list_str(), "Sun 22. Sunday sundae.")
def test_workday_list_string_with_positive_flextime(self): negative_flex_day = day.Day("2015-02-23") negative_flex_day.report("8:00", "1:00", "18:10") nt.assert_equal(negative_flex_day.list_str(), "Mon 23. 08:00 1:00 18:10 +1:10")
def test_day_info(self): day_1 = day.Day("2014-09-01") day_1.info = "A day" nt.assert_equal(day_1.get_info(), "A day")
def test_day_comment_and_info(self): day_1 = day.Day("2014-09-01") day_1.info = "A day in life" day_1.comment = "I read the news today, oh boy!" nt.assert_equal(day_1.get_info(), "A day in life. I read the news today, oh boy!")