示例#1
0
    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))
示例#2
0
    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)
示例#3
0
 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))
示例#4
0
    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))
示例#5
0
    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)
示例#6
0
    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))
示例#7
0
 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.")
示例#8
0
 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.")
示例#9
0
 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))
示例#10
0
 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.")
示例#11
0
    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))
示例#12
0
    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))
示例#13
0
    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))
示例#14
0
    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.")
示例#15
0
 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))
示例#16
0
 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())
示例#17
0
    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
示例#18
0
    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.")
示例#19
0
    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")
示例#20
0
    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")
示例#21
0
    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.")
示例#22
0
    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")
示例#23
0
    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))
示例#24
0
    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)
示例#25
0
    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())
示例#26
0
 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.")
示例#27
0
 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.")
示例#28
0
 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")
示例#29
0
 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")
示例#30
0
 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!")