11import furl
22import pytest
33
4- from mfr .extensions .pdf import (settings ,
5- PdfRenderer )
64from mfr .core .provider import ProviderMetadata
5+ from mfr .extensions .pdf import settings , PdfRenderer
6+ from mfr .extensions .utils import escape_url_for_template
77
88
99@pytest .fixture
1010def metadata ():
1111 return ProviderMetadata ('test' , '.pdf' , 'text/plain' , '1234' ,
1212 'http://wb.osf.io/file/test.pdf?token=1234' )
1313
14+
1415@pytest .fixture
1516def tif_metadata ():
1617 return ProviderMetadata ('test' , '.tif' , 'text/plain' , '1234' ,
1718 'http://wb.osf.io/file/test.tif?token=1234' )
1819
20+
1921@pytest .fixture
2022def file_path ():
2123 return '/tmp/test.pdf'
2224
25+
2326@pytest .fixture
2427def tif_file_path ():
2528 return '/tmp/test.tif'
@@ -42,13 +45,14 @@ def assets_url():
4245
4346@pytest .fixture
4447def export_url ():
45- return 'http://mfr.osf.io/export?url=' + url ()
48+ return 'http://mfr.osf.io/export?url=http://osf.io/file/test.pdf'
4649
4750
4851@pytest .fixture
4952def renderer (metadata , file_path , url , assets_url , export_url ):
5053 return PdfRenderer (metadata , file_path , url , assets_url , export_url )
5154
55+
5256@pytest .fixture
5357def tif_renderer (tif_metadata , tif_file_path , tif_url , assets_url , export_url ):
5458 return PdfRenderer (tif_metadata , tif_file_path , tif_url , assets_url , export_url )
@@ -62,6 +66,23 @@ def test_render_pdf(self, renderer, metadata, assets_url):
6266 assert '<div id="viewer" class="pdfViewer"></div>' in body
6367 assert 'DEFAULT_URL = \' {}\' ' .format (metadata .download_url ) in body
6468
69+ def test_render_pdf_with_single_quote_in_name (self , assets_url ):
70+
71+ download_url = 'http://wb.osf.io/file/te\' st.pdf?token=1234'
72+ safe_download_url = 'http://wb.osf.io/file/te%27st.pdf?token=1234'
73+
74+ metadata = ProviderMetadata ('te\' st' , '.pdf' , 'text/plain' , '1234' , download_url )
75+ renderer = PdfRenderer (metadata , '/tmp/te\' st.pdf' , 'http://osf.io/file/te\' st.pdf' ,
76+ assets_url ,
77+ 'http://mfr.osf.io/export?url=http://osf.io/file/te\' st.pdf' )
78+
79+ body = renderer .render ()
80+
81+ assert '<base href="{}/{}/web/" target="_blank">' .format (assets_url , 'pdf' ) in body
82+ assert '<div id="viewer" class="pdfViewer"></div>' in body
83+ assert 'DEFAULT_URL = \' {}\' ' .format (download_url ) not in body
84+ assert 'DEFAULT_URL = \' {}\' ' .format (safe_download_url ) in body
85+
6586 def test_render_tif (self , tif_renderer , assets_url ):
6687 exported_url = furl .furl (tif_renderer .export_url )
6788 exported_url .args ['format' ] = '{}.{}' .format (settings .EXPORT_MAXIMUM_SIZE ,
@@ -71,3 +92,19 @@ def test_render_tif(self, tif_renderer, assets_url):
7192 assert '<base href="{}/{}/web/" target="_blank">' .format (assets_url , 'pdf' ) in body
7293 assert '<div id="viewer" class="pdfViewer"></div>' in body
7394 assert 'DEFAULT_URL = \' {}\' ' .format (exported_url .url ) in body
95+
96+ def test_render_docx (self , assets_url ):
97+
98+ export_url = 'http://mfr.osf.io/export?url=http://osf.io/file/te\' st.docx&format=pdf'
99+ safe_url = 'http://mfr.osf.io/export?url=http://osf.io/file/te%27st.docx&format=pdf'
100+
101+ metadata = ProviderMetadata ('te\' st' , '.docx' , 'text/plain' , '1234' , export_url )
102+ renderer = PdfRenderer (metadata , '/tmp/te\' st.docx' , export_url , assets_url ,
103+ 'http://mfr.osf.io/export?url=http://osf.io/file/te\' st.docx' )
104+
105+ body = renderer .render ()
106+
107+ assert '<base href="{}/{}/web/" target="_blank">' .format (assets_url , 'pdf' ) in body
108+ assert '<div id="viewer" class="pdfViewer"></div>' in body
109+ assert 'DEFAULT_URL = \' {}\' ' .format (export_url ) not in body
110+ assert 'DEFAULT_URL = \' {}\' ' .format (safe_url ) in body
0 commit comments