11import os
22import pytest
3+ from tempfile import NamedTemporaryFile
34
45from mfr .core .exceptions import RendererError
56from mfr .core .provider import ProviderMetadata
67
7- from mfr .extensions .codepygments import CodePygmentsRenderer
8+ from mfr .extensions .codepygments import settings , CodePygmentsRenderer
9+ from mfr .extensions .codepygments .exceptions import FileTooLargeException
810
911
1012@pytest .fixture
@@ -16,6 +18,29 @@ def metadata():
1618def test_file_path ():
1719 return os .path .join (os .path .dirname (os .path .abspath (__file__ )), 'files' , 'test.xml' )
1820
21+ @pytest .fixture
22+ def max_size_file_path ():
23+ dir_path = os .path .join (os .path .dirname (os .path .abspath (__file__ )),
24+ 'files' )
25+ with NamedTemporaryFile (mode = 'w+b' , suffix = '.txt' , dir = dir_path ,
26+ delete = False ) as temp_file :
27+ temp_file_path = temp_file .name
28+ file_size = settings .MAX_SIZE
29+ temp_file .seek (file_size - 1 )
30+ temp_file .write (b'0' )
31+ return temp_file_path
32+
33+ @pytest .fixture
34+ def over_size_file_path ():
35+ dir_path = os .path .join (os .path .dirname (os .path .abspath (__file__ )),
36+ 'files' )
37+ with NamedTemporaryFile (mode = 'w+b' , suffix = '.txt' , dir = dir_path ,
38+ delete = False ) as temp_file :
39+ temp_file_path = temp_file .name
40+ file_size = settings .MAX_SIZE
41+ temp_file .seek (file_size )
42+ temp_file .write (b'0' )
43+ return temp_file_path
1944
2045@pytest .fixture
2146def invalid_file_path ():
@@ -58,6 +83,23 @@ def test_render_codepygments_invalid(self, metadata, invalid_file_path, url, ass
5883 with pytest .raises (RendererError ):
5984 renderer .render ()
6085
86+ def test_render_codepygments_max_size (self , metadata , max_size_file_path , url , assets_url , export_url ):
87+ try :
88+ renderer = CodePygmentsRenderer (metadata , max_size_file_path , url , assets_url , export_url )
89+ body = renderer .render ()
90+ assert '<div style="word-wrap: break-word;" class="mfrViewer">' in body
91+ finally :
92+ os .remove (max_size_file_path )
93+
94+ def test_render_codepygments_over_size (self , metadata , over_size_file_path , url , assets_url , export_url ):
95+ with pytest .raises (FileTooLargeException ):
96+ try :
97+ renderer = CodePygmentsRenderer (metadata , over_size_file_path ,
98+ url , assets_url , export_url )
99+ renderer .render ()
100+ finally :
101+ os .remove (over_size_file_path )
102+
61103 def test_render_codepygments_file_required (self , renderer ):
62104 assert renderer .file_required is True
63105
0 commit comments