summaryrefslogtreecommitdiff
path: root/tests/template_tests/syntax_tests/test_static.py
blob: 63265f57f33fc93bc3e3b705ca1ea12e37cbfc2a (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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
from urllib.parse import urljoin

from django.conf import settings
from django.template import TemplateSyntaxError
from django.templatetags.static import StaticNode
from django.test import SimpleTestCase, override_settings

from ..utils import setup


@override_settings(INSTALLED_APPS=[], MEDIA_URL="media/", STATIC_URL="static/")
class StaticTagTests(SimpleTestCase):
    libraries = {"static": "django.templatetags.static"}

    @setup({"static-prefixtag01": "{% load static %}{% get_static_prefix %}"})
    def test_static_prefixtag01(self):
        output = self.engine.render_to_string("static-prefixtag01")
        self.assertEqual(output, settings.STATIC_URL)

    @setup(
        {
            "static-prefixtag02": "{% load static %}"
            "{% get_static_prefix as static_prefix %}{{ static_prefix }}"
        }
    )
    def test_static_prefixtag02(self):
        output = self.engine.render_to_string("static-prefixtag02")
        self.assertEqual(output, settings.STATIC_URL)

    @setup({"static-prefixtag03": "{% load static %}{% get_media_prefix %}"})
    def test_static_prefixtag03(self):
        output = self.engine.render_to_string("static-prefixtag03")
        self.assertEqual(output, settings.MEDIA_URL)

    @setup(
        {
            "static-prefixtag04": "{% load static %}"
            "{% get_media_prefix as media_prefix %}{{ media_prefix }}"
        }
    )
    def test_static_prefixtag04(self):
        output = self.engine.render_to_string("static-prefixtag04")
        self.assertEqual(output, settings.MEDIA_URL)

    @setup(
        {
            "t": (
                "{% load static %}{% get_media_prefix ad media_prefix %}"
                "{{ media_prefix }}"
            )
        }
    )
    def test_static_prefixtag_without_as(self):
        msg = "First argument in 'get_media_prefix' must be 'as'"
        with self.assertRaisesMessage(TemplateSyntaxError, msg):
            self.engine.render_to_string("t")

    @setup({"static-statictag01": '{% load static %}{% static "admin/base.css" %}'})
    def test_static_statictag01(self):
        output = self.engine.render_to_string("static-statictag01")
        self.assertEqual(output, urljoin(settings.STATIC_URL, "admin/base.css"))

    @setup({"static-statictag02": "{% load static %}{% static base_css %}"})
    def test_static_statictag02(self):
        output = self.engine.render_to_string(
            "static-statictag02", {"base_css": "admin/base.css"}
        )
        self.assertEqual(output, urljoin(settings.STATIC_URL, "admin/base.css"))

    @setup(
        {
            "static-statictag03": (
                '{% load static %}{% static "admin/base.css" as foo %}{{ foo }}'
            )
        }
    )
    def test_static_statictag03(self):
        output = self.engine.render_to_string("static-statictag03")
        self.assertEqual(output, urljoin(settings.STATIC_URL, "admin/base.css"))

    @setup(
        {"static-statictag04": "{% load static %}{% static base_css as foo %}{{ foo }}"}
    )
    def test_static_statictag04(self):
        output = self.engine.render_to_string(
            "static-statictag04", {"base_css": "admin/base.css"}
        )
        self.assertEqual(output, urljoin(settings.STATIC_URL, "admin/base.css"))

    @setup(
        {
            "static-statictag05": (
                '{% load static %}{% static "special?chars&quoted.html" %}'
            )
        }
    )
    def test_static_quotes_urls(self):
        output = self.engine.render_to_string("static-statictag05")
        self.assertEqual(
            output,
            urljoin(settings.STATIC_URL, "/static/special%3Fchars%26quoted.html"),
        )

    @setup({"t": "{% load static %}{% static %}"})
    def test_static_statictag_without_path(self):
        msg = "'static' takes at least one argument (path to file)"
        with self.assertRaisesMessage(TemplateSyntaxError, msg):
            self.engine.render_to_string("t")


class StaticNodeTests(SimpleTestCase):
    def test_repr(self):
        static_node = StaticNode(varname="named-var", path="named-path")
        self.assertEqual(
            repr(static_node),
            "StaticNode(varname='named-var', path='named-path')",
        )
        static_node = StaticNode(path="named-path")
        self.assertEqual(
            repr(static_node),
            "StaticNode(varname=None, path='named-path')",
        )