1
0
mirror of https://github.com/b4tman/sync_ics2gcal synced 2025-02-01 12:28:29 +00:00

type annotations - tests

This commit is contained in:
Dmitry Belyaev 2021-05-01 13:47:02 +03:00
parent 9dab3c5709
commit c41b3a4dbd
Signed by: b4tman
GPG Key ID: 41A00BF15EA7E5F3
2 changed files with 29 additions and 24 deletions

View File

@ -1,3 +1,5 @@
from typing import Tuple
import pytest import pytest
from sync_ics2gcal import CalendarConverter from sync_ics2gcal import CalendarConverter
@ -26,11 +28,11 @@ LAST-MODIFIED:20180326T120235Z
""" """
def ics_test_cal(content): def ics_test_cal(content: str) -> str:
return "BEGIN:VCALENDAR\r\n{}END:VCALENDAR\r\n".format(content) return "BEGIN:VCALENDAR\r\n{}END:VCALENDAR\r\n".format(content)
def ics_test_event(content): def ics_test_event(content: str) -> str:
return ics_test_cal("BEGIN:VEVENT\r\n{}END:VEVENT\r\n".format(content)) return ics_test_cal("BEGIN:VEVENT\r\n{}END:VEVENT\r\n".format(content))
@ -68,7 +70,7 @@ def param_events_start_end(request):
return request.param return request.param
def test_event_start_end(param_events_start_end): def test_event_start_end(param_events_start_end: Tuple[str, str, str, str]):
(date_type, ics_str, start, end) = param_events_start_end (date_type, ics_str, start, end) = param_events_start_end
converter = CalendarConverter() converter = CalendarConverter()
converter.loads(ics_str) converter.loads(ics_str)

View File

@ -3,6 +3,7 @@ import hashlib
import operator import operator
from copy import deepcopy from copy import deepcopy
from random import shuffle from random import shuffle
from typing import Union, List, Dict, Optional
import dateutil.parser import dateutil.parser
import pytest import pytest
@ -11,7 +12,7 @@ from pytz import timezone, utc
from sync_ics2gcal import CalendarSync from sync_ics2gcal import CalendarSync
def sha1(string): def sha1(string: Union[str, bytes]) -> str:
if isinstance(string, str): if isinstance(string, str):
string = string.encode('utf8') string = string.encode('utf8')
h = hashlib.sha1() h = hashlib.sha1()
@ -19,55 +20,57 @@ def sha1(string):
return h.hexdigest() return h.hexdigest()
def gen_events(start, stop, start_time, no_time=False): def gen_events(start: int,
stop: int,
start_time: Union[datetime.datetime, datetime.date],
no_time: bool = False) -> List[Dict[str, Union[str, Dict[str, str]]]]:
if no_time: if no_time:
start_time = datetime.date( start_time = datetime.date(
start_time.year, start_time.month, start_time.day) start_time.year, start_time.month, start_time.day)
duration = datetime.date(1, 1, 2) - datetime.date(1, 1, 1) duration: datetime.timedelta = datetime.date(1, 1, 2) - datetime.date(1, 1, 1)
date_key = "date" date_key: str = "date"
suff = '' date_end: str = ''
else: else:
start_time = utc.normalize( start_time = utc.normalize(
start_time.astimezone(utc)).replace(tzinfo=None) start_time.astimezone(utc)).replace(tzinfo=None)
duration = datetime.datetime( duration: datetime.timedelta = datetime.datetime(1, 1, 1, 2) - datetime.datetime(1, 1, 1, 1)
1, 1, 1, 2) - datetime.datetime(1, 1, 1, 1) date_key: str = "dateTime"
date_key = "dateTime" date_end: str = 'Z'
suff = 'Z'
result = [] result: List[Dict[str, Union[str, Dict[str, str]]]] = []
for i in range(start, stop): for i in range(start, stop):
event_start = start_time + (duration * i) event_start = start_time + (duration * i)
event_end = event_start + duration event_end = event_start + duration
updated = event_start updated: Union[datetime.datetime, datetime.date] = event_start
if no_time: if no_time:
updated = datetime.datetime( updated = datetime.datetime(
updated.year, updated.month, updated.day, 0, 0, 0, 1, tzinfo=utc) updated.year, updated.month, updated.day, 0, 0, 0, 1, tzinfo=utc)
event = { event: Dict[str, Union[str, Dict[str, str]]] = {
'summary': 'test event __ {}'.format(i), 'summary': 'test event __ {}'.format(i),
'location': 'la la la {}'.format(i), 'location': 'la la la {}'.format(i),
'description': 'test TEST -- test event {}'.format(i), 'description': 'test TEST -- test event {}'.format(i),
"iCalUID": "{}@test.com".format(sha1("test - event {}".format(i))), "iCalUID": "{}@test.com".format(sha1("test - event {}".format(i))),
"updated": updated.isoformat() + 'Z', "updated": updated.isoformat() + 'Z',
"created": updated.isoformat() + 'Z' "created": updated.isoformat() + 'Z',
'start': {date_key: event_start.isoformat() + date_end},
'end': {date_key: event_end.isoformat() + date_end}
} }
event['start'] = {date_key: event_start.isoformat() + suff}
event['end'] = {date_key: event_end.isoformat() + suff}
result.append(event) result.append(event)
return result return result
def gen_list_to_compare(start, stop): def gen_list_to_compare(start: int, stop: int) -> List[Dict[str, str]]:
result = [] result: List[Dict[str, str]] = []
for i in range(start, stop): for i in range(start, stop):
result.append({'iCalUID': 'test{:06d}'.format(i)}) result.append({'iCalUID': 'test{:06d}'.format(i)})
return result return result
def get_start_date(event): def get_start_date(event: Dict[str, Union[str, Dict[str, str]]]) -> Union[datetime.datetime, datetime.date]:
event_start = event['start'] event_start: Dict[str, str] = event['start']
start_date = None start_date: Optional[str] = None
is_date = False is_date = False
if 'date' in event_start: if 'date' in event_start:
start_date = event_start['date'] start_date = event_start['date']
@ -113,7 +116,7 @@ def test_compare():
@pytest.mark.parametrize("no_time", [True, False], ids=['date', 'dateTime']) @pytest.mark.parametrize("no_time", [True, False], ids=['date', 'dateTime'])
def test_filter_events_by_date(no_time): def test_filter_events_by_date(no_time: bool):
msk = timezone('Europe/Moscow') msk = timezone('Europe/Moscow')
now = utc.localize(datetime.datetime.utcnow()) now = utc.localize(datetime.datetime.utcnow())
msk_now = msk.normalize(now.astimezone(msk)) msk_now = msk.normalize(now.astimezone(msk))