Arthur de Jong

Open Source / Free Software developer

summaryrefslogtreecommitdiffstats
path: root/tests/template_tests/syntax_tests/test_regroup.py
blob: d747c016f87677a2635da2a65f1bd6ad6f8d17d2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
from datetime import date

from django.template import TemplateSyntaxError
from django.test import SimpleTestCase

from ..utils import setup


class RegroupTagTests(SimpleTestCase):

    @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 = self.engine.render_to_string('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 = self.engine.render_to_string('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 = self.engine.render_to_string('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 = self.engine.render_to_string('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):
            self.engine.get_template('regroup05')

    @setup({'regroup06': '{% regroup data by bar thisaintright grouped %}'})
    def test_regroup06(self):
        with self.assertRaises(TemplateSyntaxError):
            self.engine.get_template('regroup06')

    @setup({'regroup07': '{% regroup data thisaintright bar as grouped %}'})
    def test_regroup07(self):
        with self.assertRaises(TemplateSyntaxError):
            self.engine.get_template('regroup07')

    @setup({'regroup08': '{% regroup data by bar as grouped toomanyargs %}'})
    def test_regroup08(self):
        with self.assertRaises(TemplateSyntaxError):
            self.engine.get_template('regroup08')