from typing import Tuple import pytest from sync_ics2gcal import CalendarConverter uid = "UID:uisgtr8tre93wewe0yr8wqy@test.com" only_start_date = ( uid + """ DTSTART;VALUE=DATE:20180215 """ ) date_val = ( only_start_date + """ DTEND;VALUE=DATE:20180217 """ ) date_duration = ( only_start_date + """ DURATION:P2D """ ) datetime_utc_val = ( uid + """ DTSTART;VALUE=DATE-TIME:20180319T092001Z DTEND:20180321T102501Z """ ) datetime_utc_duration = ( uid + """ DTSTART;VALUE=DATE-TIME:20180319T092001Z DURATION:P2DT1H5M """ ) created_updated = ( date_val + """ CREATED:20180320T071155Z LAST-MODIFIED:20180326T120235Z """ ) def ics_test_cal(content: str) -> str: return "BEGIN:VCALENDAR\r\n{}END:VCALENDAR\r\n".format(content) def ics_test_event(content: str) -> str: return ics_test_cal("BEGIN:VEVENT\r\n{}END:VEVENT\r\n".format(content)) def test_empty_calendar(): converter = CalendarConverter() converter.loads(ics_test_cal("")) evnts = converter.events_to_gcal() assert evnts == [] def test_empty_event(): converter = CalendarConverter() converter.loads(ics_test_event("")) with pytest.raises(KeyError): converter.events_to_gcal() def test_event_no_end(): converter = CalendarConverter() converter.loads(ics_test_event(only_start_date)) with pytest.raises(ValueError): converter.events_to_gcal() @pytest.fixture( params=[ ("date", ics_test_event(date_val), "2018-02-15", "2018-02-17"), ("date", ics_test_event(date_duration), "2018-02-15", "2018-02-17"), ( "dateTime", ics_test_event(datetime_utc_val), "2018-03-19T09:20:01.000001Z", "2018-03-21T10:25:01.000001Z", ), ( "dateTime", ics_test_event(datetime_utc_duration), "2018-03-19T09:20:01.000001Z", "2018-03-21T10:25:01.000001Z", ), ], ids=[ "date values", "date duration", "datetime utc values", "datetime utc duration", ], ) def param_events_start_end(request): return request.param def test_event_start_end(param_events_start_end: Tuple[str, str, str, str]): (date_type, ics_str, start, end) = param_events_start_end converter = CalendarConverter() converter.loads(ics_str) events = converter.events_to_gcal() assert len(events) == 1 event = events[0] assert event["start"] == {date_type: start} assert event["end"] == {date_type: end} def test_event_created_updated(): converter = CalendarConverter() converter.loads(ics_test_event(created_updated)) events = converter.events_to_gcal() assert len(events) == 1 event = events[0] assert event["created"] == "2018-03-20T07:11:55.000001Z" assert event["updated"] == "2018-03-26T12:02:35.000001Z"