Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions ietf/meeting/tests_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
from urllib.parse import urlparse, urlsplit, quote
from PIL import Image
from pathlib import Path
from tempfile import NamedTemporaryFile

from django.urls import reverse as urlreverse
from django.conf import settings
Expand Down Expand Up @@ -7609,6 +7610,35 @@ def test_add_proceedings_material_doc(self):
)
self.assertEqual(mat.get_href(), f'{mat.document.name}:00')

def test_add_proceedings_material_doc_invalid_ext(self):
"""Upload proceedings materials document with disallowed extension"""
meeting = self._procmat_test_meeting()
self.client.login(username='secretary', password='secretary+password')
with NamedTemporaryFile('w+', suffix='.png') as invalid_file:
invalid_file.write('this is not a PDF file!!')
for mat_type in ProceedingsMaterialTypeName.objects.filter(used=True):
url = urlreverse(
'ietf.meeting.views_proceedings.upload_material',
kwargs=dict(num=meeting.number, material_type=mat_type.slug),
)
invalid_file.seek(0) # read the file contents again
r = self.client.post(url, {'file': invalid_file, 'external_url': ''})
self.assertEqual(r.status_code, 200)
self.assertFormError(r, 'form', 'file', 'Found an unexpected extension: .png. Expected one of .pdf')

def test_add_proceedings_material_doc_empty(self):
"""Upload proceedings materials document without specifying a file"""
meeting = self._procmat_test_meeting()
self.client.login(username='secretary', password='secretary+password')
for mat_type in ProceedingsMaterialTypeName.objects.filter(used=True):
url = urlreverse(
'ietf.meeting.views_proceedings.upload_material',
kwargs=dict(num=meeting.number, material_type=mat_type.slug),
)
r = self.client.post(url, {'external_url': ''})
self.assertEqual(r.status_code, 200)
self.assertFormError(r, 'form', 'file', 'This field is required')

def test_add_proceedings_material_url(self):
"""Add a URL as proceedings material"""
meeting = self._procmat_test_meeting()
Expand All @@ -7620,6 +7650,32 @@ def test_add_proceedings_material_url(self):
)
self.assertEqual(mat.get_href(), 'https://example.com')

def test_add_proceedings_material_url_invalid(self):
"""Add proceedings materials URL with a non-URL value"""
meeting = self._procmat_test_meeting()
self.client.login(username='secretary', password='secretary+password')
for mat_type in ProceedingsMaterialTypeName.objects.filter(used=True):
url = urlreverse(
'ietf.meeting.views_proceedings.upload_material',
kwargs=dict(num=meeting.number, material_type=mat_type.slug),
)
r = self.client.post(url, {'use_url': 'on', 'external_url': "Ceci n'est pas une URL"})
self.assertEqual(r.status_code, 200)
self.assertFormError(r, 'form', 'external_url', 'Enter a valid URL.')

def test_add_proceedings_material_url_empty(self):
"""Add proceedings materials URL without specifying the URL"""
meeting = self._procmat_test_meeting()
self.client.login(username='secretary', password='secretary+password')
for mat_type in ProceedingsMaterialTypeName.objects.filter(used=True):
url = urlreverse(
'ietf.meeting.views_proceedings.upload_material',
kwargs=dict(num=meeting.number, material_type=mat_type.slug),
)
r = self.client.post(url, {'use_url': 'on', 'external_url': ''})
self.assertEqual(r.status_code, 200)
self.assertFormError(r, 'form', 'external_url', 'This field is required')

@override_settings(MEETING_DOC_HREFS={'procmaterials': '{doc.name}:{doc.rev}'})
def test_replace_proceedings_material(self):
"""Replace uploaded document with new uploaded document"""
Expand Down
4 changes: 2 additions & 2 deletions ietf/meeting/views_proceedings.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,11 @@ def clean_file(self):

def clean(self):
if self.cleaned_data['use_url']:
if not self.cleaned_data['external_url']:
if not self.data.get('external_url', None):
self.add_error('external_url', 'This field is required')
else:
self.cleaned_data['external_url'] = None # make sure this is empty
if self.cleaned_data['file'] is None:
if self.files.get('file', None) is None:
self.add_error('file', 'This field is required')

class EditProceedingsMaterialForm(forms.Form):
Expand Down