11#!/usr/bin/env python
2- import datetime
32import time
43import uuid
4+ from datetime import date
5+ from datetime import datetime
6+ from datetime import timedelta
57from json import dumps
68
79import click
1618from tests .conf import client
1719from tests .conf import CONNKEYS
1820
21+
1922def _debugger ():
2023 import pdb
24+
2125 ## TODO: check some environmental flags
2226 ## only hackers want the debug mode
2327 pdb .set_trace ()
2428
29+
2530def _delay_decorator (f , delay = 10 ):
2631 def foo (* a , ** kwa ):
2732 time .sleep (delay )
@@ -146,7 +151,7 @@ def check_mkcalendar(self):
146151 except NotFoundError :
147152 self .set_flag ("non_existing_calendar_found" , False )
148153 except Exception as e :
149- debugger ()
154+ _debugger ()
150155 pass
151156 ## Check on "no_default_calendar" flag
152157 try :
@@ -234,14 +239,14 @@ def check_event(self):
234239
235240 ## Two simple events with text fields, dtstart=now and no dtend
236241 obj1 = cal .add_event (
237- dtstart = datetime .datetime . now (),
242+ dtstart = datetime .now (),
238243 summary = "Test event 1" ,
239244 categories = ["foo" , "bar" ],
240245 class_ = "CONFIDENTIAL" ,
241246 uid = "check_event_1" ,
242247 )
243248 obj2 = cal .add_event (
244- dtstart = datetime .datetime . now (),
249+ dtstart = datetime .now (),
245250 summary = "Test event 2" ,
246251 categories = ["zoo" , "test" ],
247252 uid = "check_event_2" ,
@@ -256,55 +261,59 @@ def check_event(self):
256261 ## Recurring events
257262 try :
258263 yearly_time = cal .add_event (
259- dtstart = datetime . datetime (2000 , 1 , 1 , 0 , 0 ),
264+ dtstart = datetime (2000 , 1 , 1 , 0 , 0 ),
260265 summary = "Yearly timed event" ,
261266 uid = "firework_event" ,
262267 rrule = {"FREQ" : "YEARLY" },
263268 )
264269 yearly_day = cal .add_event (
265- dtstart = datetime . date (2000 , 5 , 1 ),
270+ dtstart = date (2000 , 5 , 1 ),
266271 summary = "Yearly day event" ,
267272 uid = "full_day_event" ,
268273 rrule = {"FREQ" : "YEARLY" },
269274 )
270275 except :
271276 ## should not be here
272- debugger ()
277+ _debugger ()
273278 raise
274279 try :
275- self ._check_recurring_events (yearly_time , yearly_day , span1 , span2 )
280+ self ._check_recurring_events (yearly_time , yearly_day )
276281 finally :
277282 yearly_time .delete ()
278283 yearly_day .delete ()
279284
280285 ## Finally, a check that searches involving timespans works as intended
281286 try :
282287 span1 = cal .add_event (
283- dtstart = datetime . datetime (2000 , 7 , 1 , 8 ),
284- dtend = datetime . datetime (2000 , 7 , 1 , 16 ),
285- summary = "Yearly 8 hour event" ,
286- uid = "eight_hour_event " ,
288+ dtstart = datetime (2000 , 7 , 1 , 8 ),
289+ dtend = datetime (2000 , 7 , 1 , 16 ),
290+ summary = "An 8 hour event" ,
291+ uid = "eight_hour_event1 " ,
287292 )
288293 span2 = cal .add_event (
289- dtstart = datetime .datetime (2000 , 7 , 2 , 8 ),
290- duration = datetime .timedelta (hours = 8 ),
291- summary = "Yearly 8 hour event" ,
292- uid = "eight_hour_event" ,
293- rrule = {"FREQ" : "YEARLY" },
294+ dtstart = datetime (2000 , 7 , 2 , 8 ),
295+ duration = timedelta (hours = 8 ),
296+ summary = "Another 8 hour event" ,
297+ uid = "eight_hour_event2" ,
294298 )
295299 except :
296300 ## should not be here
297- debugger ()
301+ _debugger ()
298302 raise
299-
303+ try :
304+ self ._check_spanning_events (span1 , span2 )
305+ finally :
306+ span1 .delete ()
307+ span2 .delete ()
308+
300309 def _check_simple_events (self , obj1 , obj2 ):
301310 cal = self ._default_calendar
302311 try :
303312 obj1_ = cal .event_by_url (obj1 .url )
304- assert obj1 . data == obj1_ .data
313+ assert "SUMMARY:Test event 1" in obj1_ .data
305314 except :
306315 self .set_flag ("event_by_url_is_broken" )
307- debugger ()
316+ _debugger ()
308317
309318 try :
310319 foo = cal .event_by_uid ("check_event_2" )
@@ -328,7 +337,7 @@ def _check_simple_events(self, obj1, obj2):
328337 if len (cal .events ()) == 2 :
329338 self .set_flag ("search_always_needs_comptype" , True )
330339 else :
331- debugger ()
340+ _debugger ()
332341 pass
333342 ## we should not be here
334343 else :
@@ -361,7 +370,7 @@ def _check_simple_events(self, obj1, obj2):
361370 self .set_flag ("text_search_is_case_insensitive" , False )
362371 else :
363372 ## we should not be here
364- debugger ()
373+ _debugger ()
365374 pass
366375 events = cal .search (summary = "test event" , event = True )
367376 if len (events ) == 2 :
@@ -375,10 +384,10 @@ def _check_simple_events(self, obj1, obj2):
375384 if len (events ) == 1 :
376385 self .set_flag ("combined_search_not_working" , False )
377386 elif len (events ) == 0 :
378- debugger ()
387+ _debugger ()
379388 self .set_flag ("combined_search_not_working" , True )
380389 else :
381- debugger ()
390+ _debugger ()
382391 ## We should not be here
383392 pass
384393 try :
@@ -391,17 +400,15 @@ def _check_simple_events(self, obj1, obj2):
391400 self .set_flag ("category_search_yields_nothing" , True )
392401 else :
393402 ## we should not be here
394- debugger ()
403+ _debugger ()
395404 pass
396405
397- events = cal .search (summary = "test event" , class_ = "CONFIDENTIAL" , event = True )
398-
399406 def _check_recurring_events (self , yearly_time , yearly_day ):
400407 cal = self ._default_calendar
401408 try :
402409 events = cal .search (
403- start = datetime . datetime (2001 , 4 , 1 ),
404- end = datetime . datetime (2002 , 2 , 2 ),
410+ start = datetime (2001 , 4 , 1 ),
411+ end = datetime (2002 , 2 , 2 ),
405412 event = True ,
406413 )
407414 assert len (events ) == 2
@@ -413,8 +420,8 @@ def _check_recurring_events(self, yearly_time, yearly_day):
413420 return
414421
415422 events = cal .search (
416- start = datetime . datetime (2001 , 4 , 1 ),
417- end = datetime . datetime (2002 , 2 , 2 ),
423+ start = datetime (2001 , 4 , 1 ),
424+ end = datetime (2002 , 2 , 2 ),
418425 event = True ,
419426 expand = "server" ,
420427 )
@@ -433,6 +440,64 @@ def _check_recurring_events(self, yearly_time, yearly_day):
433440 else :
434441 self .set_flag ("broken_expand" , True )
435442
443+ def _check_spanning_events (self , span1 , span2 ):
444+ cal = self ._default_calendar
445+ one_event_lists = []
446+ try :
447+ ## Any overlapping of an event timespan and search timespan
448+ ## should yield the event, as I remember the RFC
449+ one_event_lists .append (cal .search (event = True , end = datetime (2000 , 7 , 1 , 10 )))
450+ one_event_lists .append (
451+ cal .search (
452+ event = True ,
453+ start = datetime (2000 , 7 , 1 , 10 ),
454+ end = datetime (2000 , 7 , 1 , 12 ),
455+ )
456+ )
457+ one_event_lists .append (
458+ cal .search (
459+ event = True ,
460+ start = datetime (2000 , 7 , 1 , 4 ),
461+ end = datetime (2000 , 7 , 1 , 12 ),
462+ )
463+ )
464+ one_event_lists .append (
465+ cal .search (
466+ event = True ,
467+ start = datetime (2000 , 7 , 1 , 4 ),
468+ end = datetime (2000 , 7 , 1 , 22 ),
469+ )
470+ )
471+ one_event_lists .append (
472+ cal .search (event = True , start = datetime (2000 , 7 , 2 , 10 ))
473+ )
474+ one_event_lists .append (
475+ cal .search (
476+ event = True ,
477+ start = datetime (2000 , 7 , 2 , 10 ),
478+ end = datetime (2000 , 7 , 2 , 12 ),
479+ )
480+ )
481+ one_event_lists .append (
482+ cal .search (
483+ event = True ,
484+ start = datetime (2000 , 7 , 2 , 4 ),
485+ end = datetime (2000 , 7 , 2 , 12 ),
486+ )
487+ )
488+ one_event_lists .append (
489+ cal .search (
490+ event = True ,
491+ start = datetime (2000 , 7 , 2 , 4 ),
492+ end = datetime (2000 , 7 , 2 , 22 ),
493+ )
494+ )
495+ for one_event in one_event_lists :
496+ assert len (one_event ) == 1
497+ except :
498+ _debugger ()
499+ raise
500+
436501 def check_todo (self ):
437502 try :
438503 ## Add a simplest possible todo
@@ -442,28 +507,28 @@ def check_todo(self):
442507 )
443508 todo_with_dtstart = cal .add_todo (
444509 summary = "This is a summary" ,
445- dtstart = datetime . datetime (2000 ,1 , 1 )
510+ dtstart = datetime (2000 , 1 , 1 ),
446511 uid = "check_todo_2" ,
447512 )
448513 todo_with_due = cal .add_todo (
449514 summary = "This is a summary" ,
450- due = datetime . datetime (2000 ,1 , 1 , 1 , 0 , 0 )
515+ due = datetime (2000 , 1 , 1 , 1 , 0 , 0 ),
451516 uid = "check_todo_3" ,
452517 )
453518 todo_with_dtstart_due = cal .add_todo (
454519 summary = "This is a summary" ,
455- dtstart = datetime . datetime (2000 ,1 , 1 , 2 , 0 , 0 )
456- due = datetime . datetime (2000 ,1 , 1 , 3 , 0 , 0 )
520+ dtstart = datetime (2000 , 1 , 1 , 2 , 0 , 0 ),
521+ due = datetime (2000 , 1 , 1 , 3 , 0 , 0 ),
457522 uid = "check_todo_4" ,
458523 )
459524 todo_with_dtstart_dur = cal .add_todo (
460525 summary = "This is a summary" ,
461- dtstart = datetime . datetime (2000 ,1 , 1 , 4 , 0 , 0 )
462- duration = datetime . timedelta (hours = 1 )
526+ dtstart = datetime (2000 , 1 , 1 , 4 , 0 , 0 ),
527+ duration = timedelta (hours = 1 ),
463528 uid = "check_todo_2" ,
464529 )
465- if not self .flags [' object_by_uid_is_broken' ]:
466- assert ( len (cal .todo_by_uid (' check_todo_1' )) == 1 )
530+ if not self .flags [" object_by_uid_is_broken" ]:
531+ assert len (cal .todo_by_uid (" check_todo_1" )) == 1
467532 self .set_flag ("no_todo" , False )
468533 except :
469534 self .set_flag ("no_todo" )
@@ -479,9 +544,9 @@ def check_simple_todo(self, todo):
479544 ## search for a simple todo
480545 try :
481546 sr = cal .search (summary = "This is a summary" , todo = True )
482- assert ( len (sr )== 1 )
547+ assert len (sr ) == 1
483548 except :
484- debugger ()
549+ _debugger ()
485550 ## simple search for a todo won't work.
486551 ## I haven't seen that before.
487552 ## TODO: add a flag for this
@@ -495,7 +560,7 @@ def check_all(self):
495560 self .check_mkcalendar ()
496561 self .check_event ()
497562 except :
498- debugger ()
563+ _debugger ()
499564 raise
500565 finally :
501566 if self ._default_calendar and not self .flags_checked ["no_mkcalendar" ]:
0 commit comments