misc: always strip template rendering result (#30561) #463

Merged
fpeters merged 1 commits from wip/30561-always-strip-template-result into main 2023-07-14 09:03:36 +02:00
4 changed files with 31 additions and 16 deletions

View File

@ -3765,6 +3765,21 @@ def test_form_page_checkbox_prefill(pub):
assert resp.forms[0]['f0disabled'].attrs['disabled']
def test_form_page_date_prefill(pub):
create_user(pub)
formdef = create_formdef()
formdef.data_class().wipe()
# check simple date and with a template with extraneous space
for value in ('2023-07-07', '{{ " 2023-07-07" }}'):
formdef.fields = [fields.DateField(id='0', label='date', prefill={'type': 'string', 'value': value})]
formdef.store()
resp = get_app(pub).get('/test/')
assert resp.forms[0]['f0'].value == '2023-07-07'
resp = resp.forms[0].submit('submit') # -> validation
assert resp.forms[0]['f0'].value == '2023-07-07'
def test_form_page_template_prefill_items_field(pub):
BlockDef.wipe()
create_user(pub)
@ -7717,7 +7732,7 @@ def test_email_actions(pub, emails):
resp = resp.form.submit('submit')
resp = resp.form.submit('submit')
email_data = emails.get('New form2 (test email action)')
assert len(re.findall(r'http.*? ', email_data['payload'])) == 2
assert len(re.findall(r'http.*?\s', email_data['payload'])) == 2
# custom messages
workflow.possible_status[0].items[
@ -8176,7 +8191,7 @@ def test_backoffice_fields_just_after_conditional_form_submit(pub):
assert formdata.data['3'] == '2'
assert formdata.data['bo1'] == 'None vs B2'
assert formdata.data['bo2'] == ' vs moreB2'
assert formdata.data['bo2'] == 'vs moreB2'
def test_backoffice_fields_just_after_conditional_form_edit_action(pub):
@ -8245,7 +8260,7 @@ def test_backoffice_fields_just_after_conditional_form_edit_action(pub):
# check unfeed on FormPage::submitted()
assert formdata.data['bo1'] == 'None vs B2'
assert formdata.data['bo2'] == ' vs moreB2'
assert formdata.data['bo2'] == 'vs moreB2'
app = login(get_app(pub), username='foo', password='foo')
resp = app.get('/test/%s/' % formdata.id)
@ -8265,7 +8280,7 @@ def test_backoffice_fields_just_after_conditional_form_edit_action(pub):
# check unfeed on FormPage::submitted_existing()
assert formdata.data['bo1'] == 'A1 vs None'
assert formdata.data['bo2'] == 'moreA1 vs '
assert formdata.data['bo2'] == 'moreA1 vs'
def test_backoffice_fields_set_from_live(pub):

View File

@ -1717,7 +1717,7 @@ def test_lazy_formdata_queryset_filter(pub, variable_test_data):
{% endwith %}'''
)
context['value'] = value
assert tmpl.render(context) == '\n OK\n '
assert tmpl.render(context) == 'OK'
assert 'not a date' not in LazyFormData(formdata).objects.getlist('datefield')
# test |getlistdict
@ -2175,7 +2175,7 @@ def test_lazy_strip_method(pub, variable_test_data):
pub.substitutions.reset()
pub.substitutions.feed(formdef)
with pub.substitutions.temporary_feed(formdata, force_mode=mode):
assert WorkflowStatusItem.compute('{{ form_var_foo_foo }}', raises=True) == ' bar '
assert WorkflowStatusItem.compute('{{ form_var_foo_foo }}', raises=True) == 'bar'
assert WorkflowStatusItem.compute('{{ form_var_foo_foo.strip }}', raises=True) == 'bar'
@ -3591,7 +3591,7 @@ def test_block_variables(pub):
assert tmpl.render(context) == 'XfooY, Xfoo2Y'
tmpl = Template('{% for sub in form_var_block %}{{ sub.foo }} {% endfor %}')
assert tmpl.render(context) == 'foo foo2 '
assert tmpl.render(context) == 'foo foo2'
tmpl = Template('{{ form_var_block|length }}')
assert tmpl.render(context) == '2'

View File

@ -153,15 +153,15 @@ def test_split_templatetag():
def test_strip_templatetag():
tmpl = Template('{{ foo|strip }}')
tmpl = Template('{{ foo|strip:"_" }}')
assert tmpl.render() == ''
assert tmpl.render({'foo': None}) == ''
assert tmpl.render({'foo': ' foo bar '}) == 'foo bar'
assert tmpl.render({'foo': ' foo bar\t'}) == 'foo bar'
assert tmpl.render({'foo': ' félé '}) == 'félé'
assert tmpl.render({'foo': '_foo bar'}) == 'foo bar'
assert tmpl.render({'foo': '_foo bar__'}) == 'foo bar'
assert tmpl.render({'foo': '_félé_'}) == 'félé'
tmpl = Template('{{ foo|strip:"XY" }}')
assert tmpl.render({'foo': 'XXfoo barXYX'}) == 'foo bar'
assert tmpl.render({'foo': ' foo barXX'}) == ' foo bar'
assert tmpl.render({'foo': ' foo barXX'}) == 'foo bar'
def test_removeprefix_templatetag():
@ -175,7 +175,7 @@ def test_removeprefix_templatetag():
assert tmpl.render({'foo': 'XYfoo barXY'}) == 'foo barXY'
assert tmpl.render({'foo': 'foo bar'}) == 'foo bar'
assert tmpl.render({'foo': 'xyfoo barXY'}) == 'xyfoo barXY'
assert tmpl.render({'foo': ' XYfoo barXY'}) == ' XYfoo barXY'
assert tmpl.render({'foo': ' XYfoo barXY'}) == 'XYfoo barXY'
assert tmpl.render({'foo': 'XYXYfoo barXY'}) == 'XYfoo barXY'
@ -190,7 +190,7 @@ def test_removesuffix_templatetag():
assert tmpl.render({'foo': 'XYfoo barXY'}) == 'XYfoo bar'
assert tmpl.render({'foo': 'foo bar'}) == 'foo bar'
assert tmpl.render({'foo': 'XYfoo barxy'}) == 'XYfoo barxy'
assert tmpl.render({'foo': 'XYfoo barXY '}) == 'XYfoo barXY '
assert tmpl.render({'foo': 'XYfoo barXY '}) == 'XYfoo barXY'
assert tmpl.render({'foo': 'XYfoo barXYXY'}) == 'XYfoo barXY'
@ -248,7 +248,7 @@ def test_unaccent_templatetag(pub):
def test_template_encoding():
# django
tmpl = Template('{{ foo }} à vélo')
assert tmpl.render() == ' à vélo'
assert tmpl.render() == 'à vélo'
assert tmpl.render({'foo': 'fou'}) == 'fou à vélo'
assert tmpl.render({'foo': 'félé'}) == 'félé à vélo'

View File

@ -306,7 +306,7 @@ class Template:
raise
get_publisher().record_error(exception=e, notify=True)
return self.value
rendered = str(rendered)
rendered = str(rendered).strip()
if context.get('allow_complex'):
return rendered
return re.sub(r'[\uE000-\uF8FF]', '', rendered)