File: test_view_dispatcher.py

package info (click to toggle)
python-wikkid 0.5-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 728 kB
  • sloc: python: 3,051; makefile: 12
file content (111 lines) | stat: -rw-r--r-- 3,395 bytes parent folder | download | duplicates (2)
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
#
# Copyright (C) 2010 Wikkid Developers.
#
# This software is licensed under the GNU Affero General Public License
# version 3 (see the file LICENSE).

"""Tests for the view dispatcher."""

from zope.interface import Interface, implementer

from wikkid.dispatcher import get_view, register_view, unregister_view
from wikkid.tests import TestCase
from wikkid.view.base import BaseView


class TestGetView(TestCase):
    """Tests for get_view."""

    def test_no_interfaces(self):
        """If the object supports no interfaces, there is no view."""
        class NoInterfaces(object):
            pass
        obj = NoInterfaces()
        self.assertIs(None, get_view(obj, None, None))

    def test_interface_not_registered(self):
        """If the object supports an interface, but that interface is not
        registered, we get no view."""
        class IHasInterface(Interface):
            pass

        @implementer(IHasInterface)
        class HasInterface(object):
            pass
        obj = HasInterface()
        self.assertIs(None, get_view(obj, None, None))

    def test_interface_view_registered(self):
        """If the object supports an interface, and the view is registered,
        make sure that the view is returned when asked for."""
        class IHasInterface(Interface):
            pass

        @implementer(IHasInterface)
        class HasInterface(object):
            pass

        class AView(object):
            for_interface = IHasInterface
            name = 'name'

            def __init__(self, *args):
                pass

            def initialize(self):
                self.initialized = True
        register_view(AView)
        self.addCleanup(unregister_view, AView)
        obj = HasInterface()
        view = get_view(obj, 'name', None)
        self.assertIsInstance(view, AView)
        self.assertTrue(view.initialized)

    def test_interface_view_registered_default(self):
        """If the object supports an interface, and the view is registered as
        the default view, when a view is requested where no name is specified,
        the default view is returned."""
        class IHasInterface(Interface):
            pass

        @implementer(IHasInterface)
        class HasInterface(object):
            pass

        class AView(object):
            for_interface = IHasInterface
            name = 'name'
            is_default = True

            def __init__(self, *args):
                pass

            def initialize(self):
                self.initialized = True
        register_view(AView)
        self.addCleanup(unregister_view, AView)
        obj = HasInterface()
        view = get_view(obj, None, None)
        self.assertIsInstance(view, AView)
        self.assertTrue(view.initialized)


class TestViewRegistration(TestCase):
    """Test that views that inherit from BaseView are registered."""

    def test_registration(self):
        """Create a view class, and make sure it is registered."""
        class IHasInterface(Interface):
            pass

        @implementer(IHasInterface)
        class HasInterface(object):
            pass

        class AView(BaseView):
            for_interface = IHasInterface
            name = 'name'
        obj = HasInterface()
        view = get_view(obj, 'name', None)
        self.assertIsInstance(view, AView)
        self.addCleanup(unregister_view, AView)