@@ -18,37 +18,112 @@ def setUp(self):
18
18
Setup common test data and mocks.
19
19
"""
20
20
self .issue = MagicMock ()
21
- self .issue .issue .created_at = datetime (2021 , 1 , 1 , tzinfo = pytz .utc )
22
21
self .issue .issue .state = "open"
23
22
24
23
def test_time_in_draft_with_ready_for_review (self ):
25
24
"""
26
- Test measure_time_in_draft when ready_for_review_at is provided .
25
+ Test measure_time_in_draft with one draft and review interval .
27
26
"""
28
- ready_for_review_at = datetime (2021 , 1 , 3 , tzinfo = pytz .utc )
29
- result = measure_time_in_draft (self .issue , ready_for_review_at )
27
+ self .issue .events .return_value = [
28
+ MagicMock (
29
+ event = "converted_to_draft" ,
30
+ created_at = datetime (2021 , 1 , 1 , tzinfo = pytz .utc ),
31
+ ),
32
+ MagicMock (
33
+ event = "ready_for_review" ,
34
+ created_at = datetime (2021 , 1 , 3 , tzinfo = pytz .utc ),
35
+ ),
36
+ ]
37
+ result = measure_time_in_draft (self .issue )
30
38
expected = timedelta (days = 2 )
31
39
self .assertEqual (result , expected , "The time in draft should be 2 days." )
32
40
33
41
def test_time_in_draft_without_ready_for_review (self ):
34
42
"""
35
43
Test measure_time_in_draft when ready_for_review_at is not provided and issue is still open.
36
44
"""
45
+ self .issue .events .return_value = [
46
+ MagicMock (
47
+ event = "converted_to_draft" ,
48
+ created_at = datetime (2021 , 1 , 1 , tzinfo = pytz .utc ),
49
+ ),
50
+ ]
37
51
now = datetime (2021 , 1 , 4 , tzinfo = pytz .utc )
38
52
with unittest .mock .patch ("time_in_draft.datetime" ) as mock_datetime :
39
53
mock_datetime .now .return_value = now
40
- result = measure_time_in_draft (self .issue , None )
54
+ result = measure_time_in_draft (self .issue )
41
55
expected = timedelta (days = 3 )
42
56
self .assertEqual (result , expected , "The time in draft should be 3 days." )
43
57
58
+ def test_time_in_draft_multiple_intervals (self ):
59
+ """
60
+ Test measure_time_in_draft with multiple draft intervals.
61
+ """
62
+ self .issue .events .return_value = [
63
+ MagicMock (
64
+ event = "converted_to_draft" ,
65
+ created_at = datetime (2021 , 1 , 1 , tzinfo = pytz .utc ),
66
+ ),
67
+ MagicMock (
68
+ event = "ready_for_review" ,
69
+ created_at = datetime (2021 , 1 , 3 , tzinfo = pytz .utc ),
70
+ ),
71
+ MagicMock (
72
+ event = "converted_to_draft" ,
73
+ created_at = datetime (2021 , 1 , 5 , tzinfo = pytz .utc ),
74
+ ),
75
+ MagicMock (
76
+ event = "ready_for_review" ,
77
+ created_at = datetime (2021 , 1 , 7 , tzinfo = pytz .utc ),
78
+ ),
79
+ ]
80
+ result = measure_time_in_draft (self .issue )
81
+ expected = timedelta (days = 4 )
82
+ self .assertEqual (result , expected , "The total time in draft should be 4 days." )
83
+
84
+ def test_time_in_draft_ongoing_draft (self ):
85
+ """
86
+ Test measure_time_in_draft with an ongoing draft interval.
87
+ """
88
+ self .issue .events .return_value = [
89
+ MagicMock (
90
+ event = "converted_to_draft" ,
91
+ created_at = datetime (2021 , 1 , 1 , tzinfo = pytz .utc ),
92
+ ),
93
+ ]
94
+ with unittest .mock .patch ("time_in_draft.datetime" ) as mock_datetime :
95
+ mock_datetime .now .return_value = datetime (2021 , 1 , 4 , tzinfo = pytz .utc )
96
+ result = measure_time_in_draft (self .issue )
97
+ expected = timedelta (days = 3 )
98
+ self .assertEqual (
99
+ result , expected , "The ongoing draft time should be 3 days."
100
+ )
101
+
102
+ def test_time_in_draft_no_draft_events (self ):
103
+ """
104
+ Test measure_time_in_draft with no draft-related events.
105
+ """
106
+ self .issue .events .return_value = []
107
+ result = measure_time_in_draft (self .issue )
108
+ self .assertIsNone (
109
+ result , "The result should be None when there are no draft events."
110
+ )
111
+
44
112
def test_time_in_draft_without_ready_for_review_and_closed (self ):
45
113
"""
46
- Test measure_time_in_draft when ready_for_review_at is not provided and issue is closed .
114
+ Test measure_time_in_draft for a closed issue with an ongoing draft and ready_for_review_at is not provided .
47
115
"""
116
+ self .issue .events .return_value = [
117
+ MagicMock (
118
+ event = "converted_to_draft" ,
119
+ created_at = datetime (2021 , 1 , 1 , tzinfo = pytz .utc ),
120
+ ),
121
+ ]
48
122
self .issue .issue .state = "closed"
49
- result = measure_time_in_draft (self .issue , None )
123
+ result = measure_time_in_draft (self .issue )
50
124
self .assertIsNone (
51
- result , "The result should be None when draft was never used."
125
+ result ,
126
+ "The result should be None for a closed issue with an ongoing draft." ,
52
127
)
53
128
54
129
0 commit comments