66from rich .syntax import Syntax
77from rich .traceback import Frame
88
9- from infrahub_sdk .template import Jinja2Template
9+ from infrahub_sdk .template import Jinja2Template , Jinja2TemplateSync
1010from infrahub_sdk .template .exceptions import (
1111 JinjaTemplateError ,
1212 JinjaTemplateNotFoundError ,
@@ -78,9 +78,15 @@ class JinjaTestCaseFailing:
7878 "test_case" ,
7979 [pytest .param (tc , id = tc .name ) for tc in SUCCESSFUL_STRING_TEST_CASES ],
8080)
81- async def test_render_string (test_case : JinjaTestCase ) -> None :
82- jinja = Jinja2Template (template = test_case .template )
83- assert test_case .expected == await jinja .render (variables = test_case .variables )
81+ @pytest .mark .parametrize ("is_async" , [True , False ])
82+ async def test_render_string (test_case : JinjaTestCase , is_async : bool ) -> None :
83+ if is_async :
84+ jinja = Jinja2Template (template = test_case .template )
85+ assert test_case .expected == await jinja .render (variables = test_case .variables )
86+ else :
87+ jinja = Jinja2TemplateSync (template = test_case .template )
88+ assert test_case .expected == jinja .render (variables = test_case .variables )
89+
8490 assert test_case .expected_variables == jinja .get_variables ()
8591
8692
@@ -106,9 +112,14 @@ async def test_render_string(test_case: JinjaTestCase) -> None:
106112 "test_case" ,
107113 [pytest .param (tc , id = tc .name ) for tc in SUCCESSFUL_FILE_TEST_CASES ],
108114)
109- async def test_render_template_from_file (test_case : JinjaTestCase ) -> None :
110- jinja = Jinja2Template (template = Path (test_case .template ), template_directory = TEMPLATE_DIRECTORY )
111- assert test_case .expected == await jinja .render (variables = test_case .variables )
115+ @pytest .mark .parametrize ("is_async" , [True , False ])
116+ async def test_render_template_from_file (test_case : JinjaTestCase , is_async : bool ) -> None :
117+ if is_async :
118+ jinja = Jinja2Template (template = Path (test_case .template ), template_directory = TEMPLATE_DIRECTORY )
119+ assert test_case .expected == await jinja .render (variables = test_case .variables )
120+ else :
121+ jinja = Jinja2TemplateSync (template = Path (test_case .template ), template_directory = TEMPLATE_DIRECTORY )
122+ assert test_case .expected == jinja .render (variables = test_case .variables )
112123 assert test_case .expected_variables == jinja .get_variables ()
113124 assert jinja .get_template ()
114125
@@ -153,10 +164,16 @@ async def test_render_template_from_file(test_case: JinjaTestCase) -> None:
153164 "test_case" ,
154165 [pytest .param (tc , id = tc .name ) for tc in FAILING_STRING_TEST_CASES ],
155166)
156- async def test_render_string_errors (test_case : JinjaTestCaseFailing ) -> None :
157- jinja = Jinja2Template (template = test_case .template , template_directory = TEMPLATE_DIRECTORY )
158- with pytest .raises (test_case .error .__class__ ) as exc :
159- await jinja .render (variables = test_case .variables )
167+ @pytest .mark .parametrize ("is_async" , [True , False ])
168+ async def test_render_string_errors (test_case : JinjaTestCaseFailing , is_async : bool ) -> None :
169+ if is_async :
170+ jinja = Jinja2Template (template = test_case .template , template_directory = TEMPLATE_DIRECTORY )
171+ with pytest .raises (test_case .error .__class__ ) as exc :
172+ await jinja .render (variables = test_case .variables )
173+ else :
174+ jinja = Jinja2TemplateSync (template = test_case .template , template_directory = TEMPLATE_DIRECTORY )
175+ with pytest .raises (test_case .error .__class__ ) as exc :
176+ jinja .render (variables = test_case .variables )
160177
161178 _compare_errors (expected = test_case .error , received = exc .value )
162179
@@ -234,36 +251,64 @@ async def test_render_string_errors(test_case: JinjaTestCaseFailing) -> None:
234251 "test_case" ,
235252 [pytest .param (tc , id = tc .name ) for tc in FAILING_FILE_TEST_CASES ],
236253)
237- async def test_manage_file_based_errors (test_case : JinjaTestCaseFailing ) -> None :
238- jinja = Jinja2Template (template = Path (test_case .template ), template_directory = TEMPLATE_DIRECTORY )
239- with pytest .raises (test_case .error .__class__ ) as exc :
240- await jinja .render (variables = test_case .variables )
254+ @pytest .mark .parametrize ("is_async" , [True , False ])
255+ async def test_manage_file_based_errors (test_case : JinjaTestCaseFailing , is_async : bool ) -> None :
256+ if is_async :
257+ jinja = Jinja2Template (template = Path (test_case .template ), template_directory = TEMPLATE_DIRECTORY )
258+ with pytest .raises (test_case .error .__class__ ) as exc :
259+ await jinja .render (variables = test_case .variables )
260+ else :
261+ jinja = Jinja2TemplateSync (template = Path (test_case .template ), template_directory = TEMPLATE_DIRECTORY )
262+ with pytest .raises (test_case .error .__class__ ) as exc :
263+ jinja .render (variables = test_case .variables )
241264
242265 _compare_errors (expected = test_case .error , received = exc .value )
243266
244267
245- async def test_manage_unhandled_error () -> None :
246- jinja = Jinja2Template (
247- template = "Hello {{ number | divide_by_zero }}" ,
248- filters = {"divide_by_zero" : _divide_by_zero },
249- )
250- with pytest .raises (JinjaTemplateError ) as exc :
251- await jinja .render (variables = {"number" : 1 })
268+ @pytest .mark .parametrize ("is_async" , [True , False ])
269+ async def test_manage_unhandled_error (is_async : bool ) -> None :
270+ template = "Hello {{ number | divide_by_zero }}"
271+ filters = {"divide_by_zero" : _divide_by_zero }
272+ if is_async :
273+ jinja = Jinja2Template (
274+ template = template ,
275+ filters = filters ,
276+ )
277+ with pytest .raises (JinjaTemplateError ) as exc :
278+ await jinja .render (variables = {"number" : 1 })
279+ else :
280+ jinja = Jinja2TemplateSync (
281+ template = template ,
282+ filters = filters ,
283+ )
284+ with pytest .raises (JinjaTemplateError ) as exc :
285+ jinja .render (variables = {"number" : 1 })
252286
253287 assert exc .value .message == "division by zero"
254288
255289
256- async def test_validate_filter () -> None :
257- jinja = Jinja2Template (template = "{{ network | get_all_host }}" )
290+ @pytest .mark .parametrize ("is_async" , [True , False ])
291+ async def test_validate_filter (is_async : bool ) -> None :
292+ template = "{{ network | get_all_host }}"
293+ if is_async :
294+ jinja = Jinja2Template (template = template )
295+ else :
296+ jinja = Jinja2TemplateSync (template = template )
297+
258298 jinja .validate (restricted = False )
259299 with pytest .raises (JinjaTemplateOperationViolationError ) as exc :
260300 jinja .validate (restricted = True )
261301
262302 assert exc .value .message == "The 'get_all_host' filter isn't allowed to be used"
263303
264304
265- async def test_validate_operation () -> None :
266- jinja = Jinja2Template (template = "Hello {% include 'very-forbidden.j2' %}" )
305+ @pytest .mark .parametrize ("is_async" , [True , False ])
306+ async def test_validate_operation (is_async : bool ) -> None :
307+ if is_async :
308+ jinja = Jinja2Template (template = "Hello {% include 'very-forbidden.j2' %}" )
309+ else :
310+ jinja = Jinja2TemplateSync (template = "Hello {% include 'very-forbidden.j2' %}" )
311+
267312 with pytest .raises (JinjaTemplateOperationViolationError ) as exc :
268313 jinja .validate (restricted = True )
269314
0 commit comments