3030# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
3131# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3232
33- import os , unittest , shutil
33+ import os , unittest , shutil , calendar
3434
3535import django .test
3636from django .conf import settings
@@ -275,6 +275,9 @@ def create_test_milestones(self):
275275
276276 return (m1 , m2 , group )
277277
278+ def last_day_of_month (self , d ):
279+ return datetime .date (d .year , d .month , calendar .monthrange (d .year , d .month )[1 ])
280+
278281
279282 def test_milestone_sets (self ):
280283 m1 , m2 , group = self .create_test_milestones ()
@@ -308,13 +311,14 @@ def test_add_milestone(self):
308311 events_before = group .groupevent_set .count ()
309312 docs = Document .objects .filter (type = "draft" ).values_list ("name" , flat = True )
310313
311- due = datetime .date .today () + datetime .timedelta (days = 365 )
314+ due = self . last_day_of_month ( datetime .date .today () + datetime .timedelta (days = 365 ) )
312315
313316 # faulty post
314317 r = self .client .post (url , { 'prefix' : "m-1" ,
315- 'm-1-id' : - 1 ,
318+ 'm-1-id' : "-1" ,
316319 'm-1-desc' : "" , # no description
317- 'm-1-due' : due .strftime ("%Y-%m-%d" ),
320+ 'm-1-due_month' : str (due .month ),
321+ 'm-1-due_year' : str (due .year ),
318322 'm-1-resolved' : "" ,
319323 'm-1-docs' : "," .join (docs ),
320324 'action' : "save" ,
@@ -326,9 +330,10 @@ def test_add_milestone(self):
326330
327331 # add
328332 r = self .client .post (url , { 'prefix' : "m-1" ,
329- 'm-1-id' : - 1 ,
333+ 'm-1-id' : "-1" ,
330334 'm-1-desc' : "Test 3" ,
331- 'm-1-due' : due .strftime ("%Y-%m-%d" ),
335+ 'm-1-due_month' : str (due .month ),
336+ 'm-1-due_year' : str (due .year ),
332337 'm-1-resolved' : "" ,
333338 'm-1-docs' : "," .join (docs ),
334339 'action' : "save" ,
@@ -356,13 +361,14 @@ def test_add_milestone_as_chair(self):
356361
357362 milestones_before = GroupMilestone .objects .count ()
358363 events_before = group .groupevent_set .count ()
359- due = datetime .date .today () + datetime .timedelta (days = 365 )
364+ due = self . last_day_of_month ( datetime .date .today () + datetime .timedelta (days = 365 ) )
360365
361366 # add
362367 r = self .client .post (url , { 'prefix' : "m-1" ,
363368 'm-1-id' : - 1 ,
364369 'm-1-desc' : "Test 3" ,
365- 'm-1-due' : due .strftime ("%Y-%m-%d" ),
370+ 'm-1-due_month' : str (due .month ),
371+ 'm-1-due_year' : str (due .year ),
366372 'm-1-resolved' : "" ,
367373 'm-1-docs' : "" ,
368374 'action' : "save" ,
@@ -388,18 +394,20 @@ def test_accept_milestone(self):
388394 self .assertEquals (r .status_code , 200 )
389395
390396 events_before = group .groupevent_set .count ()
391- due = datetime .date .today () + datetime .timedelta (days = 365 )
397+ due = self . last_day_of_month ( datetime .date .today () + datetime .timedelta (days = 365 ) )
392398
393399 # add
394400 r = self .client .post (url , { 'prefix' : "m1" ,
395401 'm1-id' : m1 .id ,
396402 'm1-desc' : m1 .desc ,
397- 'm1-due' : m1 .due .strftime ("%Y-%m-%d" ),
403+ 'm1-due_month' : str (m1 .due .month ),
404+ 'm1-due_year' : str (m1 .due .year ),
398405 'm1-resolved' : m1 .resolved ,
399406 'm1-docs' : "," .join (m1 .docs .values_list ("name" , flat = True )),
400407 'm1-accept' : "accept" ,
401408 'action' : "save" ,
402409 })
410+ print r .content
403411 self .assertEquals (r .status_code , 302 )
404412
405413 m = GroupMilestone .objects .get (pk = m1 .pk )
@@ -420,7 +428,8 @@ def test_delete_milestone(self):
420428 r = self .client .post (url , { 'prefix' : "m1" ,
421429 'm1-id' : m1 .id ,
422430 'm1-desc' : m1 .desc ,
423- 'm1-due' : m1 .due .strftime ("%Y-%m-%d" ),
431+ 'm1-due_month' : str (m1 .due .month ),
432+ 'm1-due_year' : str (m1 .due .year ),
424433 'm1-resolved' : "" ,
425434 'm1-docs' : "," .join (m1 .docs .values_list ("name" , flat = True )),
426435 'm1-delete' : "checked" ,
@@ -444,13 +453,14 @@ def test_edit_milestone(self):
444453 events_before = group .groupevent_set .count ()
445454 docs = Document .objects .filter (type = "draft" ).values_list ("name" , flat = True )
446455
447- due = datetime .date .today () + datetime .timedelta (days = 365 )
456+ due = self . last_day_of_month ( datetime .date .today () + datetime .timedelta (days = 365 ) )
448457
449458 # faulty post
450459 r = self .client .post (url , { 'prefix' : "m1" ,
451460 'm1-id' : m1 .id ,
452461 'm1-desc' : "" , # no description
453- 'm1-due' : due .strftime ("%Y-%m-%d" ),
462+ 'm1-due_month' : str (due .month ),
463+ 'm1-due_year' : str (due .year ),
454464 'm1-resolved' : "" ,
455465 'm1-docs' : "," .join (docs ),
456466 'action' : "save" ,
@@ -467,7 +477,8 @@ def test_edit_milestone(self):
467477 r = self .client .post (url , { 'prefix' : "m1" ,
468478 'm1-id' : m1 .id ,
469479 'm1-desc' : "Test 2 - changed" ,
470- 'm1-due' : due .strftime ("%Y-%m-%d" ),
480+ 'm1-due_month' : str (due .month ),
481+ 'm1-due_year' : str (due .year ),
471482 'm1-resolved' : "Done" ,
472483 'm1-resolved_checkbox' : "checked" ,
473484 'm1-docs' : "," .join (docs ),
@@ -566,6 +577,9 @@ def test_send_milestones_due_reminders(self):
566577
567578 early_warning_days = 30
568579
580+ # due dates here aren't aligned on the last day of the month,
581+ # but everything should still work
582+
569583 m1 = GroupMilestone .objects .create (group = group ,
570584 desc = "Test 1" ,
571585 due = datetime .date .today (),
@@ -606,6 +620,9 @@ def test_send_milestones_overdue_reminders(self):
606620 group = Group .objects .get (acronym = "mars" )
607621 person = Person .objects .get (user__username = "marschairman" )
608622
623+ # due dates here aren't aligned on the last day of the month,
624+ # but everything should still work
625+
609626 m1 = GroupMilestone .objects .create (group = group ,
610627 desc = "Test 1" ,
611628 due = datetime .date .today () - datetime .timedelta (days = 200 ),
@@ -627,7 +644,7 @@ def test_send_milestones_overdue_reminders(self):
627644 m1 .resolved = ""
628645 m1 .save ()
629646
630- m2 .due = datetime .date .today () - datetime .timedelta (days = 300 )
647+ m2 .due = self . last_day_of_month ( datetime .date .today () - datetime .timedelta (days = 300 ) )
631648 m2 .save ()
632649
633650 # send
0 commit comments