def test_update_simple(): event = Event.fromString(_get_text('event_dt_simple'), **EVENT_KWARGS) event_updated = Event.fromString(_get_text('event_dt_simple_updated'), **EVENT_KWARGS) event.update_summary('A not so simple Event') event.update_description('Everything has changed') event.update_location('anywhere') assert normalize_component(event.raw) == normalize_component(event_updated.raw)
def test_sort_event_end(): event_dt = _get_text('event_dt_simple') start = BERLIN.localize(dt.datetime(2014, 4, 9, 9, 30)) end = BERLIN.localize(dt.datetime(2014, 4, 9, 10, 45)) event1 = Event.fromString(event_dt, **EVENT_KWARGS) event2 = Event.fromString(event_dt, start=start, end=end, **EVENT_KWARGS) assert event1 < event2
def test_update_simple(): event = Event.fromString(_get_text('event_dt_simple'), **EVENT_KWARGS) event_updated = Event.fromString(_get_text('event_dt_simple_updated'), **EVENT_KWARGS) event.update_summary('A not so simple Event') event.update_description('Everything has changed') event.update_location('anywhere') event.update_categories(['meeting']) assert normalize_component(event.raw) == normalize_component(event_updated.raw)
def test_cancelled_instance(): orig_event_str = _get_text('event_rrule_recuid_cancelled') event = Event.fromString(orig_event_str, ref='1405314000', **EVENT_KWARGS) assert event.format(SEARCH_FORMAT, dt.date(2014, 7, 14)) == \ 'CANCELLED 14.07.2014 07:00-12:00 Arbeit ⟳\x1b[0m' event = Event.fromString(orig_event_str, ref='PROTO', **EVENT_KWARGS) assert event.format(SEARCH_FORMAT, dt.date(2014, 7, 14)) == \ '30.06.2014 07:00-12:00 Arbeit ⟳\x1b[0m'
def test_update_remove_categories(): event = Event.fromString(_get_text('event_dt_simple_updated'), **EVENT_KWARGS) event_nocat = Event.fromString(_get_text('event_dt_simple_nocat'), **EVENT_KWARGS) event.update_categories([]) assert normalize_component(event.raw) == normalize_component( event_nocat.raw)
def test_list(self, cal_vdir): cal, vdir = cal_vdir event = Event.fromString(event_d, calendar=cal.name, locale=locale) cal.new(event) event = Event.fromString(event_today, calendar=cal.name, locale=locale) cal.new(event) hrefs = sorted(href for href, uid in cal._dbtool.list()) assert set(str(cal._dbtool.get(href).uid) for href in hrefs) == set(( '*****@*****.**', 'V042MJ8B3SJNFXQOJL6P53OFMHJE8Z3VZWOU', ))
def test_list(self, coll_vdirs): coll, vdirs = coll_vdirs event = Event.fromString(event_d, calendar=cal1, locale=aux.locale) coll.new(event) event = Event.fromString(event_today, calendar=cal1, locale=aux.locale) coll.new(event) hrefs = sorted(href for href, uid in coll._backend.list(cal1)) assert set(str(coll._backend.get(href, calendar=cal1).uid) for href in hrefs) == set(( '*****@*****.**', 'V042MJ8B3SJNFXQOJL6P53OFMHJE8Z3VZWOU', ))
def test_list(self, cal_vdir): cal, vdir = cal_vdir event = Event.fromString(event_d, calendar=cal.name, locale=aux.locale) cal.new(event) event = Event.fromString(event_today, calendar=cal.name, locale=aux.locale) cal.new(event) hrefs = sorted(href for href, uid in cal._dbtool.list()) assert set(str(cal._dbtool.get(href).uid) for href in hrefs) == set(( '*****@*****.**', 'V042MJ8B3SJNFXQOJL6P53OFMHJE8Z3VZWOU', ))
def test_search(self, coll_vdirs): coll, vdirs = coll_vdirs assert len(list(coll.search('Event'))) == 0 event = Event.fromString( _get_text('event_dt_simple'), calendar=cal1, locale=LOCALE_BERLIN) coll.new(event, cal1) assert len(list(coll.search('Event'))) == 1 event = Event.fromString( _get_text('event_dt_floating'), calendar=cal1, locale=LOCALE_BERLIN) coll.new(event, cal1) assert len(list(coll.search('Search for me'))) == 1 assert len(list(coll.search('Event'))) == 2
def test_list(self, cal_vdir): cal, vdir = cal_vdir event = Event.fromString(event_d, calendar=cal.name, locale=locale) cal.new(event) event = Event.fromString(event_today, calendar=cal.name, locale=locale) cal.new(event) hrefs = sorted(href for href, uid in cal._dbtool.list()) assert hrefs == [ 'V042MJ8B3SJNFXQOJL6P53OFMHJE8Z3VZWOU.ics', '*****@*****.**' ] assert cal._dbtool.get('*****@*****.**').uid == '*****@*****.**'
def test_list(self, coll_vdirs): coll, vdirs = coll_vdirs event = Event.fromString(event_d, calendar=cal1, locale=aux.locale) coll.new(event) event = Event.fromString(event_today, calendar=cal1, locale=aux.locale) coll.new(event) hrefs = sorted(href for href, uid in coll._backend.list(cal1)) assert set( str(coll._backend.get(href, calendar=cal1).uid) for href in hrefs) == set(( '*****@*****.**', 'V042MJ8B3SJNFXQOJL6P53OFMHJE8Z3VZWOU', ))
def test_event_dt_tz_missing(): """localized event DTSTART;TZID=foo, but VTIMEZONE components missing""" event_str = _get_text('event_dt_local_missing_tz') event = Event.fromString(event_str, **EVENT_KWARGS) assert event.start == BERLIN.localize(datetime(2014, 4, 9, 9, 30)) assert event.end == BERLIN.localize(datetime(2014, 4, 9, 10, 30)) assert event.start_local == BERLIN.localize(datetime(2014, 4, 9, 9, 30)) assert event.end_local == BERLIN.localize(datetime(2014, 4, 9, 10, 30)) event = Event.fromString(event_str, calendar='foobar', locale=MIXED_LOCALE) assert event.start == BERLIN.localize(datetime(2014, 4, 9, 9, 30)) assert event.end == BERLIN.localize(datetime(2014, 4, 9, 10, 30)) assert event.start_local == BOGOTA.localize(datetime(2014, 4, 9, 2, 30)) assert event.end_local == BOGOTA.localize(datetime(2014, 4, 9, 3, 30))
def test_event_dt_tz_missing(): """localized event DTSTART;TZID=foo, but VTIMEZONE components missing""" event_str = _get_text('event_dt_local_missing_tz') event = Event.fromString(event_str, **EVENT_KWARGS) assert event.start == BERLIN.localize(dt.datetime(2014, 4, 9, 9, 30)) assert event.end == BERLIN.localize(dt.datetime(2014, 4, 9, 10, 30)) assert event.start_local == BERLIN.localize(dt.datetime(2014, 4, 9, 9, 30)) assert event.end_local == BERLIN.localize(dt.datetime(2014, 4, 9, 10, 30)) assert event.format('{duration}', relative_to=dt.date.today()) == '1h\x1b[0m' event = Event.fromString(event_str, calendar='foobar', locale=LOCALE_MIXED) assert event.start == BERLIN.localize(dt.datetime(2014, 4, 9, 9, 30)) assert event.end == BERLIN.localize(dt.datetime(2014, 4, 9, 10, 30)) assert event.start_local == BOGOTA.localize(dt.datetime(2014, 4, 9, 2, 30)) assert event.end_local == BOGOTA.localize(dt.datetime(2014, 4, 9, 3, 30))
def test_list(self, coll_vdirs): coll, vdirs = coll_vdirs event = Event.fromString(_get_text('event_d'), calendar=cal1, locale=LOCALE_BERLIN) assert event.etag is None assert event.href is None coll.new(event) assert event.etag is not None assert event.href == 'V042MJ8B3SJNFXQOJL6P53OFMHJE8Z3VZWOU.ics' event = Event.fromString(event_today, calendar=cal1, locale=LOCALE_BERLIN) coll.new(event) hrefs = sorted(href for href, etag in coll._backend.list(cal1)) assert set(str(coll.get_event(href, calendar=cal1).uid) for href in hrefs) == set(( '*****@*****.**', 'V042MJ8B3SJNFXQOJL6P53OFMHJE8Z3VZWOU', ))
def test_event_d_rr(): event_d_rr = _get_text('event_d_rr') event = Event.fromString(event_d_rr, **EVENT_KWARGS) assert event.recurring is True desc = 'Another Event ⟳' assert event.relative_to(date(2014, 4, 9)) == desc assert event.event_description == '09.04.2014: Another Event\nRepeat: FREQ=DAILY;COUNT=10' start = date(2014, 4, 10) end = date(2014, 4, 11) event = Event.fromString(event_d_rr, start=start, end=end, **EVENT_KWARGS) assert event.recurring is True desc = 'Another Event ⟳' assert event.relative_to(date(2014, 4, 10)) == desc assert event.event_description == '10.04.2014: Another Event\nRepeat: FREQ=DAILY;COUNT=10'
def test_transform_event(): """test if transformation between different event types works""" event_d = _get_text('event_d') event = Event.fromString(event_d, **EVENT_KWARGS) assert isinstance(event, AllDayEvent) start = BERLIN.localize(datetime(2014, 4, 9, 9, 30)) end = BERLIN.localize(datetime(2014, 4, 9, 10, 30)) event.update_start_end(start, end) assert isinstance(event, LocalizedEvent) assert event.event_description == '09:30-10:30 09.04.2014: An Event' analog_event = Event.fromString(_get_text('event_dt_simple'), **EVENT_KWARGS) assert normalize_component(event.raw) == normalize_component(analog_event.raw) with pytest.raises(ValueError): event.update_start_end(start, date(2014, 4, 9))
def test_format_colors(): event = Event.fromString(_get_text('event_dt_simple'), **EVENT_KWARGS) format_ = '{red}{title}{reset}' assert human_formatter(format_)(event.attributes(dt.date( 2014, 4, 9))) == '\x1b[31mAn Event\x1b[0m\x1b[0m' assert human_formatter(format_, colors=False)(event.attributes( dt.date(2014, 4, 9), colors=False)) == 'An Event'
def test_event_d_rr(): event_d_rr = _get_text('event_d_rr') event = Event.fromString(event_d_rr, **EVENT_KWARGS) assert event.recurring is True assert event.format(LIST_FORMAT, dt.date(2014, 4, 9)) == ' Another Event ⟳\x1b[0m' assert event.format(SEARCH_FORMAT, dt.date(2014, 4, 9)) == \ '09.04.2014 Another Event ⟳\x1b[0m' assert event.format('{repeat-pattern}', dt.date(2014, 4, 9)) == 'FREQ=DAILY;COUNT=10\x1b[0m' start = dt.date(2014, 4, 10) end = dt.date(2014, 4, 11) event = Event.fromString(event_d_rr, start=start, end=end, **EVENT_KWARGS) assert event.recurring is True assert event.format(LIST_FORMAT, dt.date(2014, 4, 10)) == ' Another Event ⟳\x1b[0m' assert event.format(SEARCH_FORMAT, dt.date(2014, 4, 10)) == \ '10.04.2014 Another Event ⟳\x1b[0m'
def test_no_end(): """reading an event with neither DTEND nor DURATION""" event = Event.fromString(_get_text('event_dt_no_end'), **EVENT_KWARGS) # TODO make sure the event also gets converted to an all day event, as we # usually do assert event.format(SEARCH_FORMAT, dt.date(2014, 4, 12)) == \ '16.01.2016 08:00-17.01.2016 08:00 Test\x1b[0m'
def test_remove_instance_from_two_rdate(): """removing an instance from a recurring event which has two RDATE props""" event = Event.fromString(_get_text('event_dt_two_rd'), **EVENT_KWARGS) assert event.raw.count('RDATE') == 2 event.delete_instance(dt.datetime(2014, 4, 10, 9, 30)) assert event.raw.count('RDATE') == 1 assert 'RDATE:20140411T093000,20140412T093000' in event.raw.split('\r\n')
def test_update_event_d(): event_d = _get_text('event_d') event = Event.fromString(event_d, **EVENT_KWARGS) event.update_start_end(date(2014, 4, 20), date(2014, 4, 22)) assert event.event_description == '20.04. - 22.04.2014: An Event' assert 'DTSTART;VALUE=DATE:20140420' in event.raw.split('\r\n') assert 'DTEND;VALUE=DATE:20140423' in event.raw.split('\r\n')
def test_event_dt_duration(): """event has no end, but duration""" event_dt_duration = _get_text('event_dt_duration') event = Event.fromString(event_dt_duration, **EVENT_KWARGS) assert event.relative_to(date(2014, 4, 9)) == u'09:30-10:30: An Event' assert event.end == BERLIN.localize(datetime(2014, 4, 9, 10, 30)) assert event.event_description == u'09:30-10:30 09.04.2014: An Event'
def test_remove_instance_from_two_rdate(): """removing an instance from a recurring event which has two RDATE props""" event = Event.fromString(_get_text('event_dt_two_rd'), **EVENT_KWARGS) assert event.raw.count('RDATE') == 2 event.delete_instance(datetime(2014, 4, 10, 9, 30)) assert event.raw.count('RDATE') == 1 assert 'RDATE:20140411T093000,20140412T093000' in event.raw.split('\r\n')
def test_event_dt_duration(): """event has no end, but duration""" event_dt_duration = _get_text('event_dt_duration') event = Event.fromString(event_dt_duration, **EVENT_KWARGS) assert event.relative_to(date(2014, 4, 9)) == '09:30-10:30: An Event' assert event.end == BERLIN.localize(datetime(2014, 4, 9, 10, 30)) assert event.event_description == '09:30-10:30 09.04.2014: An Event'
def test_search(self, coll_vdirs): coll, vdirs = coll_vdirs assert len(list(coll.search('Event'))) == 0 event = Event.fromString( _get_text('event_dt_simple'), calendar=cal1, locale=aux.locale) coll.new(event, cal1) assert len(list(coll.search('Event'))) == 1
def test_event_no_dst(): """test the creation of a corect VTIMEZONE for timezones with no dst""" event_no_dst = _get_text('event_no_dst') cal_no_dst = _get_text('cal_no_dst') event = Event.fromString(event_no_dst, calendar='foobar', locale=BOGOTA_LOCALE) assert normalize_component(event.raw) == normalize_component(cal_no_dst) assert event.event_description == '09:30-10:30 09.04.2014: An Event'
def test_multi_uid(): """test for support for events with consist of several sub events with the same uid""" orig_event_str = _get_text('event_rrule_recuid') event = Event.fromString(orig_event_str, **EVENT_KWARGS) for line in orig_event_str.split('\n'): assert line in event.raw.split('\r\n')
def test_remove_instance_from_rrule(): """removing an instance from a recurring event""" event = Event.fromString(_get_text('event_dt_rr'), **EVENT_KWARGS) event.delete_instance(dt.datetime(2014, 4, 10, 9, 30)) assert 'EXDATE:20140410T093000' in event.raw.split('\r\n') event.delete_instance(dt.datetime(2014, 4, 12, 9, 30)) assert 'EXDATE:20140410T093000,20140412T093000' in event.raw.split('\r\n')
def test_raw_d(): event_d = _get_text('event_d') event = Event.fromString(event_d, **EVENT_KWARGS) assert event.raw.split('\r\n') == _get_text('cal_d').split('\n') assert event.format(LIST_FORMAT, dt.date(2014, 4, 9)) == ' An Event\x1b[0m' assert event.format(SEARCH_FORMAT, dt.date(2014, 4, 9)) == '09.04.2014 An Event\x1b[0m'
def test_event_d_rr(): event_d_rr = _get_text('event_d_rr') event = Event.fromString(event_d_rr, **EVENT_KWARGS) assert event.recurring is True assert event.format(LIST_FORMAT, date(2014, 4, 9)) == ' Another Event ⟳\x1b[0m' assert event.format(SEARCH_FORMAT, date(2014, 4, 9)) == \ '09.04.2014 Another Event ⟳\x1b[0m' assert event.format('{repeat-pattern}', date(2014, 4, 9)) == 'FREQ=DAILY;COUNT=10\x1b[0m' start = date(2014, 4, 10) end = date(2014, 4, 11) event = Event.fromString(event_d_rr, start=start, end=end, **EVENT_KWARGS) assert event.recurring is True assert event.format(LIST_FORMAT, date(2014, 4, 10)) == ' Another Event ⟳\x1b[0m' assert event.format(SEARCH_FORMAT, date(2014, 4, 10)) == \ '10.04.2014 Another Event ⟳\x1b[0m'
def test_search(self, coll_vdirs): coll, vdirs = coll_vdirs assert len(list(coll.search('Event'))) == 0 event = Event.fromString( _get_text('event_dt_simple'), calendar=cal1, locale=utils.locale) coll.new(event, cal1) assert len(list(coll.search('Event'))) == 1
def test_remove_instance_from_rrule(): """removing an instance from a recurring event""" event = Event.fromString(_get_text('event_dt_rr'), **EVENT_KWARGS) event.delete_instance(datetime(2014, 4, 10, 9, 30)) assert 'EXDATE:20140410T093000' in event.raw.split('\r\n') event.delete_instance(datetime(2014, 4, 12, 9, 30)) assert 'EXDATE:20140410T093000,20140412T093000' in event.raw.split('\r\n')
def test_event_dt_rr(): event_dt_rr = _get_text('event_dt_rr') event = Event.fromString(event_dt_rr, **EVENT_KWARGS) assert event.recurring is True desc = '09:30-10:30: An Event ⟳' assert event.relative_to(date(2014, 4, 9)) == desc assert event.event_description == \ '09:30-10:30 09.04.2014: An Event\nRepeat: FREQ=DAILY;COUNT=10'
def test_event_no_dst(): """test the creation of a corect VTIMEZONE for timezones with no dst""" event_no_dst = _get_text('event_no_dst') cal_no_dst = _get_text('cal_no_dst') event = Event.fromString(event_no_dst, calendar='foobar', locale=BOGOTA_LOCALE) assert normalize_component(event.raw) == normalize_component(cal_no_dst) assert event.format(SEARCH_FORMAT, date(2014, 4, 10)) == \ '09.04.2014 09:30-10:30 An Event \x1b[0m'
def test_raw_dt(): event_dt = _get_text('event_dt_simple') start = BERLIN.localize(datetime(2014, 4, 9, 9, 30)) end = BERLIN.localize(datetime(2014, 4, 9, 10, 30)) event = Event.fromString(event_dt, start=start, end=end, **EVENT_KWARGS) assert normalize_component(event.raw) == \ normalize_component(_get_text('event_dt_simple_inkl_vtimezone')) assert event.relative_to(date(2014, 4, 9)) == u'09:30-10:30: An Event' event = Event.fromString(event_dt, **EVENT_KWARGS) assert event.relative_to(date(2014, 4, 9)) == u'09:30-10:30: An Event' assert event.event_description == u'09:30-10:30 09.04.2014: An Event' assert event.recurring is False assert event.duration == timedelta(hours=1) assert event.uid == 'V042MJ8B3SJNFXQOJL6P53OFMHJE8Z3VZWOU' assert event.ident == 'V042MJ8B3SJNFXQOJL6P53OFMHJE8Z3VZWOU' assert event.organizer == ''
def test_event_dt_long(): event_dt_long = _get_text('event_dt_long') event = Event.fromString(event_dt_long, **EVENT_KWARGS) assert event.relative_to(date(2014, 4, 9)) == '09:30→ : An Event' # FIXME ugly! replace with one arrow assert event.relative_to(date(2014, 4, 10)) == '→ → : An Event' assert event.relative_to(date(2014, 4, 12)) == '→ 10:30: An Event' assert event.event_description == '09.04.2014 09:30 - 12.04.2014 10:30: An Event'
def test_transform_event(): """test if transformation between different event types works""" event_d = _get_text('event_d') event = Event.fromString(event_d, **EVENT_KWARGS) assert isinstance(event, AllDayEvent) start = BERLIN.localize(datetime(2014, 4, 9, 9, 30)) end = BERLIN.localize(datetime(2014, 4, 9, 10, 30)) event.update_start_end(start, end) assert isinstance(event, LocalizedEvent) assert event.event_description == '09:30-10:30 09.04.2014: An Event' analog_event = Event.fromString(_get_text('event_dt_simple'), **EVENT_KWARGS) assert normalize_component(event.raw) == normalize_component( analog_event.raw) with pytest.raises(ValueError): event.update_start_end(start, date(2014, 4, 9))
def test_remove_instance_from_recuid(): """remove an istance from an event which is specified via an additional VEVENT with the same UID (which we call `recuid` here""" event = Event.fromString(_get_text('event_rrule_recuid'), **EVENT_KWARGS) assert event.raw.split('\r\n').count('UID:event_rrule_recurrence_id') == 2 event.delete_instance(BERLIN.localize(datetime(2014, 7, 7, 7, 0))) assert event.raw.split('\r\n').count('UID:event_rrule_recurrence_id') == 1 assert 'EXDATE;TZID=Europe/Berlin:20140707T070000' in event.raw.split('\r\n')
def test_event_dt_floating(): """start and end time have no timezone, i.e. a floating event""" event_str = _get_text('event_dt_floating') event = Event.fromString(event_str, **EVENT_KWARGS) assert isinstance(event, FloatingEvent) assert event.relative_to(date(2014, 4, 9)) == '09:30-10:30: An Event' assert event.event_description == '09:30-10:30 09.04.2014: An Event' assert event.start == datetime(2014, 4, 9, 9, 30) assert event.end == datetime(2014, 4, 9, 10, 30) assert event.start_local == BERLIN.localize(datetime(2014, 4, 9, 9, 30)) assert event.end_local == BERLIN.localize(datetime(2014, 4, 9, 10, 30)) event = Event.fromString(event_str, calendar='foobar', locale=MIXED_LOCALE) assert event.start == datetime(2014, 4, 9, 9, 30) assert event.end == datetime(2014, 4, 9, 10, 30) assert event.start_local == BOGOTA.localize(datetime(2014, 4, 9, 9, 30)) assert event.end_local == BOGOTA.localize(datetime(2014, 4, 9, 10, 30))
def test_raw_dt(): event_dt = _get_text('event_dt_simple') start = BERLIN.localize(dt.datetime(2014, 4, 9, 9, 30)) end = BERLIN.localize(dt.datetime(2014, 4, 9, 10, 30)) event = Event.fromString(event_dt, start=start, end=end, **EVENT_KWARGS) with freeze_time('2016-1-1'): assert normalize_component(event.raw) == \ normalize_component(_get_text('event_dt_simple_inkl_vtimezone')) event = Event.fromString(event_dt, **EVENT_KWARGS) assert event.format(LIST_FORMAT, dt.date(2014, 4, 9)) == '09:30-10:30 An Event\x1b[0m' assert event.format(SEARCH_FORMAT, dt.date(2014, 4, 9)) == \ '09.04.2014 09:30-10:30 An Event\x1b[0m' assert event.recurring is False assert event.duration == dt.timedelta(hours=1) assert event.uid == 'V042MJ8B3SJNFXQOJL6P53OFMHJE8Z3VZWOU' assert event.organizer == ''
def test_remove_instance_from_recuid(): """remove an istance from an event which is specified via an additional VEVENT with the same UID (which we call `recuid` here""" event = Event.fromString(_get_text('event_rrule_recuid'), **EVENT_KWARGS) assert event.raw.split('\r\n').count('UID:event_rrule_recurrence_id') == 2 event.delete_instance(BERLIN.localize(dt.datetime(2014, 7, 7, 7, 0))) assert event.raw.split('\r\n').count('UID:event_rrule_recurrence_id') == 1 assert 'EXDATE;TZID=Europe/Berlin:20140707T070000' in event.raw.split('\r\n')
def test_raw_dt(): event_dt = _get_text('event_dt_simple') start = BERLIN.localize(datetime(2014, 4, 9, 9, 30)) end = BERLIN.localize(datetime(2014, 4, 9, 10, 30)) event = Event.fromString(event_dt, start=start, end=end, **EVENT_KWARGS) with freeze_time('2016-1-1'): assert normalize_component(event.raw) == \ normalize_component(_get_text('event_dt_simple_inkl_vtimezone')) event = Event.fromString(event_dt, **EVENT_KWARGS) assert event.format(LIST_FORMAT, date(2014, 4, 9)) == '09:30-10:30 An Event \x1b[0m' assert event.format(SEARCH_FORMAT, date(2014, 4, 9)) == \ '09.04.2014 09:30-10:30 An Event \x1b[0m' assert event.recurring is False assert event.duration == timedelta(hours=1) assert event.uid == 'V042MJ8B3SJNFXQOJL6P53OFMHJE8Z3VZWOU' assert event.organizer == ''
def test_raw_dt(): event_dt = _get_text('event_dt_simple') start = BERLIN.localize(datetime(2014, 4, 9, 9, 30)) end = BERLIN.localize(datetime(2014, 4, 9, 10, 30)) event = Event.fromString(event_dt, start=start, end=end, **EVENT_KWARGS) assert normalize_component(event.raw) == \ normalize_component(_get_text('event_dt_simple_inkl_vtimezone')) assert event.relative_to(date(2014, 4, 9)) == '09:30-10:30: An Event' event = Event.fromString(event_dt, **EVENT_KWARGS) assert event.relative_to(date(2014, 4, 9)) == '09:30-10:30: An Event' assert event.event_description == '09:30-10:30 09.04.2014: An Event' assert event.recurring is False assert event.duration == timedelta(hours=1) assert event.uid == 'V042MJ8B3SJNFXQOJL6P53OFMHJE8Z3VZWOU' assert event.ident == 'V042MJ8B3SJNFXQOJL6P53OFMHJE8Z3VZWOU' assert event.organizer == ''
def test_event_dt_long(): event_dt_long = _get_text('event_dt_long') event = Event.fromString(event_dt_long, **EVENT_KWARGS) assert event.format(LIST_FORMAT, dt.date(2014, 4, 9)) == '09:30→ An Event\x1b[0m' assert event.format(LIST_FORMAT, dt.date(2014, 4, 10)) == '↔ An Event\x1b[0m' assert event.format(LIST_FORMAT, dt.date(2014, 4, 12)) == '→10:30 An Event\x1b[0m' assert event.format(SEARCH_FORMAT, dt.date(2014, 4, 10)) == \ '09.04.2014 09:30-12.04.2014 10:30 An Event\x1b[0m'
def test_event_dt_floating(): """start and end time have no timezone, i.e. a floating event""" event_str = _get_text('event_dt_floating') event = Event.fromString(event_str, **EVENT_KWARGS) assert isinstance(event, FloatingEvent) assert event.format(LIST_FORMAT, date(2014, 4, 9)) == '09:30-10:30 An Event \x1b[0m' assert event.format(SEARCH_FORMAT, date(2014, 4, 9)) == \ '09.04.2014 09:30-10:30 An Event \x1b[0m' assert event.start == datetime(2014, 4, 9, 9, 30) assert event.end == datetime(2014, 4, 9, 10, 30) assert event.start_local == BERLIN.localize(datetime(2014, 4, 9, 9, 30)) assert event.end_local == BERLIN.localize(datetime(2014, 4, 9, 10, 30)) event = Event.fromString(event_str, calendar='foobar', locale=MIXED_LOCALE) assert event.start == datetime(2014, 4, 9, 9, 30) assert event.end == datetime(2014, 4, 9, 10, 30) assert event.start_local == BOGOTA.localize(datetime(2014, 4, 9, 9, 30)) assert event.end_local == BOGOTA.localize(datetime(2014, 4, 9, 10, 30))
def test_event_d_two_days(): event_d_long = _get_text('event_d_long') event = Event.fromString(event_d_long, **EVENT_KWARGS) event.update_start_end(dt.date(2014, 4, 9), dt.date(2014, 4, 10)) assert event.format(LIST_FORMAT, dt.date(2014, 4, 9)) == '↦ Another Event\x1b[0m' assert event.format(LIST_FORMAT, dt.date(2014, 4, 10)) == '⇥ Another Event\x1b[0m' assert event.format(LIST_FORMAT, dt.date(2014, 4, 12)) == ' Another Event\x1b[0m' assert event.format(SEARCH_FORMAT, dt.date(2014, 4, 10)) == \ '09.04.2014-10.04.2014 Another Event\x1b[0m'
def test_event_dt_duration(): """event has no end, but duration""" event_dt_duration = _get_text('event_dt_duration') event = Event.fromString(event_dt_duration, **EVENT_KWARGS) assert event.start == BERLIN.localize(datetime(2014, 4, 9, 9, 30)) assert event.end == BERLIN.localize(datetime(2014, 4, 9, 10, 30)) assert event.format(LIST_FORMAT, date(2014, 4, 9)) == '09:30-10:30 An Event \x1b[0m' assert event.format(SEARCH_FORMAT, date(2014, 4, 9)) == \ '09.04.2014 09:30-10:30 An Event \x1b[0m'
def test_event_dt_rr(): event_dt_rr = _get_text('event_dt_rr') event = Event.fromString(event_dt_rr, **EVENT_KWARGS) assert event.recurring is True assert event.format(LIST_FORMAT, date(2014, 4, 9)) == '09:30-10:30 An Event ⟳\x1b[0m' assert event.format(SEARCH_FORMAT, date(2014, 4, 9)) == \ '09.04.2014 09:30-10:30 An Event ⟳\x1b[0m' assert event.format('{repeat-pattern}', date(2014, 4, 9)) == 'FREQ=DAILY;COUNT=10\x1b[0m'
def test_event_dt_long(): event_dt_long = _get_text('event_dt_long') event = Event.fromString(event_dt_long, **EVENT_KWARGS) assert event.format(LIST_FORMAT, date(2014, 4, 9)) == '09:30→ An Event \x1b[0m' assert event.format(LIST_FORMAT, date(2014, 4, 10)) == '↔ An Event \x1b[0m' assert event.format(LIST_FORMAT, date(2014, 4, 12)) == '→10:30 An Event \x1b[0m' assert event.format(SEARCH_FORMAT, date(2014, 4, 10)) == \ '09.04.2014 09:30-12.04.2014 10:30 An Event \x1b[0m'