33from django .test import TestCase , tag
44from django .utils import timezone
55
6- from argus .auth .factories import PersonUserFactory
6+ from argus .plannedmaintenance .factories import PlannedMaintenanceFactory
77from argus .plannedmaintenance .models import MODIFICATION_WINDOW_PM , PlannedMaintenanceTask
88from argus .util .testing import disconnect_signals , connect_signals
99
1010
11+ @tag ("database" )
12+ class PlannedMaintenanceQuerySetTests (TestCase ):
13+ def setUp (self ):
14+ disconnect_signals ()
15+
16+ now = timezone .now ()
17+ self .future_pm = PlannedMaintenanceFactory (start_time = now + timedelta (days = 1 ))
18+ self .current_pm = PlannedMaintenanceFactory (start_time = now - timedelta (minutes = 5 ))
19+ self .past_pm = PlannedMaintenanceFactory (start_time = now - timedelta (days = 1 ), end_time = now - timedelta (hours = 12 ))
20+
21+ def teardown (self ):
22+ connect_signals ()
23+
24+ def test_future_returns_only_pms_with_start_time_in_future (self ):
25+ future_pms = PlannedMaintenanceTask .objects .future ()
26+
27+ self .assertNotIn (self .current_pm , future_pms )
28+ self .assertNotIn (self .past_pm , future_pms )
29+ self .assertIn (self .future_pm , future_pms )
30+
31+ def test_past_returns_only_pms_with_end_time_in_past (self ):
32+ past_pms = PlannedMaintenanceTask .objects .past ()
33+
34+ self .assertNotIn (self .current_pm , past_pms )
35+ self .assertNotIn (self .future_pm , past_pms )
36+ self .assertIn (self .past_pm , past_pms )
37+
38+ def test_current_returns_only_pms_with_start_time_in_past_and_end_time_in_future (self ):
39+ current_pms = PlannedMaintenanceTask .objects .current ()
40+
41+ self .assertNotIn (self .future_pm , current_pms )
42+ self .assertNotIn (self .past_pm , current_pms )
43+ self .assertIn (self .current_pm , current_pms )
44+
45+ def test_active_at_time_returns_only_pms_with_start_time_before_and_end_time_after (self ):
46+ active_at_time_pms = PlannedMaintenanceTask .objects .active_at_time (
47+ self .future_pm .start_time + timedelta (minutes = 1 )
48+ )
49+
50+ self .assertNotIn (self .past_pm , active_at_time_pms )
51+ self .assertIn (self .future_pm , active_at_time_pms )
52+ self .assertIn (self .current_pm , active_at_time_pms )
53+
54+
1155@tag ("database" )
1256class PlannedMaintenanceTaskTests (TestCase ):
1357 def setUp (self ):
1458 disconnect_signals ()
1559
16- self .user = PersonUserFactory ()
60+ now = timezone .now ()
61+ self .future_pm = PlannedMaintenanceFactory (start_time = now + timedelta (days = 1 ))
62+ self .current_pm = PlannedMaintenanceFactory (start_time = now - timedelta (minutes = 5 ))
63+ self .past_pm = PlannedMaintenanceFactory (
64+ start_time = timezone .now () - MODIFICATION_WINDOW_PM - timedelta (hours = 2 ),
65+ end_time = timezone .now () - MODIFICATION_WINDOW_PM - timedelta (hours = 1 ),
66+ )
1767
1868 def teardown (self ):
1969 connect_signals ()
2070
2171 def test_given_open_pm_task_modifiable_is_true (self ):
22- open_pm_task = PlannedMaintenanceTask (owner = self .user )
23-
72+ open_pm_task = PlannedMaintenanceTask (created_by = self .user )
2473 self .assertTrue (open_pm_task .modifiable )
2574
2675 def test_given_recently_ended_pm_task_modifiable_is_true (self ):
27- open_pm_task = PlannedMaintenanceTask (
28- owner = self .user ,
76+ open_pm_task = PlannedMaintenanceFactory (
77+ created_by = self .user ,
2978 start_time = timezone .now () - timedelta (hours = 1 ),
3079 end_time = timezone .now (),
3180 )
@@ -34,9 +83,42 @@ def test_given_recently_ended_pm_task_modifiable_is_true(self):
3483
3584 def test_given_long_ago_ended_pm_task_modifiable_is_false (self ):
3685 open_pm_task = PlannedMaintenanceTask (
37- owner = self .user ,
86+ created_by = self .user ,
3887 start_time = timezone .now () - MODIFICATION_WINDOW_PM - timedelta (hours = 2 ),
3988 end_time = timezone .now () - MODIFICATION_WINDOW_PM - timedelta (hours = 1 ),
4089 )
90+ self .assertFalse (self .past_pm .modifiable )
91+
92+ def test_given_active_pm_current_is_true (self ):
93+ pm = PlannedMaintenanceFactory (start_time = timezone .now () - timedelta (minutes = 5 ))
94+ self .assertTrue (pm .current )
95+
96+ def test_given_past_pm_current_is_false (self ):
97+ now = timezone .now ()
98+ pm = PlannedMaintenanceFactory (start_time = now - timedelta (days = 1 ), end_time = now - timedelta (hours = 12 ))
99+ self .assertFalse (pm .current )
100+
101+ def test_given_future_pm_current_is_false (self ):
102+ pm = PlannedMaintenanceFactory (start_time = timezone .now () + timedelta (days = 1 ))
103+ self .assertFalse (pm .current )
104+
105+ def test_given_future_pm_cancel_deletes_task (self ):
106+ pm_id = self .future_pm .id
107+ self .future_pm .cancel ()
108+
109+ self .assertFalse (PlannedMaintenanceTask .objects .filter (id = pm_id ).exists ())
110+
111+ def test_given_past_pm_cancel_does_nothing (self ):
112+ past_end_time = self .past_pm .end_time
113+ self .past_pm .cancel ()
114+ self .past_pm .refresh_from_db ()
115+
116+ self .assertEqual (self .past_pm .end_time , past_end_time )
117+
118+ def test_given_current_pm_cancel_sets_end_time (self ):
119+ current_pm_end_time = self .current_pm .end_time
120+ self .current_pm .cancel ()
121+ self .current_pm .refresh_from_db ()
41122
42- self .assertFalse (open_pm_task .modifiable )
123+ self .assertNotEqual (self .current_pm .end_time , current_pm_end_time )
124+ self .assertLess (self .current_pm .end_time , timezone .now ())
0 commit comments