Skip to content
Snippets Groups Projects
Commit 3e4017a1 authored by Andreas Hubel's avatar Andreas Hubel
Browse files

extend tests for json + xml schedule support classes

parent 28491799
Branches
Tags release/calendar/5.3.3 release/mail/5.1.4
No related merge requests found
...@@ -9,7 +9,7 @@ from .base import BaseScheduleSupport ...@@ -9,7 +9,7 @@ from .base import BaseScheduleSupport
class ScheduleJSONSupport(BaseScheduleSupport): class ScheduleJSONSupport(BaseScheduleSupport):
identifier = 'GenericScheduleJSONImport' identifier = 'schedule-json'
readonly = True readonly = True
configuration_fields = None configuration_fields = None
... ...
......
...@@ -11,7 +11,7 @@ from .base import BaseScheduleSupport ...@@ -11,7 +11,7 @@ from .base import BaseScheduleSupport
class ScheduleXMLSupport(BaseScheduleSupport): class ScheduleXMLSupport(BaseScheduleSupport):
identifier = 'GenericScheduleXMLImport' identifier = 'schedule-xml'
readonly = True readonly = True
configuration_fields = None configuration_fields = None
... ...
......
...@@ -18,13 +18,13 @@ ...@@ -18,13 +18,13 @@
<start>20:30</start> <start>20:30</start>
<duration>01:00</duration> <duration>01:00</duration>
<room>Gray Room</room> <room>Gray Room</room>
<slug>democon-8264-netzpolitik_in_der_schweiz_2016</slug> <slug>democon-8264-netzpolitik_in_der_schweiz</slug>
<url>https://fahrplan.events.ccc.de/congress/2016/Fahrplan/events/8264.html</url> <url>https://fahrplan.events.ccc.de/congress/2016/Fahrplan/events/8264.html</url>
<recording> <recording>
<license>CC BY 4.0</license> <license>CC BY 4.0</license>
<optout>false</optout> <optout>false</optout>
</recording> </recording>
<title>Netzpolitik in der Schweiz 2016</title> <title>Netzpolitik in der Schweiz</title>
<subtitle>Grundrechte per Volksentscheid versenken</subtitle> <subtitle>Grundrechte per Volksentscheid versenken</subtitle>
<track>CCC</track> <track>CCC</track>
<type>lecture</type> <type>lecture</type>
... ...
......
...@@ -9,6 +9,8 @@ from ..models.conference import Conference, ConferenceMember ...@@ -9,6 +9,8 @@ from ..models.conference import Conference, ConferenceMember
from ..models.users import PlatformUser from ..models.users import PlatformUser
from ..models.schedules import ScheduleSource, ScheduleSourceImport, ScheduleSourceMapping from ..models.schedules import ScheduleSource, ScheduleSourceImport, ScheduleSourceMapping
from ..schedules.base import BaseScheduleSupport, ScheduleTypeManager from ..schedules.base import BaseScheduleSupport, ScheduleTypeManager
from ..schedules.schedulejson import ScheduleJSONSupport
from ..schedules.schedulexml import ScheduleXMLSupport
class FileBasedScheduleSupport(BaseScheduleSupport): class FileBasedScheduleSupport(BaseScheduleSupport):
...@@ -55,6 +57,8 @@ class ScheduleTests(TestCase): ...@@ -55,6 +57,8 @@ class ScheduleTests(TestCase):
self.assembly.save() self.assembly.save()
ScheduleTypeManager.register_class(FileBasedScheduleSupport.identifier, FileBasedScheduleSupport) ScheduleTypeManager.register_class(FileBasedScheduleSupport.identifier, FileBasedScheduleSupport)
ScheduleTypeManager.register_class(ScheduleJSONSupport.identifier, ScheduleJSONSupport)
ScheduleTypeManager.register_class(ScheduleXMLSupport.identifier, ScheduleXMLSupport)
def test_basic(self): def test_basic(self):
src = ScheduleSource.objects.create( src = ScheduleSource.objects.create(
...@@ -99,3 +103,91 @@ class ScheduleTests(TestCase): ...@@ -99,3 +103,91 @@ class ScheduleTests(TestCase):
# check other attributes # check other attributes
self.assertEqual(e1.room, r1) self.assertEqual(e1.room, r1)
self.assertEqual(timedelta(minutes=90), e1.schedule_duration) self.assertEqual(timedelta(minutes=90), e1.schedule_duration)
def test_xml(self):
src = ScheduleSource.objects.create(
assembly=self.assembly,
import_type=ScheduleXMLSupport.identifier,
import_url='file://import_data/schedule-2021.xml',
)
self.assertFalse(src.has_running_import)
job = src.imports.create(state=ScheduleSourceImport.State.PREPARED)
self.assertFalse(src.has_running_import)
# sanity checks pre-import
self.assertEqual(0, self.assembly.rooms.count())
self.assertEqual(0, self.assembly.events.count())
# do the import
job.do_import()
self.assertFalse(src.has_running_import)
# sanity checks post-import
self.assertEqual(ScheduleSourceImport.State.COMPLETED, job.state)
self.assertIsNotNone(job.data)
self.assertEqual(2, self.assembly.rooms.count())
self.assertEqual(1, self.assembly.events.count())
self.assertIn('_activity', job.data)
self.assertTrue(all(a['action'] == 'added' for a in job.data['_activity']))
# check that room and event have been created
r1 = self.assembly.rooms.get(name='Gray Room')
e1 = self.assembly.events.get(slug='democon-8264-netzpolitik_in_der_schweiz')
self.assertIsNotNone(r1)
self.assertIsNotNone(e1)
# check that mappings exist
self.assertEqual(3, src.mappings.count())
r1_m = src.mappings.get(mapping_type=ScheduleSourceMapping.MappingType.ROOM, source_id='Gray Room', local_id=r1.id)
e1_m = src.mappings.get(mapping_type=ScheduleSourceMapping.MappingType.EVENT, source_id='8264', local_id=e1.id)
self.assertIsNotNone(r1_m)
self.assertIsNotNone(e1_m)
# check other attributes
self.assertEqual(e1.room, r1)
self.assertEqual(timedelta(minutes=60), e1.schedule_duration)
def test_json(self):
src = ScheduleSource.objects.create(
assembly=self.assembly,
import_type=ScheduleJSONSupport.identifier,
import_url='file://import_data/schedule-2021.json',
)
self.assertFalse(src.has_running_import)
job = src.imports.create(state=ScheduleSourceImport.State.PREPARED)
self.assertFalse(src.has_running_import)
# sanity checks pre-import
self.assertEqual(0, self.assembly.rooms.count())
self.assertEqual(0, self.assembly.events.count())
# do the import
job.do_import()
self.assertFalse(src.has_running_import)
# sanity checks post-import
self.assertEqual(ScheduleSourceImport.State.COMPLETED, job.state)
self.assertIsNotNone(job.data)
self.assertEqual(2, self.assembly.rooms.count())
self.assertEqual(1, self.assembly.events.count())
self.assertIn('_activity', job.data)
self.assertTrue(all(a['action'] == 'added' for a in job.data['_activity']))
# check that room and event have been created
r1 = self.assembly.rooms.get(name='Gray Room')
e1 = self.assembly.events.get(slug='democon-12345-opening')
self.assertIsNotNone(r1)
self.assertIsNotNone(e1)
# check that mappings exist
self.assertEqual(2, src.mappings.count())
r1_m = src.mappings.get(mapping_type=ScheduleSourceMapping.MappingType.ROOM, source_id='Gray Room', local_id=r1.id)
e1_m = src.mappings.get(mapping_type=ScheduleSourceMapping.MappingType.EVENT, source_id='12345', local_id=e1.id)
self.assertIsNotNone(r1_m)
self.assertIsNotNone(e1_m)
# check other attributes
self.assertEqual(e1.room, r1)
self.assertEqual(timedelta(minutes=30), e1.schedule_duration)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment