diff options
| author | Preston Timmons <prestontimmons@gmail.com> | 2014-11-11 19:32:44 -0600 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2014-12-02 19:18:35 -0500 |
| commit | b872134bfc14f6322bd1e4b0a08bf5bfd2c43a52 (patch) | |
| tree | f82fc6be418adeb1e7ff36728f82008770066999 /tests/template_tests/syntax_tests/test_regroup.py | |
| parent | 4a4ad27712b44cebada1bdaebd082cf82df74610 (diff) | |
Fixed #23768 -- Rewrote template tests as unit tests.
Diffstat (limited to 'tests/template_tests/syntax_tests/test_regroup.py')
| -rw-r--r-- | tests/template_tests/syntax_tests/test_regroup.py | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/tests/template_tests/syntax_tests/test_regroup.py b/tests/template_tests/syntax_tests/test_regroup.py new file mode 100644 index 0000000000..c9fb9b691c --- /dev/null +++ b/tests/template_tests/syntax_tests/test_regroup.py @@ -0,0 +1,103 @@ +from datetime import date + +from django.template.base import TemplateSyntaxError +from django.template.loader import get_template +from django.test import TestCase + +from .utils import render, setup + + +class RegroupTagTests(TestCase): + + @setup({'regroup01': '' + '{% regroup data by bar as grouped %}' + '{% for group in grouped %}' + '{{ group.grouper }}:' + '{% for item in group.list %}' + '{{ item.foo }}' + '{% endfor %},' + '{% endfor %}'}) + def test_regroup01(self): + output = render('regroup01', { + 'data': [{'foo': 'c', 'bar': 1}, + {'foo': 'd', 'bar': 1}, + {'foo': 'a', 'bar': 2}, + {'foo': 'b', 'bar': 2}, + {'foo': 'x', 'bar': 3}], + }) + self.assertEqual(output, '1:cd,2:ab,3:x,') + + @setup({'regroup02': '' + '{% regroup data by bar as grouped %}' + '{% for group in grouped %}' + '{{ group.grouper }}:' + '{% for item in group.list %}' + '{{ item.foo }}' + '{% endfor %}' + '{% endfor %}'}) + def test_regroup02(self): + """ + Test for silent failure when target variable isn't found + """ + output = render('regroup02', {}) + self.assertEqual(output, '') + + @setup({'regroup03': '' + '{% regroup data by at|date:"m" as grouped %}' + '{% for group in grouped %}' + '{{ group.grouper }}:' + '{% for item in group.list %}' + '{{ item.at|date:"d" }}' + '{% endfor %},' + '{% endfor %}'}) + def test_regroup03(self): + """ + Regression tests for #17675 + The date template filter has expects_localtime = True + """ + output = render('regroup03', { + 'data': [{'at': date(2012, 2, 14)}, + {'at': date(2012, 2, 28)}, + {'at': date(2012, 7, 4)}], + }) + self.assertEqual(output, '02:1428,07:04,') + + @setup({'regroup04': '' + '{% regroup data by bar|join:"" as grouped %}' + '{% for group in grouped %}' + '{{ group.grouper }}:' + '{% for item in group.list %}' + '{{ item.foo|first }}' + '{% endfor %},' + '{% endfor %}'}) + def test_regroup04(self): + """ + The join template filter has needs_autoescape = True + """ + output = render('regroup04', { + 'data': [{'foo': 'x', 'bar': ['ab', 'c']}, + {'foo': 'y', 'bar': ['a', 'bc']}, + {'foo': 'z', 'bar': ['a', 'd']}], + }) + self.assertEqual(output, 'abc:xy,ad:z,') + + # Test syntax errors + @setup({'regroup05': '{% regroup data by bar as %}'}) + def test_regroup05(self): + with self.assertRaises(TemplateSyntaxError): + get_template('regroup05') + + @setup({'regroup06': '{% regroup data by bar thisaintright grouped %}'}) + def test_regroup06(self): + with self.assertRaises(TemplateSyntaxError): + get_template('regroup06') + + @setup({'regroup07': '{% regroup data thisaintright bar as grouped %}'}) + def test_regroup07(self): + with self.assertRaises(TemplateSyntaxError): + get_template('regroup07') + + @setup({'regroup08': '{% regroup data by bar as grouped toomanyargs %}'}) + def test_regroup08(self): + with self.assertRaises(TemplateSyntaxError): + get_template('regroup08') |
