File: tests.py

package info (click to toggle)
python-django-adminplus 0.6-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 164 kB
  • sloc: python: 209; sh: 43; makefile: 4
file content (137 lines) | stat: -rw-r--r-- 4,532 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
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
from django.template.loader import render_to_string
from django.test import TestCase, RequestFactory
from django.views.generic import View

from adminplus.sites import AdminSitePlus


class AdminPlusTests(TestCase):
    def test_decorator(self):
        """register_view works as a decorator."""
        site = AdminSitePlus()

        @site.register_view(r'foo/bar')
        def foo_bar(request):
            return 'foo-bar'

        @site.register_view(r'foobar')
        class FooBar(View):
            def get(self, request):
                return 'foo-bar'

        urls = site.get_urls()
        assert any(u.resolve('foo/bar') for u in urls)
        assert any(u.resolve('foobar') for u in urls)

    def test_function(self):
        """register_view works as a function."""
        site = AdminSitePlus()

        def foo(request):
            return 'foo'
        site.register_view('foo', view=foo)

        class Foo(View):
            def get(self, request):
                return 'foo'
        site.register_view('bar', view=Foo)

        urls = site.get_urls()
        assert any(u.resolve('foo') for u in urls)
        assert any(u.resolve('bar') for u in urls)

    def test_path(self):
        """Setting the path works correctly."""
        site = AdminSitePlus()

        def foo(request):
            return 'foo'
        site.register_view('foo', view=foo)
        site.register_view('bar/baz', view=foo)
        site.register_view('baz-qux', view=foo)

        urls = site.get_urls()

        # the default admin contains a catchall view, so each will match 2
        foo_urls = [u for u in urls if u.resolve('foo')]
        self.assertEqual(2, len(foo_urls))
        bar_urls = [u for u in urls if u.resolve('bar/baz')]
        self.assertEqual(2, len(bar_urls))
        qux_urls = [u for u in urls if u.resolve('baz-qux')]
        self.assertEqual(2, len(qux_urls))

    def test_urlname(self):
        """Set URL pattern names correctly."""
        site = AdminSitePlus()

        @site.register_view('foo', urlname='foo')
        def foo(request):
            return 'foo'

        @site.register_view('bar')
        def bar(request):
            return 'bar'

        urls = site.get_urls()
        foo_urls = [u for u in urls if u.resolve('foo')]

        # the default admin contains a catchall view, so this will capture two
        self.assertEqual(2, len(foo_urls))
        self.assertEqual('foo', foo_urls[0].name)

        bar_urls = [u for u in urls if u.resolve('bar')]
        self.assertEqual(2, len(bar_urls))
        assert bar_urls[0].name is None

    def test_base_template(self):
        """Make sure extending the base template works everywhere."""
        result = render_to_string('adminplus/test/index.html')
        assert 'Ohai' in result

    def test_visibility(self):
        """Make sure visibility works."""
        site = AdminSitePlus()
        req_factory = RequestFactory()

        def always_visible(request):
            return 'i am here'
        site.register_view('always-visible', view=always_visible, visible=True)

        def always_hidden(request):
            return 'i am here, but not shown'
        site.register_view('always-hidden', view=always_visible, visible=False)

        cond = lambda req: req.user.pk == 1  # noqa: E731
        b = lambda s: s.encode('ascii') if hasattr(s, 'encode') else s  # noqa: #731

        @site.register_view(r'conditional-view', visible=cond)
        class ConditionallyVisible(View):
            def get(self, request):
                return 'hi there'

        urls = site.get_urls()
        assert any(u.resolve('always-visible') for u in urls)
        assert any(u.resolve('always-hidden') for u in urls)
        assert any(u.resolve('conditional-view') for u in urls)

        class MockUser(object):
            is_active = True
            is_staff = True

            def __init__(self, pk):
                self.pk = pk
                self.id = pk

        req_show = req_factory.get('/admin/')
        req_show.user = MockUser(1)
        result = site.index(req_show).render().content
        assert b('always-visible') in result
        assert b('always-hidden') not in result
        assert b('conditional-view') in result

        req_hide = req_factory.get('/admin/')
        req_hide.user = MockUser(2)
        result = site.index(req_hide).render().content
        assert b('always-visible') in result
        assert b('always-hidden') not in result
        assert b('conditional-view') not in result