11import furl
22import pytest
3- import re
43
5- from mfr .extensions .pdf import (settings ,
6- PdfRenderer )
74from mfr .core .provider import ProviderMetadata
5+ from mfr .extensions .pdf import settings , PdfRenderer
6+ from mfr .extensions .utils import escape_url_for_template
87
98
109@pytest .fixture
1110def metadata ():
1211 return ProviderMetadata ('test' , '.pdf' , 'text/plain' , '1234' ,
1312 'http://wb.osf.io/file/test.pdf?token=1234' )
1413
14+
15+ @pytest .fixture
16+ def metadata_2 ():
17+ return ProviderMetadata ('te\' st' , '.pdf' , 'text/plain' , '1234' ,
18+ 'http://wb.osf.io/file/te\' st.pdf?token=1234' )
19+
20+
1521@pytest .fixture
1622def tif_metadata ():
1723 return ProviderMetadata ('test' , '.tif' , 'text/plain' , '1234' ,
1824 'http://wb.osf.io/file/test.tif?token=1234' )
1925
26+
2027@pytest .fixture
2128def docx_metadata ():
22- return ProviderMetadata (
23- 'te\' st' ,
24- '.docx' ,
25- 'text/plain' ,
26- '1234' ,
27- 'http://mfr.osf.io/export?url=http://osf.io/file/te\' st.pdf'
28- )
29+ return ProviderMetadata ('te\' st' , '.docx' , 'text/plain' ,'1234' ,
30+ 'http://mfr.osf.io/export?url=http://osf.io/file/te\' st.pdf' )
31+
2932
3033@pytest .fixture
3134def file_path ():
3235 return '/tmp/test.pdf'
3336
37+
38+ @pytest .fixture
39+ def file_path_2 ():
40+ return '/tmp/te\' st.pdf'
41+
42+
3443@pytest .fixture
3544def tif_file_path ():
3645 return '/tmp/test.tif'
3746
47+
3848@pytest .fixture
3949def docx_file_path ():
4050 return '/tmp/te\' st.docx'
4151
4252
4353@pytest .fixture
4454def url ():
55+ return 'http://osf.io/file/test.pdf'
56+
57+
58+ @pytest .fixture
59+ def url_2 ():
4560 return 'http://osf.io/file/te\' st.pdf'
4661
4762
4863@pytest .fixture
4964def tif_url ():
50- return 'http://osf.io/file/te \' st .tif'
65+ return 'http://osf.io/file/test .tif'
5166
5267
5368@pytest .fixture
@@ -62,6 +77,11 @@ def assets_url():
6277
6378@pytest .fixture
6479def export_url ():
80+ return 'http://mfr.osf.io/export?url=http://osf.io/file/test.pdf'
81+
82+
83+ @pytest .fixture
84+ def export_url_2 ():
6585 return 'http://mfr.osf.io/export?url=http://osf.io/file/te\' st.pdf'
6686
6787
@@ -71,31 +91,18 @@ def renderer(metadata, file_path, url, assets_url, export_url):
7191
7292
7393@pytest .fixture
74- def tif_renderer (
75- tif_metadata ,
76- tif_file_path ,
77- tif_url ,
78- assets_url ,
79- export_url
80- ):
94+ def renderer_2 (metadata_2 , file_path_2 , url_2 , assets_url , export_url_2 ):
95+ return PdfRenderer (metadata_2 , file_path_2 , url_2 , assets_url , export_url_2 )
96+
97+
98+ @pytest .fixture
99+ def tif_renderer (tif_metadata , tif_file_path , tif_url , assets_url , export_url ):
81100 return PdfRenderer (tif_metadata , tif_file_path , tif_url , assets_url , export_url )
82101
83102
84103@pytest .fixture
85- def docx_renderer (
86- docx_metadata ,
87- docx_file_path ,
88- docx_url ,
89- assets_url ,
90- export_url
91- ):
92- return PdfRenderer (
93- docx_metadata ,
94- docx_file_path ,
95- docx_url ,
96- assets_url ,
97- export_url
98- )
104+ def docx_renderer (docx_metadata , docx_file_path , docx_url , assets_url , export_url_2 ):
105+ return PdfRenderer (docx_metadata , docx_file_path , docx_url , assets_url , export_url_2 )
99106
100107
101108class TestPdfRenderer :
@@ -106,6 +113,16 @@ def test_render_pdf(self, renderer, metadata, assets_url):
106113 assert '<div id="viewer" class="pdfViewer"></div>' in body
107114 assert 'DEFAULT_URL = \' {}\' ' .format (metadata .download_url ) in body
108115
116+ def test_render_pdf_with_single_quote_in_name (self , renderer_2 , metadata_2 , assets_url ):
117+
118+ body = renderer_2 .render ()
119+ safe_download_url = escape_url_for_template (metadata_2 .download_url , logs = False )
120+
121+ assert '<base href="{}/{}/web/" target="_blank">' .format (assets_url , 'pdf' ) in body
122+ assert '<div id="viewer" class="pdfViewer"></div>' in body
123+ assert 'DEFAULT_URL = \' {}\' ' .format (metadata_2 .download_url ) not in body
124+ assert 'DEFAULT_URL = \' {}\' ' .format (safe_download_url ) in body
125+
109126 def test_render_tif (self , tif_renderer , assets_url ):
110127 exported_url = furl .furl (tif_renderer .export_url )
111128 exported_url .args ['format' ] = '{}.{}' .format (settings .EXPORT_MAXIMUM_SIZE ,
@@ -117,10 +134,12 @@ def test_render_tif(self, tif_renderer, assets_url):
117134 assert 'DEFAULT_URL = \' {}\' ' .format (exported_url .url ) in body
118135
119136 def test_render_docx (self , docx_renderer , assets_url ):
120- exported_url = furl .furl (docx_renderer .export_url )
121137
138+ exported_url = furl .furl (docx_renderer .export_url )
139+ safe_exported_url = escape_url_for_template (exported_url .url , logs = False )
122140 body = docx_renderer .render ()
141+
123142 assert '<base href="{}/{}/web/" target="_blank">' .format (assets_url , 'pdf' ) in body
124143 assert '<div id="viewer" class="pdfViewer"></div>' in body
125- assert 'DEFAULT_URL = \' {}\' ' .format (re . sub ( r'\'' , ' \\ \' ' , exported_url .url )) in body
126-
144+ assert 'DEFAULT_URL = \' {}\' ' .format (exported_url .url ) not in body
145+ assert 'DEFAULT_URL = \' {} \' ' . format ( safe_exported_url ) in body
0 commit comments