159 lines
5.6 KiB
Python
159 lines
5.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
import pytest
|
|
|
|
from quixote import cleanup
|
|
from qommon.template import Template, TemplateError
|
|
from wcs.conditions import Condition
|
|
|
|
from utilities import create_temporary_pub, clean_temporary_pub
|
|
|
|
|
|
def setup_module(module):
|
|
cleanup()
|
|
global pub
|
|
pub = create_temporary_pub()
|
|
|
|
|
|
def teardown_module(module):
|
|
clean_temporary_pub()
|
|
|
|
|
|
def test_template():
|
|
tmpl = Template('')
|
|
assert tmpl.render() == ''
|
|
assert tmpl.render({'foo': 'bar'}) == ''
|
|
tmpl = Template('zoo')
|
|
assert tmpl.render() == 'zoo'
|
|
assert tmpl.render({'foo': 'bar'}) == 'zoo'
|
|
|
|
# django
|
|
tmpl = Template('{{ foo }}')
|
|
assert tmpl.render() == ''
|
|
assert tmpl.render({'foo': 'bar'}) == 'bar'
|
|
tmpl = Template('{% if foo %}{{ foo }}{% endif %}')
|
|
assert tmpl.render() == ''
|
|
assert tmpl.render({'foo': 'bar'}) == 'bar'
|
|
|
|
# ezt
|
|
tmpl = Template('[foo]')
|
|
assert tmpl.render() == '[foo]'
|
|
assert tmpl.render({'foo': 'bar'}) == 'bar'
|
|
tmpl = Template('[if-any foo][foo][end]')
|
|
assert tmpl.render() == ''
|
|
assert tmpl.render({'foo': 'bar'}) == 'bar'
|
|
|
|
# mix Django/ezt: Django wins
|
|
tmpl = Template('{% if foo %}{{ foo }}[foo]{% endif %}')
|
|
assert tmpl.render({'foo': 'bar'}) == 'bar[foo]'
|
|
|
|
# django syntax error
|
|
with pytest.raises(TemplateError):
|
|
tmpl = Template('{% if foo %}{{ foo }}{% end %}', raises=True)
|
|
tmpl = Template('{% if foo %}{{ foo }}{% end %}')
|
|
assert tmpl.render({'foo': 'bar'}) == '{% if foo %}{{ foo }}{% end %}'
|
|
|
|
# ezt syntax error
|
|
with pytest.raises(TemplateError):
|
|
tmpl = Template('[if-any foo][foo][endif]', raises=True)
|
|
tmpl = Template('[if-any foo][foo][endif]')
|
|
assert tmpl.render({'foo': 'bar'}) == '[if-any foo][foo][endif]'
|
|
|
|
def test_template_templatetag():
|
|
# check qommon templatetags are always loaded
|
|
tmpl = Template('{{ date|parse_datetime|date:"Y" }}')
|
|
assert tmpl.render({'date': '2018-06-06'}) == '2018'
|
|
|
|
# check other templatetags can be loaded
|
|
tmpl = Template('{% load i18n %}{% trans "hello" %}')
|
|
assert tmpl.render() == 'hello'
|
|
|
|
def test_startswith_templatetag():
|
|
tmpl = Template('{% if foo|startswith:"bar" %}hello{% endif %}')
|
|
assert tmpl.render() == ''
|
|
assert tmpl.render({'foo': 'bar-baz'}) == 'hello'
|
|
assert tmpl.render({'foo': 'baz-bar'}) == ''
|
|
|
|
def test_split_templatetag():
|
|
tmpl = Template('{{ foo|split|last }}')
|
|
assert tmpl.render() == ''
|
|
assert tmpl.render({'foo': 'bar baz'}) == 'baz'
|
|
assert tmpl.render({'foo': 'baz-bar'}) == 'baz-bar'
|
|
|
|
tmpl = Template('{{ foo|split:"-"|last }}')
|
|
assert tmpl.render() == ''
|
|
assert tmpl.render({'foo': 'bar-baz'}) == 'baz'
|
|
assert tmpl.render({'foo': 'baz-bar'}) == 'bar'
|
|
|
|
def test_template_encoding():
|
|
# django
|
|
tmpl = Template('{{ foo }} à 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'
|
|
|
|
tmpl = Template("{% if foo == 'félé' %}à vélo{% endif %}")
|
|
assert tmpl.render() == ''
|
|
assert tmpl.render({'foo': 'fou'}) == ''
|
|
assert tmpl.render({'foo': 'félé'}) == 'à vélo'
|
|
|
|
tmpl = Template("{% if foo.bar == 'félé' %}à vélo{% endif %}")
|
|
assert tmpl.render() == ''
|
|
assert tmpl.render({'foo': {'bar': 'fou'}}) == ''
|
|
assert tmpl.render({'foo': {'bar': 'félé'}}) == 'à vélo'
|
|
|
|
# ezt
|
|
tmpl = Template('[foo] à vélo')
|
|
assert tmpl.render() == '[foo] à vélo'
|
|
assert tmpl.render({'foo': 'fou'}) == 'fou à vélo'
|
|
assert tmpl.render({'foo': 'félé'}) == 'félé à vélo'
|
|
|
|
|
|
def test_datetime_templatetags():
|
|
tmpl = Template('{{ plop|parse_datetime|date:"d i" }}')
|
|
assert tmpl.render({'plop': '2017-12-21 10:32'}) == '21 32'
|
|
assert tmpl.render({'plop': '2017-12-21 10:32:42'}) == '21 32'
|
|
assert tmpl.render({'plop': '21/12/2017 10:32'}) == '21 32'
|
|
assert tmpl.render({'plop': '21/12/2017 10:32:42'}) == '21 32'
|
|
assert tmpl.render({'plop': '21/12/2017 10h32'}) == '21 32'
|
|
assert tmpl.render({'plop': 'x'}) == ''
|
|
assert tmpl.render({'plop': None}) == ''
|
|
assert tmpl.render({'plop': 3}) == ''
|
|
assert tmpl.render({'plop': {'foo': 'bar'}}) == ''
|
|
assert tmpl.render() == ''
|
|
|
|
tmpl = Template('{{ plop|parse_date|date:"d" }}')
|
|
assert tmpl.render({'plop': '2017-12-21'}) == '21'
|
|
assert tmpl.render({'plop': '21/12/2017'}) == '21'
|
|
assert tmpl.render({'plop': 'x'}) == ''
|
|
assert tmpl.render({'plop': None}) == ''
|
|
assert tmpl.render({'plop': 3}) == ''
|
|
assert tmpl.render({'plop': {'foo': 'bar'}}) == ''
|
|
assert tmpl.render() == ''
|
|
|
|
tmpl = Template('{{ plop|parse_time|date:"H i" }}')
|
|
assert tmpl.render({'plop': '10:32'}) == '10 32'
|
|
assert tmpl.render({'plop': 'x'}) == ''
|
|
assert tmpl.render({'plop': None}) == ''
|
|
assert tmpl.render({'plop': 3}) == ''
|
|
assert tmpl.render({'plop': {'foo': 'bar'}}) == ''
|
|
assert tmpl.render() == ''
|
|
|
|
def test_variable_unicode_error_handling():
|
|
tmpl = Template('{{ form_var_éléphant }}')
|
|
assert tmpl.render() == ''
|
|
|
|
def test_decimal_templatetag():
|
|
tmpl = Template('{{ plop|decimal }}')
|
|
assert tmpl.render({'plop': 'toto'}) == ''
|
|
assert tmpl.render({'plop': '3.14'}) == '3.14'
|
|
assert tmpl.render({'plop': '3,14'}) == '3.14'
|
|
assert tmpl.render({'plop': 3.14}) == '3.14'
|
|
assert tmpl.render({'plop': 12345.678}) == '12345.678'
|
|
assert tmpl.render({'plop': None}) == ''
|
|
|
|
tmpl = Template('{% if plop|decimal > 2 %}hello{% endif %}')
|
|
assert tmpl.render({'plop': 3}) == 'hello'
|
|
assert tmpl.render({'plop': 1}) == ''
|
|
assert tmpl.render({'plop': None}) == 'hello' # will be str > int, always True.
|