def test_two_calendars_same_uid(tmpdir): dbpath = str(tmpdir) + '/khal.db' dba = backend.SQLiteDb('home', dbpath, locale=locale) dbb = backend.SQLiteDb('work', dbpath, locale=locale) assert dba.list() == [] assert dbb.list() == [] dba.update(event_a, href='12345.ics', etag='abcd') assert dba.list() == [('12345.ics', 'abcd')] assert dbb.list() == [] dbb.update(event_b, href='12345.ics', etag='abcd') assert dba.list() == [('12345.ics', 'abcd')] assert dbb.list() == [('12345.ics', 'abcd')] events_a = list( dba.get_time_range(datetime(2014, 6, 30, 0, 0), datetime(2014, 7, 26, 0, 0))) events_b = list( dbb.get_time_range(datetime(2014, 6, 30, 0, 0), datetime(2014, 7, 26, 0, 0))) assert len(events_a) == 4 assert len(events_b) == 4 dba.delete('12345.ics') events_a = list( dba.get_time_range(datetime(2014, 6, 30, 0, 0), datetime(2014, 7, 26, 0, 0))) events_b = list( dbb.get_time_range(datetime(2014, 6, 30, 0, 0), datetime(2014, 7, 26, 0, 0))) assert len(events_a) == 0 assert len(events_b) == 4 assert dba.list() == [] assert dbb.list() == [('12345.ics', 'abcd')]
def test_event_recuid_rrule_no_master(): """ test for events which have a RECUID and a RRULE component, but the master event is not present in the same file """ dbi = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) dbi.update( _get_text('event_dt_multi_recuid_no_master'), href='12345.ics', etag='abcd', calendar=calname, ) events = dbi.get_floating( dt.datetime(2010, 1, 1, 0, 0), dt.datetime(2020, 1, 1, 0, 0), ) events = sorted(events, key=lambda x: x.start) assert len(list(events)) == 2 assert events[0].start == dt.datetime(2014, 6, 30, 7, 30) assert events[0].end == dt.datetime(2014, 6, 30, 12, 0) assert events[1].start == dt.datetime(2014, 7, 7, 8, 30) assert events[1].end == dt.datetime(2014, 7, 7, 12, 0) events = dbi.search('VEVENT') events = sorted(events, key=lambda x: x.start) assert len(list(events)) == 2
def test_event_rrule_multi_this_and_future_allday(): dbi = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) dbi.update(event_rrule_multi_this_and_future_allday, href='event_rrule_multi_this_and_future_allday.ics', etag='abcd', calendar=calname) assert dbi.list(calname) == [ ('event_rrule_multi_this_and_future_allday.ics', 'abcd') ] events = sorted( dbi.get_floating(dt.datetime(2014, 4, 30, 0, 0), dt.datetime(2014, 9, 27, 0, 0)), ) assert len(events) == 6 assert events[0][2] == dt.date(2014, 6, 30) assert events[1][2] == dt.date(2014, 7, 12) assert events[2][2] == dt.date(2014, 7, 17) assert events[3][2] == dt.date(2014, 7, 19) assert events[4][2] == dt.date(2014, 7, 24) assert events[5][2] == dt.date(2014, 7, 31) assert events[0][3] == dt.date(2014, 7, 1) assert events[1][3] == dt.date(2014, 7, 14) assert events[2][3] == dt.date(2014, 7, 18) assert events[3][3] == dt.date(2014, 7, 21) assert events[4][3] == dt.date(2014, 7, 25) assert events[5][3] == dt.date(2014, 8, 1) assert 'SUMMARY:Arbeit\n' in events[0][0] for event in [events[1], events[3]]: assert 'SUMMARY:Arbeit (lang)\n' in event[0] for event in [events[2], events[4], events[5]]: assert 'SUMMARY:Arbeit (neu)\n' in event[0]
def test_birthdays_no_year(): db = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) assert list(db.get_floating(start, end)) == list() db.update_birthday(card_no_year, 'unix.vcf', calendar=calname) events = list(db.get_floating(start, end)) assert len(events) == 1 assert events[0].summary == 'Unix\'s birthday'
def test_event_rrule_multi_this_and_future_allday(): dbi = backend.SQLiteDb('home', ':memory:', locale=locale) dbi.update(event_rrule_multi_this_and_future_allday, href='event_rrule_multi_this_and_future_allday.ics', etag='abcd') assert dbi.list() == [('event_rrule_multi_this_and_future_allday.ics', 'abcd')] events = get_allday_range(dbi, start=date(2014, 4, 30), end=date(2014, 9, 26)) # we are getting two events twice, because they last for two days assert len(events) == 8 assert events[0].start == date(2014, 6, 30) assert events[1].start == date(2014, 7, 12) assert events[2].start == date(2014, 7, 12) assert events[3].start == date(2014, 7, 17) assert events[4].start == date(2014, 7, 19) assert events[5].start == date(2014, 7, 19) assert events[6].start == date(2014, 7, 24) assert events[7].start == date(2014, 7, 31) assert events[0].end == date(2014, 7, 1) assert events[1].end == date(2014, 7, 14) assert events[2].end == date(2014, 7, 14) assert events[3].end == date(2014, 7, 18) assert events[4].end == date(2014, 7, 21) assert events[5].end == date(2014, 7, 21) assert events[6].end == date(2014, 7, 25) assert events[7].end == date(2014, 8, 1) assert unicode_type(events[0].vevent['SUMMARY']) == u'Arbeit' for event in events[1:3] + events[4:6]: assert unicode_type(event.vevent['SUMMARY']) == u'Arbeit (lang)' for event in events[3:4] + events[6:]: assert unicode_type(event.vevent['SUMMARY']) == u'Arbeit (neu)'
def test_event_rrule_this_and_future_multi_day_shift(): dbi = backend.SQLiteDb('home', ':memory:', locale=locale) dbi.update(event_rrule_this_and_future_multi_day_shift, href='12345.ics', etag='abcd') assert dbi.list() == [('12345.ics', 'abcd')] events = dbi.get_time_range(datetime(2014, 4, 30, 0, 0), datetime(2014, 9, 26, 0, 0)) events = sorted(events, key=lambda x: x.start) assert len(events) == 6 assert events[0].start == berlin.localize(datetime(2014, 6, 30, 7, 0)) assert events[1].start == berlin.localize(datetime(2014, 7, 8, 9, 0)) assert events[2].start == berlin.localize(datetime(2014, 7, 15, 9, 0)) assert events[3].start == berlin.localize(datetime(2014, 7, 22, 9, 0)) assert events[4].start == berlin.localize(datetime(2014, 7, 29, 9, 0)) assert events[5].start == berlin.localize(datetime(2014, 8, 5, 9, 0)) assert events[0].end == berlin.localize(datetime(2014, 6, 30, 12, 0)) assert events[1].end == berlin.localize(datetime(2014, 7, 9, 15, 0)) assert events[2].end == berlin.localize(datetime(2014, 7, 16, 15, 0)) assert events[3].end == berlin.localize(datetime(2014, 7, 23, 15, 0)) assert events[4].end == berlin.localize(datetime(2014, 7, 30, 15, 0)) assert events[5].end == berlin.localize(datetime(2014, 8, 6, 15, 0)) assert unicode_type(events[0].vevent['SUMMARY']) == u'Arbeit' for event in events[1:]: assert unicode_type(event.vevent['SUMMARY']) == u'Arbeit (lang)'
def test_event_rrule_this_and_future_allday_prior(): event_rrule_this_and_future_allday_prior = \ event_rrule_this_and_future_allday_temp.format(20140705, 20140706) dbi = backend.SQLiteDb('home', ':memory:', locale=locale) dbi.update(event_rrule_this_and_future_allday_prior, href='rrule_this_and_future_allday.ics', etag='abcd') assert dbi.list() == [('rrule_this_and_future_allday.ics', 'abcd')] events = get_allday_range(dbi, date(2014, 4, 30), date(2014, 9, 26)) assert len(events) == 6 assert events[0].start == date(2014, 6, 30) assert events[1].start == date(2014, 7, 5) assert events[2].start == date(2014, 7, 12) assert events[3].start == date(2014, 7, 19) assert events[4].start == date(2014, 7, 26) assert events[5].start == date(2014, 8, 2) assert events[0].end == date(2014, 7, 1) assert events[1].end == date(2014, 7, 6) assert events[2].end == date(2014, 7, 13) assert events[3].end == date(2014, 7, 20) assert events[4].end == date(2014, 7, 27) assert events[5].end == date(2014, 8, 3) assert unicode_type(events[0].vevent['SUMMARY']) == u'Arbeit' for event in events[1:]: assert unicode_type(event.vevent['SUMMARY']) == u'Arbeit (lang)'
def test_event_rrule_multi_this_and_future_allday(): dbi = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) dbi.update(event_rrule_multi_this_and_future_allday, href='event_rrule_multi_this_and_future_allday.ics', etag='abcd', calendar=calname) assert dbi.list(calname) == [ ('event_rrule_multi_this_and_future_allday.ics', 'abcd') ] events = sorted( dbi.get_floating(datetime(2014, 4, 30, 0, 0), datetime(2014, 9, 27, 0, 0))) assert len(events) == 6 assert events[0].start == date(2014, 6, 30) assert events[1].start == date(2014, 7, 12) assert events[2].start == date(2014, 7, 17) assert events[3].start == date(2014, 7, 19) assert events[4].start == date(2014, 7, 24) assert events[5].start == date(2014, 7, 31) assert events[0].end == date(2014, 6, 30) assert events[1].end == date(2014, 7, 13) assert events[2].end == date(2014, 7, 17) assert events[3].end == date(2014, 7, 20) assert events[4].end == date(2014, 7, 24) assert events[5].end == date(2014, 7, 31) assert str(events[0].summary) == 'Arbeit' for event in [events[1], events[3]]: assert str(event.summary) == 'Arbeit (lang)' for event in [events[2], events[4], events[5]]: assert str(event.summary) == 'Arbeit (neu)'
def test_event_different_timezones(): dbi = backend.SQLiteDb('home', ':memory:', locale=LOCALE_BERLIN) dbi.update(_get_text('event_dt_london'), href='12345.ics', etag='abcd') events = dbi.get_time_range(datetime(2014, 4, 9, 0, 0), datetime(2014, 4, 9, 23, 59)) events = list(events) assert len(events) == 1 event = events[0] assert event.start_local == LONDON.localize(datetime(2014, 4, 9, 14)) assert event.end_local == LONDON.localize(datetime(2014, 4, 9, 19)) # no event scheduled on the next day events = dbi.get_time_range(datetime(2014, 4, 10, 0, 0), datetime(2014, 4, 10, 23, 59)) events = list(events) assert len(events) == 0 # now setting the local_timezone to Sydney dbi.locale = LOCALE_SYDNEY events = dbi.get_time_range(datetime(2014, 4, 9, 0, 0), datetime(2014, 4, 9, 23, 59)) events = list(events) assert len(events) == 1 event = events[0] assert event.start_local == SYDNEY.localize(datetime(2014, 4, 9, 23)) assert event.end_local == SYDNEY.localize(datetime(2014, 4, 10, 4)) # the event now spans the midnight, therefor it should also show up on the # next day events = dbi.get_time_range(datetime(2014, 4, 10, 0, 0), datetime(2014, 4, 10, 23, 59)) events = list(events) assert len(events) == 1 assert event.start_local == SYDNEY.localize(datetime(2014, 4, 9, 23)) assert event.end_local == SYDNEY.localize(datetime(2014, 4, 10, 4))
def test_event_rrule_this_and_future_allday(): dbi = backend.SQLiteDb('home', ':memory:', locale=LOCALE_BERLIN) dbi.update(event_rrule_this_and_future_allday, href='rrule_this_and_future_allday.ics', etag='abcd') assert dbi.list() == [('rrule_this_and_future_allday.ics', 'abcd')] events = get_allday_range(dbi, date(2014, 4, 30), date(2014, 9, 26)) assert len(events) == 6 assert events[0].start == date(2014, 6, 30) assert events[1].start == date(2014, 7, 8) assert events[2].start == date(2014, 7, 15) assert events[3].start == date(2014, 7, 22) assert events[4].start == date(2014, 7, 29) assert events[5].start == date(2014, 8, 5) assert events[0].end == date(2014, 6, 30) assert events[1].end == date(2014, 7, 8) assert events[2].end == date(2014, 7, 15) assert events[3].end == date(2014, 7, 22) assert events[4].end == date(2014, 7, 29) assert events[5].end == date(2014, 8, 5) assert unicode_type(events[0].summary) == u'Arbeit' for event in events[1:]: assert unicode_type(event.summary) == u'Arbeit (lang)'
def test_event_rrule_recurrence_id(): dbi = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) assert dbi.list(calname) == list() events = dbi.get_localized( BERLIN.localize(dt.datetime(2014, 6, 30, 0, 0)), BERLIN.localize(dt.datetime(2014, 8, 26, 0, 0)), ) assert list(events) == list() dbi.update(_get_text('event_rrule_recuid'), href='12345.ics', etag='abcd', calendar=calname) assert dbi.list(calname) == [('12345.ics', 'abcd')] events = dbi.get_localized( BERLIN.localize(dt.datetime(2014, 6, 30, 0, 0)), BERLIN.localize(dt.datetime(2014, 8, 26, 0, 0)), ) events = sorted(events, key=itemgetter(2)) assert len(events) == 6 # start assert events[0][2] == BERLIN.localize(dt.datetime(2014, 6, 30, 7, 0)) assert events[1][2] == BERLIN.localize(dt.datetime(2014, 7, 7, 9, 0)) assert events[2][2] == BERLIN.localize(dt.datetime(2014, 7, 14, 7, 0)) assert events[3][2] == BERLIN.localize(dt.datetime(2014, 7, 21, 7, 0)) assert events[4][2] == BERLIN.localize(dt.datetime(2014, 7, 28, 7, 0)) assert events[5][2] == BERLIN.localize(dt.datetime(2014, 8, 4, 7, 0)) calendars = dbi.get_localized_calendars( BERLIN.localize(dt.datetime(2014, 6, 30, 0, 0)), BERLIN.localize(dt.datetime(2014, 8, 26, 0, 0)), ) calendars = list(calendars) assert len(calendars) == 6
def test_event_rrule_this_and_future_multi_day_shift(): dbi = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) dbi.update(event_rrule_this_and_future_multi_day_shift, href='12345.ics', etag='abcd', calendar=calname) assert dbi.list(calname) == [('12345.ics', 'abcd')] events = dbi.get_localized(BERLIN.localize(dt.datetime(2014, 4, 30, 0, 0)), BERLIN.localize(dt.datetime(2014, 9, 26, 0, 0))) events = sorted(events, key=itemgetter(2)) assert len(events) == 6 assert events[0][2] == BERLIN.localize(dt.datetime(2014, 6, 30, 7, 0)) assert events[1][2] == BERLIN.localize(dt.datetime(2014, 7, 8, 9, 0)) assert events[2][2] == BERLIN.localize(dt.datetime(2014, 7, 15, 9, 0)) assert events[3][2] == BERLIN.localize(dt.datetime(2014, 7, 22, 9, 0)) assert events[4][2] == BERLIN.localize(dt.datetime(2014, 7, 29, 9, 0)) assert events[5][2] == BERLIN.localize(dt.datetime(2014, 8, 5, 9, 0)) assert events[0][3] == BERLIN.localize(dt.datetime(2014, 6, 30, 12, 0)) assert events[1][3] == BERLIN.localize(dt.datetime(2014, 7, 9, 15, 0)) assert events[2][3] == BERLIN.localize(dt.datetime(2014, 7, 16, 15, 0)) assert events[3][3] == BERLIN.localize(dt.datetime(2014, 7, 23, 15, 0)) assert events[4][3] == BERLIN.localize(dt.datetime(2014, 7, 30, 15, 0)) assert events[5][3] == BERLIN.localize(dt.datetime(2014, 8, 6, 15, 0)) assert 'SUMMARY:Arbeit\n' in events[0][0] for event in events[1:]: assert 'SUMMARY:Arbeit (lang)\n' in event[0]
def test_event_rrule_recurrence_id_reverse(): """as icalendar elements can be saved in arbitrary order, we also have to deal with `reverse` ordered icalendar files """ dbi = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) assert dbi.list(calname) == list() events = dbi.get_localized(BERLIN.localize(datetime(2014, 6, 30, 0, 0)), BERLIN.localize(datetime(2014, 8, 26, 0, 0))) assert list(events) == list() dbi.update(event_rrule_recurrence_id_reverse, href='12345.ics', etag='abcd', calendar=calname) assert dbi.list(calname) == [('12345.ics', 'abcd')] events = dbi.get_localized(BERLIN.localize(datetime(2014, 6, 30, 0, 0)), BERLIN.localize(datetime(2014, 8, 26, 0, 0))) events = sorted(events, key=lambda x: x.start) assert len(events) == 6 assert events[0].start == BERLIN.localize(datetime(2014, 6, 30, 7, 0)) assert events[1].start == BERLIN.localize(datetime(2014, 7, 7, 9, 0)) assert events[2].start == BERLIN.localize(datetime(2014, 7, 14, 7, 0)) assert events[3].start == BERLIN.localize(datetime(2014, 7, 21, 7, 0)) assert events[4].start == BERLIN.localize(datetime(2014, 7, 28, 7, 0)) assert events[5].start == BERLIN.localize(datetime(2014, 8, 4, 7, 0))
def test_event_rrule_this_and_future_allday(): dbi = backend.SQLiteDb('home', ':memory:', locale=locale) dbi.update(event_rrule_this_and_future_allday, href='rrule_this_and_future_allday.ics', etag='abcd') assert dbi.list() == [('rrule_this_and_future_allday.ics', 'abcd')] events = dbi.get_allday_range(date(2014, 4, 30), date(2014, 9, 26)) events = sorted(events, key=lambda x: x.start) assert len(events) == 6 assert events[0].start == date(2014, 6, 30) assert events[1].start == date(2014, 7, 8) assert events[2].start == date(2014, 7, 15) assert events[3].start == date(2014, 7, 22) assert events[4].start == date(2014, 7, 29) assert events[5].start == date(2014, 8, 5) assert events[0].end == date(2014, 7, 1) assert events[1].end == date(2014, 7, 9) assert events[2].end == date(2014, 7, 16) assert events[3].end == date(2014, 7, 23) assert events[4].end == date(2014, 7, 30) assert events[5].end == date(2014, 8, 6) assert unicode_type(events[0].vevent['SUMMARY']) == u'Arbeit' for event in events[1:]: assert unicode_type(event.vevent['SUMMARY']) == u'Arbeit (lang)'
def test_event_rrule_recurrence_id(): dbi = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) assert dbi.list(calname) == list() events = dbi.get_localized(BERLIN.localize(datetime(2014, 6, 30, 0, 0)), BERLIN.localize(datetime(2014, 8, 26, 0, 0))) assert list(events) == list() dbi.update(_get_text('event_rrule_recuid'), href='12345.ics', etag='abcd', calendar=calname) assert dbi.list(calname) == [('12345.ics', 'abcd')] events = dbi.get_localized(BERLIN.localize(datetime(2014, 6, 30, 0, 0)), BERLIN.localize(datetime(2014, 8, 26, 0, 0))) events = sorted(events, key=lambda x: x.start) assert len(events) == 6 assert events[0].start == BERLIN.localize(datetime(2014, 6, 30, 7, 0)) assert events[1].start == BERLIN.localize(datetime(2014, 7, 7, 9, 0)) assert events[2].start == BERLIN.localize(datetime(2014, 7, 14, 7, 0)) assert events[3].start == BERLIN.localize(datetime(2014, 7, 21, 7, 0)) assert events[4].start == BERLIN.localize(datetime(2014, 7, 28, 7, 0)) assert events[5].start == BERLIN.localize(datetime(2014, 8, 4, 7, 0)) events = dbi.get_localized( BERLIN.localize(datetime(2014, 6, 30, 0, 0)), BERLIN.localize(datetime(2014, 8, 26, 0, 0)), minimal=True, ) events = list(events) assert len(events) == 6 for event in events: assert isinstance(event, EventStandIn)
def test_event_rrule_this_and_future(): dbi = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) dbi.update(event_rrule_this_and_future, href='12345.ics', etag='abcd', calendar=calname) assert dbi.list(calname) == [('12345.ics', 'abcd')] events = dbi.get_localized(BERLIN.localize(datetime(2014, 4, 30, 0, 0)), BERLIN.localize(datetime(2014, 9, 26, 0, 0))) events = sorted(events, key=lambda x: x.start) assert len(events) == 6 assert events[0].start == BERLIN.localize(datetime(2014, 6, 30, 7, 0)) assert events[1].start == BERLIN.localize(datetime(2014, 7, 7, 9, 0)) assert events[2].start == BERLIN.localize(datetime(2014, 7, 14, 9, 0)) assert events[3].start == BERLIN.localize(datetime(2014, 7, 21, 9, 0)) assert events[4].start == BERLIN.localize(datetime(2014, 7, 28, 9, 0)) assert events[5].start == BERLIN.localize(datetime(2014, 8, 4, 9, 0)) assert events[0].end == BERLIN.localize(datetime(2014, 6, 30, 12, 0)) assert events[1].end == BERLIN.localize(datetime(2014, 7, 7, 18, 0)) assert events[2].end == BERLIN.localize(datetime(2014, 7, 14, 18, 0)) assert events[3].end == BERLIN.localize(datetime(2014, 7, 21, 18, 0)) assert events[4].end == BERLIN.localize(datetime(2014, 7, 28, 18, 0)) assert events[5].end == BERLIN.localize(datetime(2014, 8, 4, 18, 0)) assert str(events[0].summary) == 'Arbeit' for num, event in enumerate(events[1:]): assert event.raw # just making sure we don't raise any exception assert str(event.summary) == 'Arbeit (lang)'
def test_event_rrule_this_and_future_allday_prior(): event_rrule_this_and_future_allday_prior = \ event_rrule_this_and_future_allday_temp.format(20140705, 20140706) dbi = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) dbi.update(event_rrule_this_and_future_allday_prior, href='rrule_this_and_future_allday.ics', etag='abcd', calendar=calname) assert dbi.list(calname) == [('rrule_this_and_future_allday.ics', 'abcd')] events = list( dbi.get_floating(datetime(2014, 4, 30, 0, 0), datetime(2014, 9, 27, 0, 0))) assert len(events) == 6 assert events[0].start == date(2014, 6, 30) assert events[1].start == date(2014, 7, 5) assert events[2].start == date(2014, 7, 12) assert events[3].start == date(2014, 7, 19) assert events[4].start == date(2014, 7, 26) assert events[5].start == date(2014, 8, 2) assert events[0].end == date(2014, 6, 30) assert events[1].end == date(2014, 7, 5) assert events[2].end == date(2014, 7, 12) assert events[3].end == date(2014, 7, 19) assert events[4].end == date(2014, 7, 26) assert events[5].end == date(2014, 8, 2) assert str(events[0].summary) == 'Arbeit' for event in events[1:]: assert str(event.summary) == 'Arbeit (lang)'
def test_event_rrule_this_and_future_multi_day_shift(): dbi = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) dbi.update(event_rrule_this_and_future_multi_day_shift, href='12345.ics', etag='abcd', calendar=calname) assert dbi.list(calname) == [('12345.ics', 'abcd')] events = dbi.get_localized(BERLIN.localize(datetime(2014, 4, 30, 0, 0)), BERLIN.localize(datetime(2014, 9, 26, 0, 0))) events = sorted(events, key=lambda x: x.start) assert len(events) == 6 assert events[0].start == BERLIN.localize(datetime(2014, 6, 30, 7, 0)) assert events[1].start == BERLIN.localize(datetime(2014, 7, 8, 9, 0)) assert events[2].start == BERLIN.localize(datetime(2014, 7, 15, 9, 0)) assert events[3].start == BERLIN.localize(datetime(2014, 7, 22, 9, 0)) assert events[4].start == BERLIN.localize(datetime(2014, 7, 29, 9, 0)) assert events[5].start == BERLIN.localize(datetime(2014, 8, 5, 9, 0)) assert events[0].end == BERLIN.localize(datetime(2014, 6, 30, 12, 0)) assert events[1].end == BERLIN.localize(datetime(2014, 7, 9, 15, 0)) assert events[2].end == BERLIN.localize(datetime(2014, 7, 16, 15, 0)) assert events[3].end == BERLIN.localize(datetime(2014, 7, 23, 15, 0)) assert events[4].end == BERLIN.localize(datetime(2014, 7, 30, 15, 0)) assert events[5].end == BERLIN.localize(datetime(2014, 8, 6, 15, 0)) assert str(events[0].summary) == 'Arbeit' for event in events[1:]: assert str(event.summary) == 'Arbeit (lang)'
def test_event_rrule_this_and_future(): dbi = backend.SQLiteDb('home', ':memory:', locale=LOCALE_BERLIN) dbi.update(event_rrule_this_and_future, href='12345.ics', etag='abcd') assert dbi.list() == [('12345.ics', 'abcd')] events = dbi.get_time_range(datetime(2014, 4, 30, 0, 0), datetime(2014, 9, 26, 0, 0)) events = sorted(events, key=lambda x: x.start) assert len(events) == 6 assert events[0].start == BERLIN.localize(datetime(2014, 6, 30, 7, 0)) assert events[1].start == BERLIN.localize(datetime(2014, 7, 7, 9, 0)) assert events[2].start == BERLIN.localize(datetime(2014, 7, 14, 9, 0)) assert events[3].start == BERLIN.localize(datetime(2014, 7, 21, 9, 0)) assert events[4].start == BERLIN.localize(datetime(2014, 7, 28, 9, 0)) assert events[5].start == BERLIN.localize(datetime(2014, 8, 4, 9, 0)) assert events[0].end == BERLIN.localize(datetime(2014, 6, 30, 12, 0)) assert events[1].end == BERLIN.localize(datetime(2014, 7, 7, 18, 0)) assert events[2].end == BERLIN.localize(datetime(2014, 7, 14, 18, 0)) assert events[3].end == BERLIN.localize(datetime(2014, 7, 21, 18, 0)) assert events[4].end == BERLIN.localize(datetime(2014, 7, 28, 18, 0)) assert events[5].end == BERLIN.localize(datetime(2014, 8, 4, 18, 0)) assert unicode_type(events[0].summary) == u'Arbeit' for num, event in enumerate(events[1:]): event.raw assert unicode_type(event.summary) == u'Arbeit (lang)'
def test_event_rrule_this_and_future_allday(): dbi = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) dbi.update(event_rrule_this_and_future_allday, href='rrule_this_and_future_allday.ics', etag='abcd', calendar=calname) assert dbi.list(calname) == [('rrule_this_and_future_allday.ics', 'abcd')] events = list(dbi.get_floating(datetime(2014, 4, 30, 0, 0), datetime(2014, 9, 27, 0, 0))) assert len(events) == 6 assert events[0].start == date(2014, 6, 30) assert events[1].start == date(2014, 7, 8) assert events[2].start == date(2014, 7, 15) assert events[3].start == date(2014, 7, 22) assert events[4].start == date(2014, 7, 29) assert events[5].start == date(2014, 8, 5) assert events[0].end == date(2014, 6, 30) assert events[1].end == date(2014, 7, 8) assert events[2].end == date(2014, 7, 15) assert events[3].end == date(2014, 7, 22) assert events[4].end == date(2014, 7, 29) assert events[5].end == date(2014, 8, 5) assert str(events[0].summary) == 'Arbeit' for event in events[1:]: assert str(event.summary) == 'Arbeit (lang)' events = list(dbi.get_floating( datetime(2014, 4, 30, 0, 0), datetime(2014, 9, 27, 0, 0), minimal=True, )) assert len(events) == 6 for event in events: assert isinstance(event, EventStandIn)
def test_event_rrule_multi_this_and_future_allday(): dbi = backend.SQLiteDb('home', ':memory:', locale=locale) dbi.update(event_rrule_multi_this_and_future_allday, href='event_rrule_multi_this_and_future_allday.ics', etag='abcd') assert dbi.list() == [('event_rrule_multi_this_and_future_allday.ics', 'abcd')] events = dbi.get_allday_range(start=date(2014, 4, 30), end=date(2014, 9, 26)) events = sorted(events, key=lambda x: x.start) assert len(events) == 6 assert events[0].start == date(2014, 6, 30) assert events[1].start == date(2014, 7, 12) assert events[2].start == date(2014, 7, 17) assert events[3].start == date(2014, 7, 19) assert events[4].start == date(2014, 7, 24) assert events[5].start == date(2014, 7, 31) assert events[0].end == date(2014, 7, 1) assert events[1].end == date(2014, 7, 14) assert events[2].end == date(2014, 7, 18) assert events[3].end == date(2014, 7, 21) assert events[4].end == date(2014, 7, 25) assert events[5].end == date(2014, 8, 1) assert unicode_type(events[0].vevent['SUMMARY']) == u'Arbeit' for event in [events[1], events[3]]: assert unicode_type(event.vevent['SUMMARY']) == u'Arbeit (lang)' for event in events[2:3] + events[4:]: assert unicode_type(event.vevent['SUMMARY']) == u'Arbeit (neu)'
def test_event_rrule_this_and_future_allday_prior(): event_rrule_this_and_future_allday_prior = \ event_rrule_this_and_future_allday_temp.format(20140705, 20140706) dbi = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) dbi.update(event_rrule_this_and_future_allday_prior, href='rrule_this_and_future_allday.ics', etag='abcd', calendar=calname) assert dbi.list(calname) == [('rrule_this_and_future_allday.ics', 'abcd')] events = list( dbi.get_floating(dt.datetime(2014, 4, 30, 0, 0), dt.datetime(2014, 9, 27, 0, 0))) assert len(events) == 6 assert events[0][2] == dt.date(2014, 6, 30) assert events[1][2] == dt.date(2014, 7, 5) assert events[2][2] == dt.date(2014, 7, 12) assert events[3][2] == dt.date(2014, 7, 19) assert events[4][2] == dt.date(2014, 7, 26) assert events[5][2] == dt.date(2014, 8, 2) assert events[0][3] == dt.date(2014, 7, 1) assert events[1][3] == dt.date(2014, 7, 6) assert events[2][3] == dt.date(2014, 7, 13) assert events[3][3] == dt.date(2014, 7, 20) assert events[4][3] == dt.date(2014, 7, 27) assert events[5][3] == dt.date(2014, 8, 3) assert 'SUMMARY:Arbeit\n' in events[0][0] for event in events[1:]: assert 'SUMMARY:Arbeit (lang)\n' in event[0]
def test_this_and_prior(): """we do not support THISANDPRIOR, therefore this should fail""" dbi = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) with pytest.raises(UpdateFailed): dbi.update(event_rrule_this_and_prior, href='12345.ics', etag='abcd', calendar=calname)
def test_no_valid_timezone(): dbi = backend.SQLiteDb('home', ':memory:', locale=LOCALE_BERLIN) dbi.update(_get_text('event_dt_local_missing_tz'), href='12345.ics', etag='abcd') events = dbi.get_time_range(datetime(2014, 4, 9, 0, 0), datetime(2014, 4, 10, 0, 0)) events = sorted(list(events)) assert len(events) == 1 event = events[0] assert event.start == BERLIN.localize(datetime(2014, 4, 9, 9, 30))
def test_update_one_should_not_affect_others(): """test if an THISANDFUTURE param effects other events as well""" db = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) db.update(_get_text('event_d_15'), href='first', calendar=calname) events = db.get_floating(datetime(2015, 4, 9, 0, 0), datetime(2015, 4, 10, 0, 0)) assert len(list(events)) == 1 db.update(event_rrule_multi_this_and_future_allday, href='second', calendar=calname) events = list(db.get_floating(datetime(2015, 4, 9, 0, 0), datetime(2015, 4, 10, 0, 0))) assert len(events) == 1
def test_no_dtend(): """test support for events with no dtend""" db = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) db.update(_get_text('event_dt_no_end'), href='event_dt_no_end', calendar=calname) events = db.get_floating(datetime(2016, 1, 16, 0, 0), datetime(2016, 1, 17, 0, 0)) event = list(events)[0] assert event.start == date(2016, 1, 16) assert event.end == date(2016, 1, 16)
def test_birthdays_no_fn(): db = backend.SQLiteDb(['home'], ':memory:', locale=LOCALE_BERLIN) assert list(db.get_floating(datetime(1941, 9, 9, 0, 0), datetime(1941, 9, 9, 23, 59, 59, 9999))) == list() db.update_birthday(card_no_fn, 'unix.vcf', calendar=calname) events = list(db.get_floating(datetime(1941, 9, 9, 0, 0), datetime(1941, 9, 9, 23, 59, 59, 9999))) assert len(events) == 1 assert events[0].summary == 'Dennis MacAlistair Ritchie\'s 0th birthday'
def test_update_one_should_not_affect_others(tmpdir): """test if an THISANDFUTURE param effects other events as well""" dbpath = str(tmpdir) + '/khal.db' db = backend.SQLiteDb('home', dbpath, locale=LOCALE_BERLIN) db.update(_get_text('event_d_15'), href='first') events = db.get_allday_range(start=date(2015, 4, 9)) assert len(list(events)) == 1 db.update(event_rrule_multi_this_and_future_allday, href='second') events = db.get_allday_range(start=date(2015, 4, 9)) assert len(list(events)) == 1
def test_birthdays(): db = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) assert list(db.get_floating(start, end)) == list() db.update_birthday(card, 'unix.vcf', calendar=calname) events = list(db.get_floating(start, end)) assert len(events) == 1 assert events[0].summary == 'Unix\'s 0th birthday' events = list(db.get_floating(datetime(2016, 3, 11, 0, 0), datetime(2016, 3, 11, 23, 59, 59, 999))) assert events[0].summary == 'Unix\'s 45th birthday'
def test_zulu_events(): """test if events in Zulu time are correctly recognized as locaized events""" db = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) db.update(_get_text('event_dt_simple_zulu'), href='event_zulu', calendar=calname) events = db.get_localized(BERLIN.localize(datetime(2014, 4, 9, 0, 0)), BERLIN.localize(datetime(2014, 4, 10, 0, 0))) events = list(events) assert len(events) == 1 event = events[0] assert type(event) == LocalizedEvent assert event.start_local == BERLIN.localize(datetime(2014, 4, 9, 11, 30))