summaryrefslogtreecommitdiff
path: root/repoze/bfg/tests/test_zcml.py
blob: bcb065d9e754b9e97ce19427c6f00dce5a10ae40 (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
import unittest

from zope.component.testing import PlacelessSetup

class TestPageDirective(unittest.TestCase, PlacelessSetup):
    def setUp(self):
        PlacelessSetup.setUp(self)

    def tearDown(self):
        PlacelessSetup.tearDown(self)

    def _getFUT(self):
        from repoze.bfg.zcml import page
        return page

    def test_no_class_or_template(self):
        f = self._getFUT()
        from zope.configuration.exceptions import ConfigurationError
        context = DummyContext()
        self.assertRaises(ConfigurationError, f, context, 'repoze.view', None)

    def test_no_such_file(self):
        f = self._getFUT()
        from zope.configuration.exceptions import ConfigurationError
        context = DummyContext()
        self.assertRaises(ConfigurationError, f, context, 'repoze.view', None,
                          template='notthere.pt')

    def test_only_template(self):
        f = self._getFUT()
        context = DummyContext()
        f(context, 'repoze.view', None, template='minimal.pt')
        actions = context.actions
        from repoze.bfg.interfaces import IRequest
        from repoze.bfg.interfaces import IViewFactory
        from zope.component.zcml import handler
        expected0 = ('view', None, '', IRequest, IViewFactory)
        expected1 = handler
        self.assertEqual(actions[0]['discriminator'], expected0)
        self.assertEqual(actions[0]['callable'], expected1)
        self.assertEqual(actions[0]['args'][0], 'registerAdapter')
        import types
        self.failUnless(isinstance(actions[0]['args'][1], types.FunctionType))
        self.assertEqual(actions[0]['args'][2], (None, IRequest))
        self.assertEqual(actions[0]['args'][3], IViewFactory)
        self.assertEqual(actions[0]['args'][4], '')
        self.assertEqual(actions[0]['args'][5], None)

    def test_template_and_class(self):
        f = self._getFUT()
        context = DummyContext()
        f(context, 'repoze.view', None, template='minimal.pt',
          class_=DummyViewClass)
        actions = context.actions
        from repoze.bfg.interfaces import IRequest
        from repoze.bfg.interfaces import IViewFactory
        from zope.component.zcml import handler
        expected0 = ('view', None, '', IRequest, IViewFactory)
        expected1 = handler
        self.assertEqual(actions[0]['discriminator'], expected0)
        self.assertEqual(actions[0]['callable'], expected1)
        self.assertEqual(actions[0]['args'][0], 'registerAdapter')
        import types
        self.failUnless(isinstance(actions[0]['args'][1], types.FunctionType))
        self.assertEqual(actions[0]['args'][2], (None, IRequest))
        self.assertEqual(actions[0]['args'][3], IViewFactory)
        self.assertEqual(actions[0]['args'][4], '')
        self.assertEqual(actions[0]['args'][5], None)

class DummyViewClass:
    pass

class DummyContext:
    def __init__(self):
        self.actions = []
        self.info = None

    def path(self, name):
        import os
        here = os.path.dirname(__file__)
        fixtures = os.path.join(here, 'fixtures')
        return os.path.join(fixtures, name)

    def action(self, discriminator, callable, args):
        self.actions.append(
            {'discriminator':discriminator,
             'callable':callable,
             'args':args}
            )