@@ -89,6 +89,196 @@ def test_two_times_in_middle_of_jan_and_march_return_3_months(self):
8989 self .assertEqual (len (times ), 3 )
9090
9191
92+ class TestBidTableGen (unittest .TestCase ):
93+ def setUp (self ):
94+ pass
95+
96+ def test_two_times_not_at_edge_of_month_return_one_month (self ):
97+ start_time = datetime .strptime ('2017/01/02 00:00:00' , '%Y/%m/%d %H:%M:%S' )
98+ end_time = datetime .strptime ('2017/01/03 00:00:00' , '%Y/%m/%d %H:%M:%S' )
99+ gen = date_generators .bid_table_gen (start_time , end_time )
100+ times = [(year , month , day , index ) for year , month , day , index in gen ]
101+ self .assertEqual (times [0 ][0 ], '2017' )
102+ self .assertEqual (times [0 ][1 ], '01' )
103+ self .assertEqual (times [0 ][2 ], None )
104+ self .assertEqual (times [0 ][3 ], None )
105+ self .assertEqual (len (times ), 1 )
106+
107+
108+ def test_two_times_first_at_edge_of_month_return_month_before_and_month_of_times (self ):
109+ start_time = datetime .strptime ('2017/02/01 00:00:00' , '%Y/%m/%d %H:%M:%S' )
110+ end_time = datetime .strptime ('2017/02/03 00:00:00' , '%Y/%m/%d %H:%M:%S' )
111+ gen = date_generators .bid_table_gen (start_time , end_time )
112+ times = [(year , month , day , index ) for year , month , day , index in gen ]
113+ self .assertEqual (times [0 ][0 ], '2017' )
114+ self .assertEqual (times [0 ][1 ], '01' )
115+ self .assertEqual (times [0 ][2 ], None )
116+ self .assertEqual (times [0 ][3 ], None )
117+ self .assertEqual (times [1 ][0 ], '2017' )
118+ self .assertEqual (times [1 ][1 ], '02' )
119+ self .assertEqual (times [1 ][2 ], None )
120+ self .assertEqual (times [1 ][3 ], None )
121+
122+ def test_two_times_first_at_edge_of_year_return_month_before_and_month_of_times (self ):
123+ start_time = datetime .strptime ('2017/01/01 00:00:00' , '%Y/%m/%d %H:%M:%S' )
124+ end_time = datetime .strptime ('2017/01/03 00:00:00' , '%Y/%m/%d %H:%M:%S' )
125+ gen = date_generators .bid_table_gen (start_time , end_time )
126+ times = [(year , month , day , index ) for year , month , day , index in gen ]
127+ self .assertEqual (times [0 ][0 ], '2016' )
128+ self .assertEqual (times [0 ][1 ], '12' )
129+ self .assertEqual (times [0 ][2 ], None )
130+ self .assertEqual (times [0 ][3 ], None )
131+ self .assertEqual (times [1 ][0 ], '2017' )
132+ self .assertEqual (times [1 ][1 ], '01' )
133+ self .assertEqual (times [1 ][2 ], None )
134+ self .assertEqual (times [1 ][3 ], None )
135+
136+ def test_two_times_second_at_edge_of_month_returns_one_month (self ):
137+ start_time = datetime .strptime ('2017/01/05 00:00:00' , '%Y/%m/%d %H:%M:%S' )
138+ end_time = datetime .strptime ('2017/01/31 00:00:00' , '%Y/%m/%d %H:%M:%S' )
139+ gen = date_generators .bid_table_gen (start_time , end_time )
140+ times = [(year , month , day , index ) for year , month , day , index in gen ]
141+ self .assertEqual (times [0 ][0 ], '2017' )
142+ self .assertEqual (times [0 ][1 ], '01' )
143+ self .assertEqual (times [0 ][2 ], None )
144+ self .assertEqual (times [0 ][3 ], None )
145+ self .assertEqual (len (times ), 1 )
146+
147+ def test_two_times_second_at_edge_of_year_returns_one_month (self ):
148+ start_time = datetime .strptime ('2017/12/02 00:00:00' , '%Y/%m/%d %H:%M:%S' )
149+ end_time = datetime .strptime ('2017/12/31 00:00:00' , '%Y/%m/%d %H:%M:%S' )
150+ gen = date_generators .bid_table_gen (start_time , end_time )
151+ times = [(year , month , day , index ) for year , month , day , index in gen ]
152+ self .assertEqual (times [0 ][0 ], '2017' )
153+ self .assertEqual (times [0 ][1 ], '12' )
154+ self .assertEqual (times [0 ][2 ], None )
155+ self .assertEqual (times [0 ][3 ], None )
156+ self .assertEqual (len (times ), 1 )
157+
158+ def test_two_times_in_middle_of_jan_and_march_return_3_months (self ):
159+ start_time = datetime .strptime ('2017/01/05 00:00:00' , '%Y/%m/%d %H:%M:%S' )
160+ end_time = datetime .strptime ('2017/03/24 00:00:00' , '%Y/%m/%d %H:%M:%S' )
161+ gen = date_generators .bid_table_gen (start_time , end_time )
162+ times = [(year , month , day , index ) for year , month , day , index in gen ]
163+ self .assertEqual (times [0 ][0 ], '2017' )
164+ self .assertEqual (times [0 ][1 ], '01' )
165+ self .assertEqual (times [0 ][2 ], None )
166+ self .assertEqual (times [0 ][3 ], None )
167+ self .assertEqual (times [1 ][0 ], '2017' )
168+ self .assertEqual (times [1 ][1 ], '02' )
169+ self .assertEqual (times [1 ][2 ], None )
170+ self .assertEqual (times [1 ][3 ], None )
171+ self .assertEqual (times [2 ][0 ], '2017' )
172+ self .assertEqual (times [2 ][1 ], '03' )
173+ self .assertEqual (times [2 ][2 ], None )
174+ self .assertEqual (times [2 ][3 ], None )
175+ self .assertEqual (len (times ), 3 )
176+
177+ def test_change_from_months_to_days (self ):
178+ start_time = datetime .strptime ('2021/02/01 00:00:00' , '%Y/%m/%d %H:%M:%S' )
179+ end_time = datetime .strptime ('2021/04/03 00:00:00' , '%Y/%m/%d %H:%M:%S' )
180+ gen = date_generators .bid_table_gen (start_time , end_time )
181+ times = [(year , month , day , index ) for year , month , day , index in gen ]
182+ # Note we expect the 1st of april to be skipped
183+ self .assertEqual (times [0 ][0 ], '2021' )
184+ self .assertEqual (times [0 ][1 ], '01' )
185+ self .assertEqual (times [0 ][2 ], None )
186+ self .assertEqual (times [0 ][3 ], None )
187+ self .assertEqual (times [1 ][0 ], '2021' )
188+ self .assertEqual (times [1 ][1 ], '02' )
189+ self .assertEqual (times [1 ][2 ], None )
190+ self .assertEqual (times [1 ][3 ], None )
191+ # Data for march and the first of april is missing from the AEMO website so we don't generate the dates
192+ # for these times.
193+ self .assertEqual (times [2 ][0 ], '2021' )
194+ self .assertEqual (times [2 ][1 ], '04' )
195+ self .assertEqual (times [2 ][2 ], '02' )
196+ self .assertEqual (times [2 ][3 ], None )
197+ self .assertEqual (times [3 ][0 ], '2021' )
198+ self .assertEqual (times [3 ][1 ], '04' )
199+ self .assertEqual (times [3 ][2 ], '03' )
200+ self .assertEqual (times [3 ][3 ], None )
201+ self .assertEqual (len (times ), 4 )
202+
203+ def test_day_given_in_april_2021 (self ):
204+ start_time = datetime .strptime ('2021/04/01 00:00:00' , '%Y/%m/%d %H:%M:%S' )
205+ end_time = datetime .strptime ('2021/04/03 00:00:00' , '%Y/%m/%d %H:%M:%S' )
206+ gen = date_generators .bid_table_gen (start_time , end_time )
207+ times = [(year , month , day , index ) for year , month , day , index in gen ]
208+ # Note we expect the 1st of april to be skipped
209+ self .assertEqual (times [0 ][0 ], '2021' )
210+ self .assertEqual (times [0 ][1 ], '04' )
211+ self .assertEqual (times [0 ][2 ], '02' )
212+ self .assertEqual (times [0 ][3 ], None )
213+ self .assertEqual (times [1 ][0 ], '2021' )
214+ self .assertEqual (times [1 ][1 ], '04' )
215+ self .assertEqual (times [1 ][2 ], '03' )
216+ self .assertEqual (times [1 ][3 ], None )
217+ self .assertEqual (len (times ), 2 )
218+
219+ def test_include_previous_market_day (self ):
220+ start_time = datetime .strptime ('2021/05/10 01:00:00' , '%Y/%m/%d %H:%M:%S' )
221+ end_time = datetime .strptime ('2021/05/10 05:00:00' , '%Y/%m/%d %H:%M:%S' )
222+ gen = date_generators .bid_table_gen (start_time , end_time )
223+ times = [(year , month , day , index ) for year , month , day , index in gen ]
224+ # Note we expect the 1st of april to be skipped
225+ self .assertEqual (times [0 ][0 ], '2021' )
226+ self .assertEqual (times [0 ][1 ], '05' )
227+ self .assertEqual (times [0 ][2 ], '09' )
228+ self .assertEqual (times [0 ][3 ], None )
229+ self .assertEqual (times [1 ][0 ], '2021' )
230+ self .assertEqual (times [1 ][1 ], '05' )
231+ self .assertEqual (times [1 ][2 ], '10' )
232+ self .assertEqual (times [1 ][3 ], None )
233+ self .assertEqual (len (times ), 2 )
234+
235+ def test_include_previous_month_if_1st_market_day_of_month (self ):
236+ start_time = datetime .strptime ('2021/05/01 05:00:00' , '%Y/%m/%d %H:%M:%S' )
237+ end_time = datetime .strptime ('2021/05/03 05:00:00' , '%Y/%m/%d %H:%M:%S' )
238+ gen = date_generators .bid_table_gen (start_time , end_time )
239+ times = [(year , month , day , index ) for year , month , day , index in gen ]
240+ self .assertEqual (times [0 ][0 ], '2021' )
241+ self .assertEqual (times [0 ][1 ], '04' )
242+ self .assertEqual (times [0 ][2 ], '30' )
243+ self .assertEqual (times [0 ][3 ], None )
244+ self .assertEqual (times [1 ][0 ], '2021' )
245+ self .assertEqual (times [1 ][1 ], '05' )
246+ self .assertEqual (times [1 ][2 ], '01' )
247+ self .assertEqual (times [1 ][3 ], None )
248+ self .assertEqual (times [2 ][0 ], '2021' )
249+ self .assertEqual (times [2 ][1 ], '05' )
250+ self .assertEqual (times [2 ][2 ], '02' )
251+ self .assertEqual (times [2 ][3 ], None )
252+ self .assertEqual (times [3 ][0 ], '2021' )
253+ self .assertEqual (times [3 ][1 ], '05' )
254+ self .assertEqual (times [3 ][2 ], '03' )
255+ self .assertEqual (times [3 ][3 ], None )
256+ self .assertEqual (len (times ), 4 )
257+
258+ def test_include_previous_month_if_1st_market_day_of_month_but_2nd_calendar_day (self ):
259+ start_time = datetime .strptime ('2021/05/02 04:00:00' , '%Y/%m/%d %H:%M:%S' )
260+ end_time = datetime .strptime ('2021/05/03 05:00:00' , '%Y/%m/%d %H:%M:%S' )
261+ gen = date_generators .bid_table_gen (start_time , end_time )
262+ times = [(year , month , day , index ) for year , month , day , index in gen ]
263+ self .assertEqual (times [0 ][0 ], '2021' )
264+ self .assertEqual (times [0 ][1 ], '04' )
265+ self .assertEqual (times [0 ][2 ], '30' )
266+ self .assertEqual (times [0 ][3 ], None )
267+ self .assertEqual (times [1 ][0 ], '2021' )
268+ self .assertEqual (times [1 ][1 ], '05' )
269+ self .assertEqual (times [1 ][2 ], '01' )
270+ self .assertEqual (times [1 ][3 ], None )
271+ self .assertEqual (times [2 ][0 ], '2021' )
272+ self .assertEqual (times [2 ][1 ], '05' )
273+ self .assertEqual (times [2 ][2 ], '02' )
274+ self .assertEqual (times [2 ][3 ], None )
275+ self .assertEqual (times [3 ][0 ], '2021' )
276+ self .assertEqual (times [3 ][1 ], '05' )
277+ self .assertEqual (times [3 ][2 ], '03' )
278+ self .assertEqual (times [3 ][3 ], None )
279+ self .assertEqual (len (times ), 4 )
280+
281+
92282class TestYearMonthDayIndexGen (unittest .TestCase ):
93283 def setUp (self ):
94284 pass
0 commit comments