Skip to content
Snippets Groups Projects
Commit 948263b1 authored by jan.bednarik's avatar jan.bednarik
Browse files

calendar utils: Model for iCalendar calendars

parent e0a6fed1
No related branches found
No related tags found
1 merge request!11Calendar
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
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
# -*- 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': '',
'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': '',
'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': '',
'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': '',
'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': '',
'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, 4, 8, 16, 0, tzinfo=tzutc())'),
'description': '',
'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'
},
{
'all_day': False,
'begin': GenericRepr('FakeDatetime(2020, 3, 24, 17, 0, tzinfo=tzutc())'),
'description': 'Přednáší MUDr. Marti Moron',
'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, 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#''',
'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, 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.',
'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, 2, 17, 17, 30, tzinfo=tzutc())'),
'description': '',
'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'
}
]
# -*- 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'
}
]
import arrow
import pytest
import pytz
from faker import Faker
from calendar_utils.models import Calendar
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)
)
url = "http://foo"
cal = Calendar.objects.create(url=url)
cal.update_source()
m_get.assert_called_once_with(url)
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)
@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)
)
url = "http://foo"
cal = Calendar.objects.create(url=url, source=sample)
cal.update_source()
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
def test_calendar__save_and_load_events():
past_events = [
{
"begin": fake.date_time(tzinfo=pytz.UTC),
"end": fake.date_time(tzinfo=pytz.UTC),
},
{
"begin": fake.date_time(tzinfo=pytz.UTC),
"end": fake.date_time(tzinfo=pytz.UTC),
},
]
future_events = [
{
"begin": fake.date_time(tzinfo=pytz.UTC),
"end": fake.date_time(tzinfo=pytz.UTC),
},
]
cal = Calendar.objects.create(
url=fake.url(), past_events=past_events, future_events=future_events
)
cal.refresh_from_db()
assert cal.past_events == past_events
assert cal.future_events == future_events
def test_calendar__save_and_load_events__no_values():
cal = Calendar.objects.create(url=fake.url())
cal.refresh_from_db()
assert cal.past_events is None
assert cal.future_events is None
import pytest
from calendar_utils.parser import parse_ical, split_events
def test_parse_ical(sample, snapshot):
events = parse_ical(sample)
snapshot.assert_match(events)
@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)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment