Skip to content
Snippets Groups Projects
Commit 04bb06c3 authored by OndraRehounek's avatar OndraRehounek
Browse files

calendar_utils: Fix tests

parent f7f18df7
Branches
No related tags found
2 merge requests!496Release,!488calendar_utils: Replace ics library with icalevnt
Pipeline #8033 passed
Showing with 551 additions and 667 deletions
......@@ -3,4 +3,4 @@
line_length = 88
multi_line_output = 3
include_trailing_comma = true
known_third_party = PyPDF2,arrow,bleach,bs4,captcha,celery,django,environ,faker,fastjsonschema,icalevnt,markdown,modelcluster,pirates,pytest,pytz,requests,sentry_sdk,snapshottest,taggit,wagtail,wagtailmetadata,weasyprint,yaml,zoneinfo
known_third_party = PyPDF2,arrow,bleach,bs4,captcha,celery,django,environ,faker,fastjsonschema,icalevnt,markdown,modelcluster,pirates,pytest,pytz,requests,sentry_sdk,taggit,wagtail,wagtailmetadata,weasyprint,yaml,zoneinfo
......@@ -38,25 +38,27 @@ class Calendar(models.Model):
past_events = EventsJSONField(encoder=DjangoJSONEncoder, null=True)
future_events = EventsJSONField(encoder=DjangoJSONEncoder, null=True)
def update_source(self):
event_list = icalevents.events(
url=self.url,
start=date.today() - timedelta(days=30),
end=date.today() + timedelta(days=60),
)
def current_events(self):
return self.future_events[: self.CURRENT_NUM]
def handle_event_list(self, event_list):
event_list_hash = str(hash(str(event_list)))
if event_list_hash != self.event_hash:
past, future = process_event_list(event_list)
self.past_events = past
self.future_events = list(reversed(future))
self.future_events = future
self.event_hash = event_list_hash
self.last_update = arrow.utcnow().datetime
self.save()
def current_events(self):
return self.future_events[: self.CURRENT_NUM]
def update_source(self):
event_list = icalevents.events(
url=self.url,
start=date.today() - timedelta(days=30),
end=date.today() + timedelta(days=60),
)
self.handle_event_list(event_list)
class CalendarMixin(models.Model):
......
......@@ -9,7 +9,6 @@ from zoneinfo import ZoneInfo
if TYPE_CHECKING:
from icalevnt.icalparser import Event
# FIXME "name" is "summary" and "begin" is "start" now
EVENT_KEYS = ("start", "end", "all_day", "summary", "description", "location")
......@@ -18,7 +17,7 @@ def split_event_dict_list(event_list: "list[dict]") -> tuple[list[dict], list[di
singularity = arrow.utcnow().shift(hours=-2)
past = [ev for ev in event_list if ev["end"] < singularity]
future = [ev for ev in event_list if ev["end"] > singularity]
future = list(reversed([ev for ev in event_list if ev["end"] > singularity]))
return past, future
......
import json
from datetime import datetime
from pathlib import Path
import pytest
from django.db import connection
from icalevnt.icalparser import Event
from calendar_utils.models import CalendarMixin
@pytest.fixture(scope="session")
def sample():
return (Path(__file__).parent / "sample.ics").read_text()
def sample_response():
event_dict_list = json.loads(
(Path(__file__).parent / "samples" / "response.json").read_text()
)
event_list = []
for event_dict in event_dict_list:
event = Event()
event.start = datetime.fromisoformat(event_dict["start"])
event.end = datetime.fromisoformat(event_dict["end"])
event.summary = event_dict["summary"]
event.all_day = event_dict["all_day"]
event.description = event_dict["description"]
event.location = event_dict["location"]
event_list.append(event)
return event_list
@pytest.fixture(scope="session")
def sample_events():
event_dict_list = json.loads(
(Path(__file__).parent / "samples" / "response.json").read_text()
)
for event_dict in event_dict_list:
event_dict["start"] = datetime.fromisoformat(event_dict["start"])
event_dict["end"] = datetime.fromisoformat(event_dict["end"])
return event_dict_list
@pytest.fixture(scope="session")
def sample_past_events():
event_dict_list = json.loads(
(Path(__file__).parent / "samples" / "past_events.json").read_text()
)
for event_dict in event_dict_list:
event_dict["start"] = datetime.fromisoformat(event_dict["start"])
event_dict["end"] = datetime.fromisoformat(event_dict["end"])
return event_dict_list
@pytest.fixture(scope="session")
def sample_future_events():
event_dict_list = json.loads(
(Path(__file__).parent / "samples" / "future_events.json").read_text()
)
for event_dict in event_dict_list:
event_dict["start"] = datetime.fromisoformat(event_dict["start"])
event_dict["end"] = datetime.fromisoformat(event_dict["end"])
return event_dict_list
class DummyModel(CalendarMixin):
......
BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:Piráti XOLK
X-WR-TIMEZONE:Europe/Prague
X-WR-CALDESC:Kalendář Pirátů olomouckého krajského sdružení.\nVíce zde: htt
ps://olomoucky.pirati.cz\nnebo na našem facebooku: https://www.facebook.com
/piratiOlomoucko/
BEGIN:VTIMEZONE
TZID:Europe/Prague
X-LIC-LOCATION:Europe/Prague
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;TZID=Europe/Prague:20200107T180000
DTEND;TZID=Europe/Prague:20200107T210000
RRULE:FREQ=MONTHLY;BYDAY=1TU
DTSTAMP:20200519T130457Z
UID:nmrttnjrbd0bjsmj4oabog7g46@google.com
CREATED:20180926T191919Z
DESCRIPTION:
LAST-MODIFIED:20200505T161640Z
LOCATION:PiCOlo\, 8. května 522/5\, 779 00 Olomouc\, Česko
SEQUENCE:2
STATUS:CONFIRMED
SUMMARY:Veřejná schůze Pirátů Olomouckého kraje
TRANSP:OPAQUE
X-APPLE-STRUCTURED-LOCATION;VALUE=URI;X-APPLE-MAPKIT-HANDLE=CAESswEaEgkf60w
rNMxIQBEtRW0jpz8xQCJaChHEjGVza8OhIHJlcHVibGlrYRICQ1oaCk9sb21vdWNrw70qB09sb2
1vdWMyB09sb21vdWM6Bjc3OSAwMFIKOC4ga3bEm3RuYVoBOGIMOC4ga3bEm3RuYSA4Kgw4LiBrd
sSbdG5hIDgyDDguIGt2xJt0bmEgODIONzc5IDAwIE9sb21vdWMyEcSMZXNrw6EgcmVwdWJsaWth
ODlAAQ==;X-APPLE-RADIUS=70.58737122558885;X-APPLE-REFERENCEFRAME=1;X-TITLE=
"PiCOlo, 8. května 522/5, 779 00 Olomouc, Česko":geo:49.595342,17.248644
X-APPLE-TRAVEL-ADVISORY-BEHAVIOR;ACKNOWLEDGED=20200505T161640Z:AUTOMATIC
BEGIN:VALARM
ACTION:NONE
TRIGGER;VALUE=DATE-TIME:19760401T005545Z
X-WR-ALARMUID:298355D7-4042-4B14-9109-5936F652F4AA
UID:298355D7-4042-4B14-9109-5936F652F4AA
ACKNOWLEDGED:20200505T161640Z
X-APPLE-DEFAULT-ALARM:TRUE
END:VALARM
END:VEVENT
BEGIN:VEVENT
DTSTART:20200408T160000Z
DTEND:20200408T173000Z
DTSTAMP:20200519T130457Z
UID:6e2plsoro6fu52ufhd7iq5fpd1@google.com
CREATED:20200308T175153Z
DESCRIPTION:
LAST-MODIFIED:20200308T175206Z
LOCATION:Picolo - Pirátské centrum Olomouc\, 8. května 522/5\, 779 00 Olomo
uc\, Česko
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Setkání s místopředsedou Evropského parlamentu Marcelem Kolalokou
TRANSP:OPAQUE
BEGIN:VALARM
ACTION:EMAIL
TRIGGER;VALUE=DURATION:-PT1H
SUMMARY:Default Mozilla Summary
DESCRIPTION:Default Mozilla Description
X-LIC-ERROR;X-LIC-ERRORTYPE=PARAMETER-VALUE-PARSE-ERROR:Got a VALUE paramet
er with an illegal type for property: VALUE=DURATION
END:VALARM
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER;VALUE=DURATION:-PT30M
DESCRIPTION:Default Mozilla Description
X-LIC-ERROR;X-LIC-ERRORTYPE=PARAMETER-VALUE-PARSE-ERROR:Got a VALUE paramet
er with an illegal type for property: VALUE=DURATION
END:VALARM
END:VEVENT
BEGIN:VEVENT
DTSTART:20200301T140000Z
DTEND:20200301T170000Z
DTSTAMP:20200519T130457Z
UID:2e3hpgkhl60mmne8012hghfnfp@google.com
CREATED:20200226T180446Z
DESCRIPTION:Tato událost má videohovor.\nPřipojit se: https://meet.google.c
om/ahv-nrmw-kmp\n+1 484-696-1205 PIN: 546973991#
LAST-MODIFIED:20200226T192157Z
LOCATION:Koliba & Pivovar U Tří králů\, Finská 4592/8\, 796 01 Prostějov\,
Česko
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Veřejná schůze Prostějovských Pirátů 01.03.2020
TRANSP:OPAQUE
END:VEVENT
BEGIN:VEVENT
DTSTART:20200221T173000Z
DTEND:20200221T210000Z
DTSTAMP:20200519T130457Z
UID:3o7vh5n89qlt79qorsfsbsmnjm@google.com
CREATED:20200120T165424Z
DESCRIPTION:Tradiční páteční deskohraní s Karlem Bezejmeným. K zapůjčení bud
ou deskové hry všeho druhu – a to jak jednoduché\, tak náročnější pro ty\,
kteří se nebojí u hry strávit delší dobu. Všechny pravidla Vám budou vysvět
lena. Nemusíte se bát.
LAST-MODIFIED:20200219T172956Z
LOCATION:Picolo - Pirátské centrum Olomouc\, 8. května 522/5\, 779 00 Olomo
uc\, Česko
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Páteční deskovky v Picolu - Karel Bezejmenný
TRANSP:OPAQUE
X-APPLE-STRUCTURED-LOCATION;VALUE=URI;X-APPLE-MAPKIT-HANDLE=CAES6wEI2TIaEgk
czMsGPsxIQBF9BWnGoj8xQCJiChHEjGVza8OhIHJlcHVibGlrYRICQ1oaCk9sb21vdWNrw70qB0
9sb21vdWMyB09sb21vdWM6Bjc3OSAwMFIKOC4ga3bEm3RuYVoFNTIyLzViEDguIGt2xJt0bmEgN
TIyLzUqEDguIGt2xJt0bmEgNTIyLzUyEDguIGt2xJt0bmEgNTIyLzUyDjc3OSAwMCBPbG9tb3Vj
MhHEjGVza8OhIHJlcHVibGlrYTg5QABaIwohEhIJHMzLBj7MSEARfQVpxqI/MUAY2TIgh6v++tO
opP88;X-APPLE-RADIUS=70.58737122607558;X-APPLE-REFERENCEFRAME=1;X-TITLE="Pi
colo - Pirátské centrum Olomouc, 8. května 522/5, 779 00 Olomouc, Česko":ge
o:49.595643,17.248577
END:VEVENT
BEGIN:VEVENT
DTSTART:20200324T170000Z
DTEND:20200324T183000Z
DTSTAMP:20200519T130457Z
UID:0lgp3r3r3s6a8fu0ubedd0lfov@google.com
CREATED:20200210T181941Z
DESCRIPTION:Přednáší MUDr. Marti Moron
LAST-MODIFIED:20200210T181941Z
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Je kouření stejně škodlivé jako vapování?
TRANSP:OPAQUE
END:VEVENT
BEGIN:VEVENT
DTSTART:20200217T173000Z
DTEND:20200217T203000Z
DTSTAMP:20200519T130457Z
UID:ccr66c9p6kp6ab9k71j32b9k69im6b9p69hj8b9mchim2dpn6cp3idhl6o@google.com
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;X-NUM-GUE
STS=0:mailto:0014epo7k8kbgpgq3gaudeodnc@group.calendar.google.com
CREATED:20200118T124251Z
DESCRIPTION:
LAST-MODIFIED:20200203T194315Z
LOCATION:Nebe počká\, 20\, Kratochvílova 122\, Město\, 750 02 Přerov\, Česk
o
SEQUENCE:2
STATUS:CONFIRMED
SUMMARY:Schůzka Piráti Přerov
TRANSP:OPAQUE
END:VEVENT
BEGIN:VEVENT
DTSTART:20200123T170000Z
DTEND:20200123T200000Z
DTSTAMP:20200519T130457Z
UID:28at6d7pbb6u7un4c8dhk54n3m@google.com
CREATED:20200120T201202Z
DESCRIPTION:
LAST-MODIFIED:20200120T201202Z
LOCATION:The 27 Music Bar\, Školní 24\, 796 01 Prostějov\, Česko
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Veřejná schůze Prostějovských Pirátů
TRANSP:TRANSPARENT
END:VEVENT
BEGIN:VEVENT
DTSTART;VALUE=DATE:20200111
DTEND;VALUE=DATE:20200113
DTSTAMP:20200519T130457Z
UID:c9i3gohj70rj8b9k65j68b9k70q3ibb16sqm4b9m6thm8dj4cpijcdhj6s@google.com
CREATED:20191117T100010Z
DESCRIPTION:
LAST-MODIFIED:20200110T192704Z
LOCATION:
SEQUENCE:1
STATUS:TENTATIVE
SUMMARY:CF Ostrava
TRANSP:OPAQUE
X-APPLE-TRAVEL-ADVISORY-BEHAVIOR:AUTOMATIC
BEGIN:VALARM
ACTION:AUDIO
TRIGGER:-PT15H
X-WR-ALARMUID:F3784E51-6388-41CD-B559-202442F2AE8D
UID:F3784E51-6388-41CD-B559-202442F2AE8D
ATTACH;VALUE=URI:Basso
X-APPLE-DEFAULT-ALARM:TRUE
ACKNOWLEDGED:20200110T192657Z
END:VALARM
END:VEVENT
BEGIN:VEVENT
DTSTART;TZID=Europe/Prague:20200115T180000
DTEND;TZID=Europe/Prague:20200115T210000
RRULE:FREQ=MONTHLY;BYDAY=3WE
DTSTAMP:20200519T130457Z
UID:mt8j5rq9jsh2p1ped9belnb234@google.com
CREATED:20190906T082036Z
DESCRIPTION:
LAST-MODIFIED:20200109T171048Z
LOCATION:
SEQUENCE:3
STATUS:CONFIRMED
SUMMARY:Veřejná schůze Pirátů MS Olomouc
TRANSP:OPAQUE
END:VEVENT
BEGIN:VEVENT
DTSTART;TZID=Europe/Prague:20190410T180000
DTEND;TZID=Europe/Prague:20190410T210000
DTSTAMP:20200519T130457Z
UID:kfj8altfbk38ils1cs1247kv6c@google.com
RECURRENCE-ID;TZID=Europe/Prague:20190410T180000
CREATED:20180926T191919Z
DESCRIPTION:
LAST-MODIFIED:20191213T161303Z
LOCATION:Jeseník
SEQUENCE:1
STATUS:CONFIRMED
SUMMARY:Veřejná schůze Pirátů XOLK v Jeseníku
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR
[
{
"start": "2022-05-16T16:00:00+02:00",
"end": "2022-05-16T17:30:00+02:00",
"all_day": false,
"summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)",
"description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>",
"location": ""
},
{
"start": "2022-05-19T17:00:00+02:00",
"end": "2022-05-19T19:00:00+02:00",
"all_day": false,
"summary": "Proch\u00e1zka s architekty - Vize s\u00eddli\u0161t\u011b \u010e\u00e1blice",
"description": "Kr\u00e1sn\u00e9 Kobylisy por\u00e1daji tak\u00e9 proch\u00e1zku po s\u00eddlisti D\u00e1blice, na niz architekti a urbanist\u00e9 predstav\u00ed moznou budouci podobu ieho neizaj\u00edmav\u00e8 sich mist. Akci zakonc\u00ed pr\u00e1telsk\u00e9 posezen\u00ed v pivovaru Cobolis. Bud'te u toho!",
"location": "Kulturn\u00ed d\u016fm L\u00e1dv\u00ed\nBure\u0161ova 2, 182 00 Praha, \u010cesk\u00e1 republika"
},
{
"start": "2022-05-23T16:00:00+02:00",
"end": "2022-05-23T17:30:00+02:00",
"all_day": false,
"summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)",
"description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>",
"location": ""
},
{
"start": "2022-05-24T18:00:00+02:00",
"end": "2022-05-24T20:00:00+02:00",
"all_day": false,
"summary": "Beseda o budouc\u00ed podob\u011b s\u00eddli\u0161t\u011b \u010e\u00e1blice",
"description": "Spolek Kr\u00e1sn\u00e9 Kobylisy a M\u00a2 Praha 8 v\u00e1s prostrednictvim radn\u00edho Tom\u00e1Se Hrebika zvou na besedu v Kulturn\u00edm dom\u00e8 L\u00e1dvi.\nCek\u00e1 s\u00eddlist\u00e9 promysleny rozvoj, nebo prom\u00e9na v betonovou dZungli? Jak\u00e9 se tvori pl\u00e1ny na ochranu s\u00eddlist\u00e9 pred nez\u00e1douci\nvystavbou? Pozv\u00e1n\u00ed prijali odborn\u00edci a architekturu a urbanistiku, z\u00e1stupci M\u00e8stsk\u00e9 c\u00e1sti Praha 8 a Magistr\u00e1tu hlavn\u00edho m\u00e8sta Prahy.",
"location": "Kulturn\u00ed d\u016fm L\u00e1dv\u00ed\nBure\u0161ova 2, 182 00 Praha, \u010cesk\u00e1 republika"
},
{
"start": "2022-05-27T09:30:00+02:00",
"end": "2022-05-27T12:00:00+02:00",
"all_day": false,
"summary": "Anthropoid80 - Rekonstrukce atent\u00e1tu",
"description": "",
"location": "Pam\u00e1tn\u00edk Operace Anthropoid\nV Hole\u0161ovi\u010dk\u00e1ch, 182 00 Praha, \u010cesk\u00e1 republika"
},
{
"start": "2022-05-27T14:00:00+02:00",
"end": "2022-05-27T22:00:00+02:00",
"all_day": false,
"summary": "Anthropoid80",
"description": "",
"location": "Thomayerovy sady\nThomayerovy sady, 180 00 Praha, \u010cesk\u00e1 republika"
},
{
"start": "2022-05-28T11:00:00+02:00",
"end": "2022-05-28T22:00:00+02:00",
"all_day": false,
"summary": "Anthropoid80",
"description": "",
"location": "Thomayerovy sady\nThomayerovy sady, 180 00 Praha, \u010cesk\u00e1 republika"
},
{
"start": "2022-06-02T18:00:00+02:00",
"end": "2022-06-02T20:00:00+02:00",
"all_day": false,
"summary": "Krajsk\u00e1 sch\u016fze pra\u017esk\u00fdch Pir\u00e1t\u016f",
"description": "Op\u011bt tu m\u00e1me prvn\u00ed \u010dtvrtek v m\u011bs\u00edci a s n\u00edm pravidelnou sch\u016fzi kraje Praha. Dozv\u00edte se zpr\u00e1vy se Sn\u011bmovny, z Magistr\u00e1tu, z m\u011bstsk\u00fdch \u010d\u00e1st\u00ed, p\u0159edstav\u00ed se z\u00e1jemci o \u010dlenstv\u00ed a z\u00e1jemci o spolupr\u00e1ci s n\u00e1mi v\u016fbec.&nbsp;<br><br>",
"location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko"
},
{
"start": "2022-06-06T17:00:00+02:00",
"end": "2022-06-06T19:00:00+02:00",
"all_day": false,
"summary": "P8 - KDP (Komise pro dopravu)",
"description": "kontaktn\u00ed osoba: Michal Nov\u00e1k (Michal.Novak@pirati.cz)<br><a href=\"https://www.praha8.cz/Komise-pro-dopravu-2018-2022.html\">web</a>",
"location": ""
},
{
"start": "2022-06-20T16:00:00+02:00",
"end": "2022-06-20T17:30:00+02:00",
"all_day": false,
"summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)",
"description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>",
"location": ""
},
{
"start": "2022-06-22T14:00:00+02:00",
"end": "2022-06-22T17:00:00+02:00",
"all_day": false,
"summary": "Zastupitelstvo M\u010c Praha 8",
"description": "https://www.praha8.cz/Harmonogram-a-program-zasedani-zastupitelstva.html",
"location": "U Meteoru 6\nPraha, \u010cesk\u00e1 republika"
},
{
"start": "2022-07-07T18:00:00+02:00",
"end": "2022-07-07T20:00:00+02:00",
"all_day": false,
"summary": "Krajsk\u00e1 sch\u016fze pra\u017esk\u00fdch Pir\u00e1t\u016f",
"description": "Op\u011bt tu m\u00e1me prvn\u00ed \u010dtvrtek v m\u011bs\u00edci a s n\u00edm pravidelnou sch\u016fzi kraje Praha. Dozv\u00edte se zpr\u00e1vy se Sn\u011bmovny, z Magistr\u00e1tu, z m\u011bstsk\u00fdch \u010d\u00e1st\u00ed, p\u0159edstav\u00ed se z\u00e1jemci o \u010dlenstv\u00ed a z\u00e1jemci o spolupr\u00e1ci s n\u00e1mi v\u016fbec.&nbsp;<br><br>",
"location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko"
}
]
[
{
"start": "2022-05-09T18:00:00+02:00",
"end": "2022-05-09T21:00:00+02:00",
"all_day": false,
"summary": "P8: Sch\u016fzka MS",
"description": "V\u00edce informac\u00ed na: \nhttps://forum.pirati.cz/viewtopic.php?p=807442#p807442",
"location": "Rezidence ROSA\nSt\u0159elni\u010dn\u00e1 1680/8, 182 00 Praha, \u010cesk\u00e1 republika"
},
{
"start": "2022-05-09T17:00:00+02:00",
"end": "2022-05-09T19:00:00+02:00",
"all_day": false,
"summary": "P8 - KDP (Komise pro dopravu)",
"description": "kontaktn\u00ed osoba: Michal Nov\u00e1k (Michal.Novak@pirati.cz)<br><a href=\"https://www.praha8.cz/Komise-pro-dopravu-2018-2022.html\">web</a>",
"location": ""
},
{
"start": "2022-05-09T00:00:00+02:00",
"end": "2022-05-12T00:00:00+02:00",
"all_day": true,
"summary": "Volba 13.\u201320. pozice - MS Praha 8 (1. kolo)",
"description": "",
"location": ""
},
{
"start": "2022-05-06T14:00:00+02:00",
"end": "2022-05-06T15:00:00+02:00",
"all_day": false,
"summary": "Pietn\u00ed akt",
"description": "https://www.facebook.com/csol.cz/posts/4955450444502712.",
"location": "Kobylisk\u00e1 st\u0159elnice\nBojasova 13, 182 00 Praha, \u010cesk\u00e1 republika"
},
{
"start": "2022-05-05T18:00:00+02:00",
"end": "2022-05-05T20:00:00+02:00",
"all_day": false,
"summary": "Krajsk\u00e1 sch\u016fze pra\u017esk\u00fdch Pir\u00e1t\u016f",
"description": "Op\u011bt tu m\u00e1me prvn\u00ed \u010dtvrtek v m\u011bs\u00edci a s n\u00edm pravidelnou sch\u016fzi kraje Praha. Dozv\u00edte se zpr\u00e1vy se Sn\u011bmovny, z Magistr\u00e1tu, z m\u011bstsk\u00fdch \u010d\u00e1st\u00ed, p\u0159edstav\u00ed se z\u00e1jemci o \u010dlenstv\u00ed a z\u00e1jemci o spolupr\u00e1ci s n\u00e1mi v\u016fbec.&nbsp;<br><br>",
"location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko"
},
{
"start": "2022-05-04T16:00:00+02:00",
"end": "2022-05-04T18:00:00+02:00",
"all_day": false,
"summary": "P8 - KKV\u010c (Komise pro kulturu a voln\u00fd \u010das)",
"description": "Sch\u016fze b\u00fdvaj\u00ed: Libe\u0148sk\u00fd z\u00e1mek, m\u00edstnost \u010d. 2, v dob\u011b pandemie online<br><br>kontaktn\u00ed osoba: <a href=\"https://praha8.pirati.cz/lide/martin-stanek/\">Martin Stan\u011bk</a>\u00a0-\u00a0<a href=\"mailto:Martin.Stanek@pirati.cz\">Martin.Stanek@pirati.cz</a>\u00a0- 775058555<br><br><a href=\"https://www.praha8.cz/Komise-pro-kulturu-a-volny-cas-2018-2022.html\">Str\u00e1nka komise na webu m\u011bstsk\u00e9 \u010d\u00e1sti</a><br><br><a href=\"https://forum.pirati.cz/viewtopic.php?f=943&amp;t=46454\">Z\u00e1pisy a jmenn\u00e9 hlasov\u00e1n\u00ed na f\u00f3ru</a>",
"location": "Libe\u0148sk\u00fd z\u00e1mek, 180 00 Prague-Prague 8, Czechia"
},
{
"start": "2022-04-27T14:00:00+02:00",
"end": "2022-04-27T18:00:00+02:00",
"all_day": false,
"summary": "Zastupitelstvo M\u010c Praha 8",
"description": "https://www.praha8.cz/Harmonogram-a-program-zasedani-zastupitelstva.html",
"location": "U Meteoru 6\nPraha, \u010cesk\u00e1 republika"
},
{
"start": "2022-04-25T00:00:00+02:00",
"end": "2022-04-28T00:00:00+02:00",
"all_day": true,
"summary": "Volba m\u00edstop\u0159edsed\u016f MS Praha 8 (1. kolo)",
"description": "",
"location": ""
},
{
"start": "2022-04-21T00:00:00+02:00",
"end": "2022-04-24T00:00:00+02:00",
"all_day": true,
"summary": "Volba 7.\u201312. pozice - MS Praha 8 (2. kolo)",
"description": "",
"location": ""
},
{
"start": "2022-04-20T19:00:00+02:00",
"end": "2022-04-20T21:00:00+02:00",
"all_day": false,
"summary": "P8 - Sch\u016fze ZK",
"description": "kontaktn\u00ed osoba: Michal Nov\u00e1k michal.novak@pirati.cz (mailto:michal.novak@pirati.cz)",
"location": "JITSI"
},
{
"start": "2022-04-20T18:00:00+02:00",
"end": "2022-04-20T20:00:00+02:00",
"all_day": false,
"summary": "Sch\u016fzka k volb\u00e1m (KS Praha)",
"description": "",
"location": ""
},
{
"start": "2022-04-19T16:00:00+02:00",
"end": "2022-04-19T17:00:00+02:00",
"all_day": false,
"summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)",
"description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>",
"location": ""
},
{
"start": "2022-04-19T00:00:00+02:00",
"end": "2022-04-22T00:00:00+02:00",
"all_day": true,
"summary": "Volba 7.\u201312. pozice - MS Praha 8 (1. kolo)",
"description": "",
"location": ""
},
{
"start": "2022-04-18T16:00:00+02:00",
"end": "2022-04-18T17:30:00+02:00",
"all_day": false,
"summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)",
"description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>",
"location": ""
},
{
"start": "2022-04-18T00:00:00+02:00",
"end": "2022-04-21T00:00:00+02:00",
"all_day": true,
"summary": "Volba p\u0159edsedy MS Praha 8 (1. kolo)",
"description": "",
"location": ""
}
]
[
{
"start": "2022-07-07T18:00:00+02:00",
"end": "2022-07-07T20:00:00+02:00",
"all_day": false,
"summary": "Krajsk\u00e1 sch\u016fze pra\u017esk\u00fdch Pir\u00e1t\u016f",
"description": "Op\u011bt tu m\u00e1me prvn\u00ed \u010dtvrtek v m\u011bs\u00edci a s n\u00edm pravidelnou sch\u016fzi kraje Praha. Dozv\u00edte se zpr\u00e1vy se Sn\u011bmovny, z Magistr\u00e1tu, z m\u011bstsk\u00fdch \u010d\u00e1st\u00ed, p\u0159edstav\u00ed se z\u00e1jemci o \u010dlenstv\u00ed a z\u00e1jemci o spolupr\u00e1ci s n\u00e1mi v\u016fbec.&nbsp;<br><br>",
"location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko"
},
{
"start": "2022-06-22T14:00:00+02:00",
"end": "2022-06-22T17:00:00+02:00",
"all_day": false,
"summary": "Zastupitelstvo M\u010c Praha 8",
"description": "https://www.praha8.cz/Harmonogram-a-program-zasedani-zastupitelstva.html",
"location": "U Meteoru 6\nPraha, \u010cesk\u00e1 republika"
},
{
"start": "2022-06-20T16:00:00+02:00",
"end": "2022-06-20T17:30:00+02:00",
"all_day": false,
"summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)",
"description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>",
"location": ""
},
{
"start": "2022-06-06T17:00:00+02:00",
"end": "2022-06-06T19:00:00+02:00",
"all_day": false,
"summary": "P8 - KDP (Komise pro dopravu)",
"description": "kontaktn\u00ed osoba: Michal Nov\u00e1k (Michal.Novak@pirati.cz)<br><a href=\"https://www.praha8.cz/Komise-pro-dopravu-2018-2022.html\">web</a>",
"location": ""
},
{
"start": "2022-06-02T18:00:00+02:00",
"end": "2022-06-02T20:00:00+02:00",
"all_day": false,
"summary": "Krajsk\u00e1 sch\u016fze pra\u017esk\u00fdch Pir\u00e1t\u016f",
"description": "Op\u011bt tu m\u00e1me prvn\u00ed \u010dtvrtek v m\u011bs\u00edci a s n\u00edm pravidelnou sch\u016fzi kraje Praha. Dozv\u00edte se zpr\u00e1vy se Sn\u011bmovny, z Magistr\u00e1tu, z m\u011bstsk\u00fdch \u010d\u00e1st\u00ed, p\u0159edstav\u00ed se z\u00e1jemci o \u010dlenstv\u00ed a z\u00e1jemci o spolupr\u00e1ci s n\u00e1mi v\u016fbec.&nbsp;<br><br>",
"location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko"
},
{
"start": "2022-05-28T11:00:00+02:00",
"end": "2022-05-28T22:00:00+02:00",
"all_day": false,
"summary": "Anthropoid80",
"description": "",
"location": "Thomayerovy sady\nThomayerovy sady, 180 00 Praha, \u010cesk\u00e1 republika"
},
{
"start": "2022-05-27T14:00:00+02:00",
"end": "2022-05-27T22:00:00+02:00",
"all_day": false,
"summary": "Anthropoid80",
"description": "",
"location": "Thomayerovy sady\nThomayerovy sady, 180 00 Praha, \u010cesk\u00e1 republika"
},
{
"start": "2022-05-27T09:30:00+02:00",
"end": "2022-05-27T12:00:00+02:00",
"all_day": false,
"summary": "Anthropoid80 - Rekonstrukce atent\u00e1tu",
"description": "",
"location": "Pam\u00e1tn\u00edk Operace Anthropoid\nV Hole\u0161ovi\u010dk\u00e1ch, 182 00 Praha, \u010cesk\u00e1 republika"
},
{
"start": "2022-05-24T18:00:00+02:00",
"end": "2022-05-24T20:00:00+02:00",
"all_day": false,
"summary": "Beseda o budouc\u00ed podob\u011b s\u00eddli\u0161t\u011b \u010e\u00e1blice",
"description": "Spolek Kr\u00e1sn\u00e9 Kobylisy a M\u00a2 Praha 8 v\u00e1s prostrednictvim radn\u00edho Tom\u00e1Se Hrebika zvou na besedu v Kulturn\u00edm dom\u00e8 L\u00e1dvi.\nCek\u00e1 s\u00eddlist\u00e9 promysleny rozvoj, nebo prom\u00e9na v betonovou dZungli? Jak\u00e9 se tvori pl\u00e1ny na ochranu s\u00eddlist\u00e9 pred nez\u00e1douci\nvystavbou? Pozv\u00e1n\u00ed prijali odborn\u00edci a architekturu a urbanistiku, z\u00e1stupci M\u00e8stsk\u00e9 c\u00e1sti Praha 8 a Magistr\u00e1tu hlavn\u00edho m\u00e8sta Prahy.",
"location": "Kulturn\u00ed d\u016fm L\u00e1dv\u00ed\nBure\u0161ova 2, 182 00 Praha, \u010cesk\u00e1 republika"
},
{
"start": "2022-05-23T16:00:00+02:00",
"end": "2022-05-23T17:30:00+02:00",
"all_day": false,
"summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)",
"description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>",
"location": ""
},
{
"start": "2022-05-19T17:00:00+02:00",
"end": "2022-05-19T19:00:00+02:00",
"all_day": false,
"summary": "Proch\u00e1zka s architekty - Vize s\u00eddli\u0161t\u011b \u010e\u00e1blice",
"description": "Kr\u00e1sn\u00e9 Kobylisy por\u00e1daji tak\u00e9 proch\u00e1zku po s\u00eddlisti D\u00e1blice, na niz architekti a urbanist\u00e9 predstav\u00ed moznou budouci podobu ieho neizaj\u00edmav\u00e8 sich mist. Akci zakonc\u00ed pr\u00e1telsk\u00e9 posezen\u00ed v pivovaru Cobolis. Bud'te u toho!",
"location": "Kulturn\u00ed d\u016fm L\u00e1dv\u00ed\nBure\u0161ova 2, 182 00 Praha, \u010cesk\u00e1 republika"
},
{
"start": "2022-05-16T16:00:00+02:00",
"end": "2022-05-16T17:30:00+02:00",
"all_day": false,
"summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)",
"description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>",
"location": ""
},
{
"start": "2022-05-09T18:00:00+02:00",
"end": "2022-05-09T21:00:00+02:00",
"all_day": false,
"summary": "P8: Sch\u016fzka MS",
"description": "V\u00edce informac\u00ed na: \nhttps://forum.pirati.cz/viewtopic.php?p=807442#p807442",
"location": "Rezidence ROSA\nSt\u0159elni\u010dn\u00e1 1680/8, 182 00 Praha, \u010cesk\u00e1 republika"
},
{
"start": "2022-05-09T17:00:00+02:00",
"end": "2022-05-09T19:00:00+02:00",
"all_day": false,
"summary": "P8 - KDP (Komise pro dopravu)",
"description": "kontaktn\u00ed osoba: Michal Nov\u00e1k (Michal.Novak@pirati.cz)<br><a href=\"https://www.praha8.cz/Komise-pro-dopravu-2018-2022.html\">web</a>",
"location": ""
},
{
"start": "2022-05-09T00:00:00+02:00",
"end": "2022-05-12T00:00:00+02:00",
"all_day": true,
"summary": "Volba 13.\u201320. pozice - MS Praha 8 (1. kolo)",
"description": "",
"location": ""
},
{
"start": "2022-05-06T14:00:00+02:00",
"end": "2022-05-06T15:00:00+02:00",
"all_day": false,
"summary": "Pietn\u00ed akt",
"description": "https://www.facebook.com/csol.cz/posts/4955450444502712.",
"location": "Kobylisk\u00e1 st\u0159elnice\nBojasova 13, 182 00 Praha, \u010cesk\u00e1 republika"
},
{
"start": "2022-05-05T18:00:00+02:00",
"end": "2022-05-05T20:00:00+02:00",
"all_day": false,
"summary": "Krajsk\u00e1 sch\u016fze pra\u017esk\u00fdch Pir\u00e1t\u016f",
"description": "Op\u011bt tu m\u00e1me prvn\u00ed \u010dtvrtek v m\u011bs\u00edci a s n\u00edm pravidelnou sch\u016fzi kraje Praha. Dozv\u00edte se zpr\u00e1vy se Sn\u011bmovny, z Magistr\u00e1tu, z m\u011bstsk\u00fdch \u010d\u00e1st\u00ed, p\u0159edstav\u00ed se z\u00e1jemci o \u010dlenstv\u00ed a z\u00e1jemci o spolupr\u00e1ci s n\u00e1mi v\u016fbec.&nbsp;<br><br>",
"location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko"
},
{
"start": "2022-05-04T16:00:00+02:00",
"end": "2022-05-04T18:00:00+02:00",
"all_day": false,
"summary": "P8 - KKV\u010c (Komise pro kulturu a voln\u00fd \u010das)",
"description": "Sch\u016fze b\u00fdvaj\u00ed: Libe\u0148sk\u00fd z\u00e1mek, m\u00edstnost \u010d. 2, v dob\u011b pandemie online<br><br>kontaktn\u00ed osoba: <a href=\"https://praha8.pirati.cz/lide/martin-stanek/\">Martin Stan\u011bk</a>\u00a0-\u00a0<a href=\"mailto:Martin.Stanek@pirati.cz\">Martin.Stanek@pirati.cz</a>\u00a0- 775058555<br><br><a href=\"https://www.praha8.cz/Komise-pro-kulturu-a-volny-cas-2018-2022.html\">Str\u00e1nka komise na webu m\u011bstsk\u00e9 \u010d\u00e1sti</a><br><br><a href=\"https://forum.pirati.cz/viewtopic.php?f=943&amp;t=46454\">Z\u00e1pisy a jmenn\u00e9 hlasov\u00e1n\u00ed na f\u00f3ru</a>",
"location": "Libe\u0148sk\u00fd z\u00e1mek, 180 00 Prague-Prague 8, Czechia"
},
{
"start": "2022-04-27T14:00:00+02:00",
"end": "2022-04-27T18:00:00+02:00",
"all_day": false,
"summary": "Zastupitelstvo M\u010c Praha 8",
"description": "https://www.praha8.cz/Harmonogram-a-program-zasedani-zastupitelstva.html",
"location": "U Meteoru 6\nPraha, \u010cesk\u00e1 republika"
},
{
"start": "2022-04-25T00:00:00+02:00",
"end": "2022-04-28T00:00:00+02:00",
"all_day": true,
"summary": "Volba m\u00edstop\u0159edsed\u016f MS Praha 8 (1. kolo)",
"description": "",
"location": ""
},
{
"start": "2022-04-21T00:00:00+02:00",
"end": "2022-04-24T00:00:00+02:00",
"all_day": true,
"summary": "Volba 7.\u201312. pozice - MS Praha 8 (2. kolo)",
"description": "",
"location": ""
},
{
"start": "2022-04-20T19:00:00+02:00",
"end": "2022-04-20T21:00:00+02:00",
"all_day": false,
"summary": "P8 - Sch\u016fze ZK",
"description": "kontaktn\u00ed osoba: Michal Nov\u00e1k michal.novak@pirati.cz (mailto:michal.novak@pirati.cz)",
"location": "JITSI"
},
{
"start": "2022-04-20T18:00:00+02:00",
"end": "2022-04-20T20:00:00+02:00",
"all_day": false,
"summary": "Sch\u016fzka k volb\u00e1m (KS Praha)",
"description": "",
"location": ""
},
{
"start": "2022-04-19T16:00:00+02:00",
"end": "2022-04-19T17:00:00+02:00",
"all_day": false,
"summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)",
"description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>",
"location": ""
},
{
"start": "2022-04-19T00:00:00+02:00",
"end": "2022-04-22T00:00:00+02:00",
"all_day": true,
"summary": "Volba 7.\u201312. pozice - MS Praha 8 (1. kolo)",
"description": "",
"location": ""
},
{
"start": "2022-04-18T16:00:00+02:00",
"end": "2022-04-18T17:30:00+02:00",
"all_day": false,
"summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)",
"description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>",
"location": ""
},
{
"start": "2022-04-18T00:00:00+02:00",
"end": "2022-04-21T00:00:00+02:00",
"all_day": true,
"summary": "Volba p\u0159edsedy MS Praha 8 (1. kolo)",
"description": "",
"location": ""
}
]
# -*- coding: utf-8 -*-
# snapshottest: v1 - https://goo.gl/zC4yUc
from __future__ import unicode_literals
from snapshottest import GenericRepr, Snapshot
snapshots = Snapshot()
snapshots['test_calendar__update_source 1'] = [
{
'all_day': False,
'begin': GenericRepr('FakeDatetime(2020, 1, 23, 17, 0, tzinfo=tzutc())'),
'description': '',
'duration': '18:00 - 21:00',
'end': GenericRepr('FakeDatetime(2020, 1, 23, 20, 0, tzinfo=tzutc())'),
'location': 'The 27 Music Bar, Školní 24, 796 01 Prostějov, Česko',
'name': 'Veřejná schůze Prostějovských Pirátů'
},
{
'all_day': False,
'begin': GenericRepr('FakeDatetime(2020, 1, 15, 18, 0, tzinfo=tzoffset(None, 3600))'),
'description': '',
'duration': '18:00 - 21:00',
'end': GenericRepr('FakeDatetime(2020, 1, 15, 21, 0, tzinfo=tzoffset(None, 3600))'),
'location': '',
'name': 'Veřejná schůze Pirátů MS Olomouc'
},
{
'all_day': True,
'begin': GenericRepr('FakeDatetime(2020, 1, 11, 0, 0, tzinfo=tzutc())'),
'description': '',
'duration': 'celý den',
'end': GenericRepr('FakeDatetime(2020, 1, 13, 0, 0, tzinfo=tzutc())'),
'location': '',
'name': 'CF Ostrava'
},
{
'all_day': False,
'begin': GenericRepr('FakeDatetime(2020, 1, 7, 18, 0, tzinfo=tzoffset(None, 3600))'),
'description': '',
'duration': '18:00 - 21:00',
'end': GenericRepr('FakeDatetime(2020, 1, 7, 21, 0, tzinfo=tzoffset(None, 3600))'),
'location': 'PiCOlo, 8. května 522/5, 779 00 Olomouc, Česko',
'name': 'Veřejná schůze Pirátů Olomouckého kraje'
},
{
'all_day': False,
'begin': GenericRepr('FakeDatetime(2019, 4, 10, 18, 0, tzinfo=tzoffset(None, 7200))'),
'description': '',
'duration': '18:00 - 21:00',
'end': GenericRepr('FakeDatetime(2019, 4, 10, 21, 0, tzinfo=tzoffset(None, 7200))'),
'location': 'Jeseník',
'name': 'Veřejná schůze Pirátů XOLK v Jeseníku'
}
]
snapshots['test_calendar__update_source 2'] = [
{
'all_day': False,
'begin': GenericRepr('FakeDatetime(2020, 2, 17, 17, 30, tzinfo=tzutc())'),
'description': '',
'duration': '18:30 - 21:30',
'end': GenericRepr('FakeDatetime(2020, 2, 17, 20, 30, tzinfo=tzutc())'),
'location': 'Nebe počká, 20, Kratochvílova 122, Město, 750 02 Přerov, Česko',
'name': 'Schůzka Piráti Přerov'
},
{
'all_day': False,
'begin': GenericRepr('FakeDatetime(2020, 2, 21, 17, 30, tzinfo=tzutc())'),
'description': 'Tradiční páteční deskohraní s Karlem Bezejmeným. K zapůjčení budou deskové hry všeho druhu – a to jak jednoduché, tak náročnější pro ty,kteří se nebojí u hry strávit delší dobu. Všechny pravidla Vám budou vysvětlena. Nemusíte se bát.',
'duration': '18:30 - 22:00',
'end': GenericRepr('FakeDatetime(2020, 2, 21, 21, 0, tzinfo=tzutc())'),
'location': 'Picolo - Pirátské centrum Olomouc, 8. května 522/5, 779 00 Olomouc, Česko',
'name': 'Páteční deskovky v Picolu - Karel Bezejmenný'
},
{
'all_day': False,
'begin': GenericRepr('FakeDatetime(2020, 3, 1, 14, 0, tzinfo=tzutc())'),
'description': '''Tato událost má videohovor.
Připojit se: https://meet.google.com/ahv-nrmw-kmp
+1 484-696-1205 PIN: 546973991#''',
'duration': '15:00 - 18:00',
'end': GenericRepr('FakeDatetime(2020, 3, 1, 17, 0, tzinfo=tzutc())'),
'location': 'Koliba & Pivovar U Tří králů, Finská 4592/8, 796 01 Prostějov,Česko',
'name': 'Veřejná schůze Prostějovských Pirátů 01.03.2020'
},
{
'all_day': False,
'begin': GenericRepr('FakeDatetime(2020, 3, 24, 17, 0, tzinfo=tzutc())'),
'description': 'Přednáší MUDr. Marti Moron',
'duration': '18:00 - 19:30',
'end': GenericRepr('FakeDatetime(2020, 3, 24, 18, 30, tzinfo=tzutc())'),
'location': '',
'name': 'Je kouření stejně škodlivé jako vapování?'
},
{
'all_day': False,
'begin': GenericRepr('FakeDatetime(2020, 4, 8, 16, 0, tzinfo=tzutc())'),
'description': '',
'duration': '18:00 - 19:30',
'end': GenericRepr('FakeDatetime(2020, 4, 8, 17, 30, tzinfo=tzutc())'),
'location': 'Picolo - Pirátské centrum Olomouc, 8. května 522/5, 779 00 Olomouc, Česko',
'name': 'Setkání s místopředsedou Evropského parlamentu Marcelem Kolalokou'
}
]
# -*- coding: utf-8 -*-
# snapshottest: v1 - https://goo.gl/zC4yUc
from __future__ import unicode_literals
from snapshottest import GenericRepr, Snapshot
snapshots = Snapshot()
snapshots['test_parse_ical 1'] = [
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-04-08T16:00:00+00:00]>'),
'description': '',
'end': GenericRepr('<Arrow [2020-04-08T17:30:00+00:00]>'),
'location': 'Picolo - Pirátské centrum Olomouc, 8. května 522/5, 779 00 Olomouc, Česko',
'name': 'Setkání s místopředsedou Evropského parlamentu Marcelem Kolalokou'
},
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-03-24T17:00:00+00:00]>'),
'description': 'Přednáší MUDr. Marti Moron',
'end': GenericRepr('<Arrow [2020-03-24T18:30:00+00:00]>'),
'location': '',
'name': 'Je kouření stejně škodlivé jako vapování?'
},
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-03-01T14:00:00+00:00]>'),
'description': '''Tato událost má videohovor.
Připojit se: https://meet.google.com/ahv-nrmw-kmp
+1 484-696-1205 PIN: 546973991#''',
'end': GenericRepr('<Arrow [2020-03-01T17:00:00+00:00]>'),
'location': 'Koliba & Pivovar U Tří králů, Finská 4592/8, 796 01 Prostějov,Česko',
'name': 'Veřejná schůze Prostějovských Pirátů 01.03.2020'
},
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-02-21T17:30:00+00:00]>'),
'description': 'Tradiční páteční deskohraní s Karlem Bezejmeným. K zapůjčení budou deskové hry všeho druhu – a to jak jednoduché, tak náročnější pro ty,kteří se nebojí u hry strávit delší dobu. Všechny pravidla Vám budou vysvětlena. Nemusíte se bát.',
'end': GenericRepr('<Arrow [2020-02-21T21:00:00+00:00]>'),
'location': 'Picolo - Pirátské centrum Olomouc, 8. května 522/5, 779 00 Olomouc, Česko',
'name': 'Páteční deskovky v Picolu - Karel Bezejmenný'
},
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-02-17T17:30:00+00:00]>'),
'description': '',
'end': GenericRepr('<Arrow [2020-02-17T20:30:00+00:00]>'),
'location': 'Nebe počká, 20, Kratochvílova 122, Město, 750 02 Přerov, Česko',
'name': 'Schůzka Piráti Přerov'
},
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-01-23T17:00:00+00:00]>'),
'description': '',
'end': GenericRepr('<Arrow [2020-01-23T20:00:00+00:00]>'),
'location': 'The 27 Music Bar, Školní 24, 796 01 Prostějov, Česko',
'name': 'Veřejná schůze Prostějovských Pirátů'
},
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-01-15T18:00:00+01:00]>'),
'description': '',
'end': GenericRepr('<Arrow [2020-01-15T21:00:00+01:00]>'),
'location': '',
'name': 'Veřejná schůze Pirátů MS Olomouc'
},
{
'all_day': True,
'begin': GenericRepr('<Arrow [2020-01-11T00:00:00+00:00]>'),
'description': '',
'end': GenericRepr('<Arrow [2020-01-13T00:00:00+00:00]>'),
'location': '',
'name': 'CF Ostrava'
},
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-01-07T18:00:00+01:00]>'),
'description': '',
'end': GenericRepr('<Arrow [2020-01-07T21:00:00+01:00]>'),
'location': 'PiCOlo, 8. května 522/5, 779 00 Olomouc, Česko',
'name': 'Veřejná schůze Pirátů Olomouckého kraje'
},
{
'all_day': False,
'begin': GenericRepr('<Arrow [2019-04-10T18:00:00+02:00]>'),
'description': '',
'end': GenericRepr('<Arrow [2019-04-10T21:00:00+02:00]>'),
'location': 'Jeseník',
'name': 'Veřejná schůze Pirátů XOLK v Jeseníku'
}
]
snapshots['test_split_events 1'] = [
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-01-23T17:00:00+00:00]>'),
'description': '',
'end': GenericRepr('<Arrow [2020-01-23T20:00:00+00:00]>'),
'location': 'The 27 Music Bar, Školní 24, 796 01 Prostějov, Česko',
'name': 'Veřejná schůze Prostějovských Pirátů'
},
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-01-15T18:00:00+01:00]>'),
'description': '',
'end': GenericRepr('<Arrow [2020-01-15T21:00:00+01:00]>'),
'location': '',
'name': 'Veřejná schůze Pirátů MS Olomouc'
},
{
'all_day': True,
'begin': GenericRepr('<Arrow [2020-01-11T00:00:00+00:00]>'),
'description': '',
'end': GenericRepr('<Arrow [2020-01-13T00:00:00+00:00]>'),
'location': '',
'name': 'CF Ostrava'
},
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-01-07T18:00:00+01:00]>'),
'description': '',
'end': GenericRepr('<Arrow [2020-01-07T21:00:00+01:00]>'),
'location': 'PiCOlo, 8. května 522/5, 779 00 Olomouc, Česko',
'name': 'Veřejná schůze Pirátů Olomouckého kraje'
},
{
'all_day': False,
'begin': GenericRepr('<Arrow [2019-04-10T18:00:00+02:00]>'),
'description': '',
'end': GenericRepr('<Arrow [2019-04-10T21:00:00+02:00]>'),
'location': 'Jeseník',
'name': 'Veřejná schůze Pirátů XOLK v Jeseníku'
}
]
snapshots['test_split_events 2'] = [
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-04-08T16:00:00+00:00]>'),
'description': '',
'end': GenericRepr('<Arrow [2020-04-08T17:30:00+00:00]>'),
'location': 'Picolo - Pirátské centrum Olomouc, 8. května 522/5, 779 00 Olomouc, Česko',
'name': 'Setkání s místopředsedou Evropského parlamentu Marcelem Kolalokou'
},
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-03-24T17:00:00+00:00]>'),
'description': 'Přednáší MUDr. Marti Moron',
'end': GenericRepr('<Arrow [2020-03-24T18:30:00+00:00]>'),
'location': '',
'name': 'Je kouření stejně škodlivé jako vapování?'
},
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-03-01T14:00:00+00:00]>'),
'description': '''Tato událost má videohovor.
Připojit se: https://meet.google.com/ahv-nrmw-kmp
+1 484-696-1205 PIN: 546973991#''',
'end': GenericRepr('<Arrow [2020-03-01T17:00:00+00:00]>'),
'location': 'Koliba & Pivovar U Tří králů, Finská 4592/8, 796 01 Prostějov,Česko',
'name': 'Veřejná schůze Prostějovských Pirátů 01.03.2020'
},
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-02-21T17:30:00+00:00]>'),
'description': 'Tradiční páteční deskohraní s Karlem Bezejmeným. K zapůjčení budou deskové hry všeho druhu – a to jak jednoduché, tak náročnější pro ty,kteří se nebojí u hry strávit delší dobu. Všechny pravidla Vám budou vysvětlena. Nemusíte se bát.',
'end': GenericRepr('<Arrow [2020-02-21T21:00:00+00:00]>'),
'location': 'Picolo - Pirátské centrum Olomouc, 8. května 522/5, 779 00 Olomouc, Česko',
'name': 'Páteční deskovky v Picolu - Karel Bezejmenný'
},
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-02-17T17:30:00+00:00]>'),
'description': '',
'end': GenericRepr('<Arrow [2020-02-17T20:30:00+00:00]>'),
'location': 'Nebe počká, 20, Kratochvílova 122, Město, 750 02 Přerov, Česko',
'name': 'Schůzka Piráti Přerov'
}
]
snapshots['test_process_ical 1'] = [
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-01-23T17:00:00+00:00]>'),
'description': '',
'duration': '18:00 - 21:00',
'end': GenericRepr('<Arrow [2020-01-23T20:00:00+00:00]>'),
'location': 'The 27 Music Bar, Školní 24, 796 01 Prostějov, Česko',
'name': 'Veřejná schůze Prostějovských Pirátů'
},
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-01-15T18:00:00+01:00]>'),
'description': '',
'duration': '18:00 - 21:00',
'end': GenericRepr('<Arrow [2020-01-15T21:00:00+01:00]>'),
'location': '',
'name': 'Veřejná schůze Pirátů MS Olomouc'
},
{
'all_day': True,
'begin': GenericRepr('<Arrow [2020-01-11T00:00:00+00:00]>'),
'description': '',
'duration': 'celý den',
'end': GenericRepr('<Arrow [2020-01-13T00:00:00+00:00]>'),
'location': '',
'name': 'CF Ostrava'
},
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-01-07T18:00:00+01:00]>'),
'description': '',
'duration': '18:00 - 21:00',
'end': GenericRepr('<Arrow [2020-01-07T21:00:00+01:00]>'),
'location': 'PiCOlo, 8. května 522/5, 779 00 Olomouc, Česko',
'name': 'Veřejná schůze Pirátů Olomouckého kraje'
},
{
'all_day': False,
'begin': GenericRepr('<Arrow [2019-04-10T18:00:00+02:00]>'),
'description': '',
'duration': '18:00 - 21:00',
'end': GenericRepr('<Arrow [2019-04-10T21:00:00+02:00]>'),
'location': 'Jeseník',
'name': 'Veřejná schůze Pirátů XOLK v Jeseníku'
}
]
snapshots['test_process_ical 2'] = [
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-04-08T16:00:00+00:00]>'),
'description': '',
'duration': '18:00 - 19:30',
'end': GenericRepr('<Arrow [2020-04-08T17:30:00+00:00]>'),
'location': 'Picolo - Pirátské centrum Olomouc, 8. května 522/5, 779 00 Olomouc, Česko',
'name': 'Setkání s místopředsedou Evropského parlamentu Marcelem Kolalokou'
},
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-03-24T17:00:00+00:00]>'),
'description': 'Přednáší MUDr. Marti Moron',
'duration': '18:00 - 19:30',
'end': GenericRepr('<Arrow [2020-03-24T18:30:00+00:00]>'),
'location': '',
'name': 'Je kouření stejně škodlivé jako vapování?'
},
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-03-01T14:00:00+00:00]>'),
'description': '''Tato událost má videohovor.
Připojit se: https://meet.google.com/ahv-nrmw-kmp
+1 484-696-1205 PIN: 546973991#''',
'duration': '15:00 - 18:00',
'end': GenericRepr('<Arrow [2020-03-01T17:00:00+00:00]>'),
'location': 'Koliba & Pivovar U Tří králů, Finská 4592/8, 796 01 Prostějov,Česko',
'name': 'Veřejná schůze Prostějovských Pirátů 01.03.2020'
},
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-02-21T17:30:00+00:00]>'),
'description': 'Tradiční páteční deskohraní s Karlem Bezejmeným. K zapůjčení budou deskové hry všeho druhu – a to jak jednoduché, tak náročnější pro ty,kteří se nebojí u hry strávit delší dobu. Všechny pravidla Vám budou vysvětlena. Nemusíte se bát.',
'duration': '18:30 - 22:00',
'end': GenericRepr('<Arrow [2020-02-21T21:00:00+00:00]>'),
'location': 'Picolo - Pirátské centrum Olomouc, 8. května 522/5, 779 00 Olomouc, Česko',
'name': 'Páteční deskovky v Picolu - Karel Bezejmenný'
},
{
'all_day': False,
'begin': GenericRepr('<Arrow [2020-02-17T17:30:00+00:00]>'),
'description': '',
'duration': '18:30 - 21:30',
'end': GenericRepr('<Arrow [2020-02-17T20:30:00+00:00]>'),
'location': 'Nebe počká, 20, Kratochvílova 122, Město, 750 02 Přerov, Česko',
'name': 'Schůzka Piráti Přerov'
}
]
......@@ -10,40 +10,45 @@ pytestmark = pytest.mark.django_db
fake = Faker()
@pytest.mark.freeze_time("2020-02-02")
def test_calendar__update_source(sample, mocker, snapshot):
m_get = mocker.patch(
"calendar_utils.models.requests.get", return_value=mocker.Mock(text=sample)
)
@pytest.mark.freeze_time("2022-05-13")
def test_calendar__update_source(
sample_response, sample_past_events, sample_future_events
):
"""
Pokud se změní hash, přenačtou se eventy
"""
url = "http://foo"
cal = Calendar.objects.create(url=url)
cal.update_source()
m_get.assert_called_once_with(url)
cal.handle_event_list(sample_response)
cal.refresh_from_db()
assert cal.source == sample
assert cal.last_update == arrow.get("2020-02-02").datetime
snapshot.assert_match(cal.past_events)
snapshot.assert_match(cal.future_events)
assert cal.event_hash == str(hash(str(sample_response)))
assert cal.last_update == arrow.get("2022-05-13").datetime
assert sample_past_events == cal.past_events
assert sample_future_events == cal.future_events
@pytest.mark.freeze_time("2020-03-30")
def test_calendar__update_source__unchanged_source(sample, mocker):
m_get = mocker.patch(
"calendar_utils.models.requests.get", return_value=mocker.Mock(text=sample)
)
@pytest.mark.freeze_time("2022-05-13")
def test_calendar__update_source__unchanged_source(sample_response):
"""
Pokud se nezmění hash, tak se nezmění ani eventy
"""
url = "http://foo"
event_hash = str(hash(str(sample_response)))
cal = Calendar.objects.create(url=url, source=sample)
cal.update_source()
cal = Calendar.objects.create(
url=url, event_hash=event_hash, past_events=[], future_events=[]
)
cal.handle_event_list(sample_response)
m_get.assert_called_once_with(url)
cal.refresh_from_db()
assert cal.source == sample
assert cal.last_update == arrow.get("2020-03-30").datetime
assert cal.past_events is None
assert cal.future_events is None
assert cal.event_hash == event_hash
assert cal.last_update == arrow.get("2022-05-13").datetime
assert [] == cal.past_events
assert [] == cal.future_events
def test_calendar__save_and_load_events():
......
......@@ -5,14 +5,25 @@ import pytest
from icalevnt.icalparser import Event
from zoneinfo import ZoneInfo
from calendar_utils.parser import set_event_duration # process_ical,; split_events,
from calendar_utils.parser import (
process_event_list,
set_event_duration,
split_event_dict_list,
)
#
# @pytest.mark.freeze_time("2020-02-02")
# def test_split_events(sample, snapshot):
# past_events, future_events = split_events(parse_ical(sample))
# snapshot.assert_match(past_events)
# snapshot.assert_match(future_events)
@pytest.mark.freeze_time("2022-05-13")
def test_split_events(sample_response, sample_future_events, sample_past_events):
past_events, future_events = process_event_list(sample_response)
assert sample_past_events == past_events
assert sample_future_events == future_events
@pytest.mark.freeze_time("2022-05-13")
def test_split_events(sample_events, sample_future_events, sample_past_events):
past_events, future_events = split_event_dict_list(sample_events)
assert sample_past_events == past_events
assert sample_future_events == future_events
def test_set_event_duration__all_day():
......@@ -43,10 +54,3 @@ def test_set_event_duration__days():
out = set_event_duration(event)
assert out.duration == "10:15 - 22:30 (4.2.)"
# @pytest.mark.freeze_time("2020-02-02")
# def test_process_ical(sample, snapshot):
# past_events, future_events = process_ical(sample)
# snapshot.assert_match(past_events)
# snapshot.assert_match(future_events)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment