2020from urllib .parse import urlparse , urlsplit , quote
2121from PIL import Image
2222from pathlib import Path
23+ from tempfile import NamedTemporaryFile
2324
2425from django .urls import reverse as urlreverse
2526from django .conf import settings
@@ -7609,6 +7610,35 @@ def test_add_proceedings_material_doc(self):
76097610 )
76107611 self .assertEqual (mat .get_href (), f'{ mat .document .name } :00' )
76117612
7613+ def test_add_proceedings_material_doc_invalid_ext (self ):
7614+ """Upload proceedings materials document with disallowed extension"""
7615+ meeting = self ._procmat_test_meeting ()
7616+ self .client .login (username = 'secretary' , password = 'secretary+password' )
7617+ with NamedTemporaryFile ('w+' , suffix = '.png' ) as invalid_file :
7618+ invalid_file .write ('this is not a PDF file!!' )
7619+ for mat_type in ProceedingsMaterialTypeName .objects .filter (used = True ):
7620+ url = urlreverse (
7621+ 'ietf.meeting.views_proceedings.upload_material' ,
7622+ kwargs = dict (num = meeting .number , material_type = mat_type .slug ),
7623+ )
7624+ invalid_file .seek (0 ) # read the file contents again
7625+ r = self .client .post (url , {'file' : invalid_file , 'external_url' : '' })
7626+ self .assertEqual (r .status_code , 200 )
7627+ self .assertFormError (r , 'form' , 'file' , 'Found an unexpected extension: .png. Expected one of .pdf' )
7628+
7629+ def test_add_proceedings_material_doc_empty (self ):
7630+ """Upload proceedings materials document without specifying a file"""
7631+ meeting = self ._procmat_test_meeting ()
7632+ self .client .login (username = 'secretary' , password = 'secretary+password' )
7633+ for mat_type in ProceedingsMaterialTypeName .objects .filter (used = True ):
7634+ url = urlreverse (
7635+ 'ietf.meeting.views_proceedings.upload_material' ,
7636+ kwargs = dict (num = meeting .number , material_type = mat_type .slug ),
7637+ )
7638+ r = self .client .post (url , {'external_url' : '' })
7639+ self .assertEqual (r .status_code , 200 )
7640+ self .assertFormError (r , 'form' , 'file' , 'This field is required' )
7641+
76127642 def test_add_proceedings_material_url (self ):
76137643 """Add a URL as proceedings material"""
76147644 meeting = self ._procmat_test_meeting ()
@@ -7620,6 +7650,32 @@ def test_add_proceedings_material_url(self):
76207650 )
76217651 self .assertEqual (mat .get_href (), 'https://example.com' )
76227652
7653+ def test_add_proceedings_material_url_invalid (self ):
7654+ """Add proceedings materials URL with a non-URL value"""
7655+ meeting = self ._procmat_test_meeting ()
7656+ self .client .login (username = 'secretary' , password = 'secretary+password' )
7657+ for mat_type in ProceedingsMaterialTypeName .objects .filter (used = True ):
7658+ url = urlreverse (
7659+ 'ietf.meeting.views_proceedings.upload_material' ,
7660+ kwargs = dict (num = meeting .number , material_type = mat_type .slug ),
7661+ )
7662+ r = self .client .post (url , {'use_url' : 'on' , 'external_url' : "Ceci n'est pas une URL" })
7663+ self .assertEqual (r .status_code , 200 )
7664+ self .assertFormError (r , 'form' , 'external_url' , 'Enter a valid URL.' )
7665+
7666+ def test_add_proceedings_material_url_empty (self ):
7667+ """Add proceedings materials URL without specifying the URL"""
7668+ meeting = self ._procmat_test_meeting ()
7669+ self .client .login (username = 'secretary' , password = 'secretary+password' )
7670+ for mat_type in ProceedingsMaterialTypeName .objects .filter (used = True ):
7671+ url = urlreverse (
7672+ 'ietf.meeting.views_proceedings.upload_material' ,
7673+ kwargs = dict (num = meeting .number , material_type = mat_type .slug ),
7674+ )
7675+ r = self .client .post (url , {'use_url' : 'on' , 'external_url' : '' })
7676+ self .assertEqual (r .status_code , 200 )
7677+ self .assertFormError (r , 'form' , 'external_url' , 'This field is required' )
7678+
76237679 @override_settings (MEETING_DOC_HREFS = {'procmaterials' : '{doc.name}:{doc.rev}' })
76247680 def test_replace_proceedings_material (self ):
76257681 """Replace uploaded document with new uploaded document"""
0 commit comments