mirror of
				https://github.com/b4tman/sync_ics2gcal
				synced 2025-11-04 04:38:26 +00:00 
			
		
		
		
	type annotations - tests
This commit is contained in:
		@@ -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)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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))
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user