File: utils.py

package info (click to toggle)
python-django-csp 3.8-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 300 kB
  • sloc: python: 935; makefile: 135; sh: 6
file content (53 lines) | stat: -rw-r--r-- 1,432 bytes parent folder | download
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
from django.http import HttpResponse
from django.template import Context, Template, engines
from django.test import RequestFactory

from csp.middleware import CSPMiddleware


def response(*args, headers=None, **kwargs):
    def get_response(req):
        response = HttpResponse(*args, **kwargs)
        if headers:
            for k, v in headers.items():
                response.headers[k] = v
        return response

    return get_response


JINJA_ENV = engines["jinja2"]
mw = CSPMiddleware(response())
rf = RequestFactory()


class ScriptTestBase:
    def assert_template_eq(self, tpl1, tpl2):
        aaa = tpl1.replace("\n", "").replace("  ", "")
        bbb = tpl2.replace("\n", "").replace("  ", "")
        assert aaa == bbb, f"{aaa} != {bbb}"

    def process_templates(self, tpl, expected):
        request = rf.get("/")
        mw.process_request(request)
        ctx = self.make_context(request)
        return (
            self.make_template(tpl).render(ctx).strip(),
            expected.format(request.csp_nonce),
        )


class ScriptTagTestBase(ScriptTestBase):
    def make_context(self, request):
        return Context({"request": request})

    def make_template(self, tpl):
        return Template(tpl)


class ScriptExtensionTestBase(ScriptTestBase):
    def make_context(self, request):
        return {"request": request}

    def make_template(self, tpl):
        return JINJA_ENV.from_string(tpl)