/
YearTest.py
133 lines (107 loc) · 4.33 KB
/
YearTest.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import unittest
from Year import Year
from Hours import Hours
from TimeRange import TimeRange
from Time import Time
from Week import Week
class YearTest(unittest.TestCase):
def test_can_give_schedule_for_week(self):
y = Year(2012)
w = y.get_schedule_for_week(40, Hours(57, 50))
self.assertEquals(w.get_day(0), TimeRange(Time(7), Time(17)))
def test_gives_none_if_no_taken_week_specified(self):
y = Year(2012)
self.assertEquals(y.get_taken(40), None)
def test_can_hold_blocked_ranges(self):
y = Year(2012)
blocked = Week()
y.add_blocked(40, blocked)
self.assertEquals(y.get_blocked(40), blocked)
def test_can_hold_taken_week(self):
y = Year(2012)
taken = Week()
y.add_taken(40, taken)
def test_can_retrieve_taken_week(self):
y = Year(2012)
taken = Week()
y.add_taken(40, taken)
self.assertEquals(y.get_taken(40), taken)
def test_uses_blocked_week_when_scheduling(self):
y = Year(2012)
blocked = Week()
blocked.set_day(0, TimeRange(Time(8, 30), Time(13, 30)))
y.add_blocked(40, blocked)
w = y.get_schedule_for_week(40, Hours(57, 50))
self.assertEquals(w.get_day(0).get_start(), Time(13, 30))
def test_uses_taken_week_when_scheduling(self):
y = Year(2012)
taken = Week()
taken.set_day(0, TimeRange(Time(13, 30), Time(17)))
y.add_taken(40, taken)
w = y.get_schedule_for_week(40, Hours(57, 50))
self.assertEquals(w.get_day(0).get_start(), Time(17))
def test_doesnt_schedule_hours_scheduled_by_taken_week(self):
y = Year(2012)
taken = Week()
taken.set_day(0, TimeRange(Time(13, 30), Time(17)))
y.add_taken(40, taken)
w = y.get_schedule_for_week(40, Hours(47, 50))
self.assertEquals(w.get_total_time(), Hours(44, 20))
def test_respects_both_blocked_and_taken_weeks(self):
y = Year(2012)
blocked = Week()
blocked.set_day(0, TimeRange(Time(8, 30), Time(13, 30)))
y.add_blocked(40, blocked)
taken = Week()
taken.set_day(1, TimeRange(Time(7), Time(17)))
y.add_taken(40, taken)
w = y.get_schedule_for_week(40, Hours(57, 50))
self.assertEquals(w.get_day(0).get_start(), Time(13, 30))
self.assertEquals(w.get_day(1).get_start(), Time(17))
def test_can_generate_monthly_report(self):
y = Year(2012)
m = y.generate_montly_report(10, Hours(57, 50))
self.assertEquals(m.get_day(1), TimeRange(Time(7), Time(17)))
def test_can_generate_realistic_monthly_report(self):
y = Year(2012)
blocked = self._get_daycare_week()
taken = self._get_assistance_week()
for i in [40, 41, 42, 43, 44]:
y.add_blocked(i, blocked)
y.add_taken(i, taken)
m = y.generate_montly_report(10, Hours(57, 50))
self.assertEquals(m.get_day(1), TimeRange(Time(17), Time(20)))
self.assertEquals(m.get_day(2), TimeRange(Time(13, 30), Time(20)))
def test_can_be_linked_to_next_year(self):
y2012 = Year(2012)
y2013 = Year(2013)
y2012.set_next_year(y2013)
self.assertEquals(y2012.get_next_year(), y2013)
#TODO can link to previous year, and it automatically updates links
#between years
def test_can_generate_monthly_report_for_december(self):
y2012 = Year(2012)
y2013 = Year(2013)
y2012.set_next_year(y2013)
blocked = self._get_daycare_week()
taken = self._get_assistance_week()
y2013.add_blocked(1, blocked)
y2013.add_taken(1, taken)
m = y2012.generate_montly_report(12, Hours(48, 0))
self.assertEquals(m.get_day(31), TimeRange(Time(17), Time(20)))
#TODO test January
def _get_daycare_week(self):
w = Week()
w.set_day(0, TimeRange(Time(8, 30), Time(13, 30)))
w.set_day(1, TimeRange(Time(8, 30), Time(13, 30)))
w.set_day(3, TimeRange(Time(8, 30), Time(13, 30)))
return w
def _get_assistance_week(self):
w = Week()
w.set_day(0, TimeRange(Time(13, 30), Time(17)))
w.set_day(1, TimeRange(Time(6, 30), Time(8, 30)))
w.set_day(2, TimeRange(Time(7), Time(17)))
w.set_day(3, TimeRange(Time(6, 30), Time(8, 30)))
return w
if __name__ == "__main__":
unittest.main()