-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_maintenance_tracker.py
164 lines (123 loc) · 4.07 KB
/
test_maintenance_tracker.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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
import pytest
from core import *
from maintenance_tracker import *
from datetime import datetime
from test_core import task1, task2, task3 # fixtures
from test_core import action1_t1, action2_t1 # fixtures
def test_listing_actions_for_task(task1, task2):
action1_t1 = Action(
datetime(
2024,
1,
1,
),
task1,
"ran task1 on new year day",
"me",
)
action2_t1 = Action(
datetime(
2024,
1,
2,
),
task1,
"ran task1 on the second of the year",
"me",
)
action1_t2 = Action(
datetime(
2024,
1,
1,
),
task2,
"ran task2 on new year day",
"me",
)
action2_t2 = Action(
datetime(
2024,
1,
2,
),
task2,
"ran task2 on the second of the year",
"me",
)
action_lst = ActionLister([action1_t1, action1_t2, action2_t1, action2_t2])
mtnt = MaintenanceTracker()
mtnt.register_task(task1)
mtnt.register_task(task2)
for a in action_lst:
mtnt.record_run(a)
assert ActionLister([action1_t2, action2_t2]) == mtnt.get_actions_for_task(task2)
def test_record_run(task1):
action1 = Action(
datetime(2024, 1, 7, 10, 15),
task1,
"running the first task",
"a description for the first run of task1",
"Pedro",
)
mtnt = MaintenanceTracker()
mtnt.record_run(action1)
assert mtnt.task_list[0].name == "my first task"
def test_get_latest_task_run_success(task1, action1_t1, action2_t1):
mtnt = MaintenanceTracker()
mtnt.register_task(task1)
mtnt.record_run(action1_t1)
mtnt.record_run(action2_t1)
assert mtnt.get_latest_task_run(task1) == action2_t1
def test_get_latest_task_run_no_action(task2):
mtnt = MaintenanceTracker()
mtnt.register_task(task2)
assert mtnt.get_latest_task_run(task2) is None
def test_get_latest_task_run_empty(task2):
mtnt = MaintenanceTracker()
assert mtnt.get_latest_task_run(task2) is None
def test_check_overdue_has_action_is_overdue(task1, action1_t1, action2_t1):
mtnt = MaintenanceTracker()
mtnt.register_task(task1) # every hour at 32 min, start 2023-12-24
mtnt.record_run(action1_t1) # new year 2024 (0h)
mtnt.record_run(action2_t1) # 2024-01-02, 6 AM
when = datetime(2024, 1, 2, 6, 33, tzinfo=UTC)
assert mtnt.check_overdue(task1, when=when) == True
def test_check_overdue_has_action_is_not_overdue(task1, action1_t1, action2_t1):
mtnt = MaintenanceTracker()
mtnt.register_task(task1) # every hour at 32 min, start 2023-12-24
mtnt.record_run(action1_t1) # new year 2024 (0h)
mtnt.record_run(action2_t1) # 2024-01-02, 6 AM
when = datetime(2024, 1, 2, 6, 31, tzinfo=UTC)
assert mtnt.check_overdue(task1, when=when) == False
def test_check_overdue_has_no_action_is_overdue(task1):
mtnt = MaintenanceTracker()
mtnt.register_task(task1) # every hour at 32 min, start 2023-12-24
when = datetime(2024, 1, 2, 6, 31, tzinfo=UTC)
assert mtnt.check_overdue(task1, when=when) == True
def test_check_overdue_has_no_action_is_not_overdue():
mtnt = MaintenanceTracker()
when = datetime(2024, 2, 21, 23, 24, tzinfo=UTC)
future_task = Task(
"future task",
"starts in the future",
datetime(2024, 2, 22, 23, 24, tzinfo=UTC),
timedelta(days=1),
)
mtnt.register_task(future_task)
assert mtnt.check_overdue(future_task, when) == False
def test_check_overdue_only_as_action_after_when(task1):
mtnt = MaintenanceTracker()
mtnt.register_task(task1) # every hour at 32 min, start 2023-12-24
when = datetime(2024, 1, 2, 6, 30, tzinfo=UTC)
future_action = Action(
datetime(2024, 1, 2, 6, 31, tzinfo=UTC),
task1,
"an action in the future",
"...in this context",
"test me",
)
mtnt.record_run(future_action)
assert mtnt.check_overdue(task1, when=when) == True
if __name__ == "__main__":
pass