def test_post_edit_event_clear_media(self): with tempfile.NamedTemporaryFile(dir="/tmp", prefix="toolkit-test-", suffix=".jpg") as temp_jpg: # Add MediaItem to event 1: media_item = MediaItem( media_file=temp_jpg.name, mimetype="image/jpeg", caption="Image Caption!", credit="Image Credit!" ) media_item.save() event = Event.objects.get(id=2) event.media.add(media_item) event.save() url = reverse("edit-event-details", kwargs={"event_id": 2}) response = self.client.post( url, data={ "name": u"New \u20acvent Name", "duration": u"00:10:00", "media_file": temp_jpg.name, "media_file-clear": "on", }, ) self.assert_return_to_index(response) event = Event.objects.get(id=2) # Media item should be gone: self.assertEqual(event.media.count(), 0)
def get(self, request, event_id): event = get_object_or_404(Event, pk=event_id) # For now only support a single media item: media_item = event.get_main_mediaitem() or MediaItem() # If the event has "legacy" (ie. non-html) copy then convert it to # HTML; if event.legacy_copy: event.copy = event.copy_html form = diary_forms.EventForm(instance=event) media_form = diary_forms.MediaItemForm(instance=media_item) context = { 'event': event, 'form': form, 'media_form': media_form, 'programme_copy_summary_max_chars': settings.PROGRAMME_COPY_SUMMARY_MAX_CHARS, } return render(request, 'form_event.html', context)
def test_get_edit_event_form_media_item(self): with tempfile.NamedTemporaryFile(dir="/tmp", prefix="toolkit-test-", suffix=".jpg") as temp_jpg: # Add MediaItem to event 1: media_item = MediaItem( media_file=temp_jpg.name, mimetype="image/jpeg", caption="Image Caption!", credit="Image Credit!" ) media_item.save() event = Event.objects.get(id=1) event.media.add(media_item) event.save() # Get page: url = reverse("edit-event-details", kwargs={"event_id": 1}) response = self.client.get(url) self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, "form_event.html") self.assertContains(response, media_item.media_file) # Submit the minimum amount of data to validate: self.assertContains(response, "Image Credit!")
def post(self, request, event_id): # Handle POSTing of the "edit event" form. The slightly higher than # expected complexity is because there can be more than one media items # for an event (even though this isn't currently reflected in the UI). # # This means that there are two forms: one for the event, and one for # the media item. The extra logic is to cover the fact that both # records need to be updated. # Event object event = get_object_or_404(Event, pk=event_id) # Get the event's media item, or start a new one: media_item = event.get_main_mediaitem() or MediaItem() logger.info(u"Updating event {0}".format(event_id)) # Create and populate forms: form = diary_forms.EventForm(request.POST, instance=event) media_form = diary_forms.MediaItemForm(request.POST, request.FILES, instance=media_item) # Validate if form.is_valid() and media_form.is_valid(): self._save(event, media_item, form, media_form) messages.add_message( request, messages.SUCCESS, u"Updated details for event '{0}'".format(event.name)) return _return_to_editindex(request) # Got here if there's a form validation error: context = { 'event': event, 'form': form, 'media_form': media_form, 'programme_copy_summary_max_chars': settings.PROGRAMME_COPY_SUMMARY_MAX_CHARS, } return render(request, 'form_event.html', context)