diff --git a/src/api/tests/schedule.py b/src/api/tests/schedule.py index afeea7f0ae3db02b2e122f370fd7ca0e74a82b79..6bd544d494d6a948103ce8529df925e249d1f406 100644 --- a/src/api/tests/schedule.py +++ b/src/api/tests/schedule.py @@ -8,22 +8,23 @@ from core.models import Assembly, Conference, Event, PlatformUser, Room class ScheduleTest(TestCase): - def test_push_event(self): - conf = Conference(slug='conf', name='TestConf', is_public=True) - conf.save() - conf.tracks.create(name='Community').save() - assembly = Assembly(name='TestAssembly', slug='asmbly', conference=conf) - assembly.save() - room = Room(conference=conf, assembly=assembly, name='Foo Room', room_type=Room.RoomType.STAGE) - room.save() - - user = PlatformUser(username='bernd', is_active=True) - user.save() - - token = Token(user=user) - token.save() - - event = Event(conference=conf, assembly=assembly, name='Example Event') + def setUp(self): + self.conf = Conference(slug='conf', name='TestConf', is_public=True) + self.conf.save() + self.conf.tracks.create(name='Community').save() + self.assembly = Assembly(name='TestAssembly', slug='asmbly', conference=self.conf) + self.assembly.save() + self.room = Room(conference=self.conf, assembly=self.assembly, name='Foo Room', room_type=Room.RoomType.STAGE) + self.room.save() + + self.user = PlatformUser(username='bernd', is_active=True) + self.user.save() + + self.token = Token(user=self.user) + self.token.save() + + def test_push_existing_event(self): + event = Event(conference=self.conf, assembly=self.assembly, name='Example Event') event.save() update = { @@ -50,12 +51,50 @@ class ScheduleTest(TestCase): "attachments": [] } - url = reverse('api:event-schedule', kwargs={'conference': conf.slug, 'pk': event.pk}) + url = reverse('api:event-schedule', kwargs={'conference': self.conf.slug, 'pk': event.pk}) - with self.modify_settings(API_USERS={'append': user.username}): - resp = self.client.post(url, json.dumps(update), content_type='application/json', HTTP_AUTHORIZATION=f'Token {token.key}') + with self.modify_settings(API_USERS={'append': self.user.username}): + resp = self.client.post(url, json.dumps(update), content_type='application/json', HTTP_AUTHORIZATION=f'Token {self.token.key}') self.assertEqual(201, resp.status_code, f'Unexpected result from POST: {resp.content}') event.refresh_from_db() self.assertTrue('rC3' in event.name, f'Expected "rC3" in event name "{event.name}".') + + def test_push_new_event(self): + update = { + "url": "https://fahrplan.events.ccc.de/rc3/2020/Fahrplan/events/11583.html", + "id": 11583, + "guid": "d9334deb-f183-4aec-9c6c-137741f6ff73", + "logo": None, + "date": "2020-12-27T12:20:00+01:00", + "start": "12:20", + "duration": "00:30", + "room": "foo room", + "slug": "rc3-11583-rc3_eroffnung", + "title": "#rC3 Er\u00f6ffnung", + "subtitle": "", + "track": "Community", + "type": "Talk", + "language": "de", + "abstract": "Willkommen zur ersten und hoffentlich einzigen Remote Chaos Experience!", + "description": "", + "recording_license": "", + "do_not_record": False, + "persons": [{"id": 14151, "public_name": "blubbel"}], + "links": [], + "attachments": [] + } + + self.assertFalse(Event.objects.filter(pk=update['guid']).exists()) + + url = reverse('api:event-schedule', kwargs={'conference': self.conf.slug, 'pk': update['guid']}) + + with self.modify_settings(API_USERS={'append': self.user.username}): + resp = self.client.post(url, json.dumps(update), content_type='application/json', HTTP_AUTHORIZATION=f'Token {self.token.key}') + + self.assertEqual(201, resp.status_code, f'Unexpected result from POST: {resp.content}') + + self.assertTrue(Event.objects.filter(pk=update['guid']).exists()) + event = Event.objects.get(pk=update['guid']) + self.assertTrue('rC3' in event.name, f'Expected "rC3" in event name "{event.name}".') diff --git a/src/api/views/schedule.py b/src/api/views/schedule.py index d4de2532563e4f6d58a31a7e878f6827251772dc..e9249d4e4001796431cd94477a7b1a747bdb944e 100644 --- a/src/api/views/schedule.py +++ b/src/api/views/schedule.py @@ -93,13 +93,13 @@ class EventSchedule(ConferenceSlugMixin, APIView): try: obj = Event.objects.get(conference=self.conference, pk=pk) except Event.DoesNotExist: - obj = Event(conference=self.conference) + obj = Event(conference=self.conference, pk=pk) + logger.warning('Event schedule POST: id %s did not exist yet, creating.', pk) try: if 'guid' in event: if event['guid'] != str(obj.pk): - print(f'Attempted update of event {obj.pk} with guid "{event["guid"]}".') - logger.warning(f'Attempted update of event {obj.pk} with guid "{event["guid"]}".') + logger.warning('Attempted update of event %s with guid "%s".', obj.pk, event["guid"]) return JsonResponse({'error': 'GUID mismatch.'}) if 'slug' in event: diff --git a/src/core/tests/tags.py b/src/core/tests/tags.py index cad9f4da24b0379bb336f4548c8b7a7f8dd51536..a11aaf4277e0f4b5f7ef26765df1b568ded021df 100644 --- a/src/core/tests/tags.py +++ b/src/core/tests/tags.py @@ -102,7 +102,7 @@ class TagItemTests(TestCase): self.event = Event.objects.filter(conference=self.conference).first() self.tag_items = self._createTagItems() - def _createTagItem(self, tag_slug:str) -> TagItem: + def _createTagItem(self, tag_slug: str) -> TagItem: tag = ConferenceTag.objects.get(conference=self.conference, slug=tag_slug) return TagItem(tag=tag, target_type=ContentType.objects.get_for_model(type(self.event)), target_id=self.event.id) diff --git a/src/plainui/tests.py b/src/plainui/tests.py index fded045a23727b81dccc54453de0188a7380a170..131b2e631b9aa11f16f06c19e11796efa9973bed 100644 --- a/src/plainui/tests.py +++ b/src/plainui/tests.py @@ -95,7 +95,7 @@ class ViewsTest(TestCase): hidden_conf = Conference(name='foo_self.conf', slug='slug42', is_public=False) hidden_conf.save() - with override_settings(DEBUG=False), modify_settings(MIDDLEWARE={'remove': ['debug_toolbar.middleware.DebugToolbarMiddleware']}, INSTALLED_APPS={'remove': ['debug_toolbar']}): + with override_settings(DEBUG=False), modify_settings(MIDDLEWARE={'remove': ['debug_toolbar.middleware.DebugToolbarMiddleware']}, INSTALLED_APPS={'remove': ['debug_toolbar']}): # noqa: E501 resp = self.client.get(reverse('plainui:conferences'), follow=False) self.assertRedirects(resp, reverse('plainui:landing', kwargs={'conf_slug': self.conf.slug}))