File: test_regroup.py

package info (click to toggle)
python-django 3%3A3.2.19-1%2Bdeb12u2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-proposed-updates
  • size: 56,696 kB
  • sloc: python: 264,418; javascript: 18,362; xml: 193; makefile: 178; sh: 43
file content (121 lines) | stat: -rw-r--r-- 4,765 bytes parent folder | download | duplicates (4)
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
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')

    @setup({'regroup_unpack': '{% regroup data by bar as grouped %}'
                              '{% for grouper, group in grouped %}'
                              '{{ grouper }}:'
                              '{% for item in group %}'
                              '{{ item.foo }}'
                              '{% endfor %},'
                              '{% endfor %}'})
    def test_regroup_unpack(self):
        output = self.engine.render_to_string('regroup_unpack', {
            '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,')