summaryrefslogtreecommitdiff
path: root/tests/template_tests/syntax_tests/test_regroup.py
diff options
context:
space:
mode:
authorPreston Timmons <prestontimmons@gmail.com>2014-11-11 19:32:44 -0600
committerTim Graham <timograham@gmail.com>2014-12-02 19:18:35 -0500
commitb872134bfc14f6322bd1e4b0a08bf5bfd2c43a52 (patch)
treef82fc6be418adeb1e7ff36728f82008770066999 /tests/template_tests/syntax_tests/test_regroup.py
parent4a4ad27712b44cebada1bdaebd082cf82df74610 (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.py103
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')