/
test_layout.py
138 lines (119 loc) · 5.17 KB
/
test_layout.py
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
138
try: #pragma NO COVERAGE
# python < 2.7
import unittest2 as unittest
unittest # stfu pyflakes
except ImportError: #pragma NO COVERAGE
# python >= 2.7
import unittest
import mock
from pyramid import testing
class LayoutManagerTests(unittest.TestCase):
def setUp(self):
self.config = testing.setUp()
self.config.include('pyramid_layout')
def make_one(self, context, request):
from pyramid_layout.layout import LayoutManager as test_class
return test_class(context, request)
@mock.patch('pyramid_layout.layout.find_layout')
def test_use_layout(self, find_layout):
lm = self.make_one('context', 'request')
find_layout.return_value = 'Test Layout'
lm.use_layout('test')
self.assertEqual(lm.layout, 'Test Layout')
find_layout.assert_called_once_with('context', 'request', 'test')
@mock.patch('pyramid_layout.layout.find_layout')
def test_layout(self, find_layout):
lm = self.make_one('context', 'request')
find_layout.return_value = 'Test Layout'
self.assertEqual(lm.layout, 'Test Layout')
self.assertEqual(lm.layout, 'Test Layout')
find_layout.assert_called_once_with('context', 'request')
def test_render_panel(self):
from zope.interface import providedBy
from pyramid_layout.interfaces import IPanel
request = mock.Mock()
lookup = request.registry.adapters.lookup
panel = lookup.return_value
panel.return_value = 'Test Panel'
lm = self.make_one('context', request)
self.assertEqual(lm.render_panel('test'), 'Test Panel')
lookup.assert_called_once_with(
(providedBy('context'),), IPanel, name='test')
panel.assert_called_once_with('context', request)
def test_render_panel_with_args(self):
from zope.interface import providedBy
from pyramid_layout.interfaces import IPanel
request = mock.Mock()
lookup = request.registry.adapters.lookup
panel = lookup.return_value
panel.return_value = 'Test Panel'
lm = self.make_one('context', request)
self.assertEqual(lm.render_panel('test', 1, two=3), 'Test Panel')
lookup.assert_called_once_with(
(providedBy('context'),), IPanel, name='test')
panel.assert_called_once_with('context', request, 1, two=3)
def test_render_panel_no_panel(self):
from zope.interface import providedBy
from pyramid_layout.interfaces import IPanel
request = mock.Mock()
lookup = request.registry.adapters.lookup
lookup.return_value = None
lm = self.make_one('context', request)
self.assertEqual(lm.render_panel('test'), None)
lookup.assert_called_once_with(
(providedBy('context'),), IPanel, name='test')
@mock.patch('pyramid_layout.layout.find_layout')
def test_layout_predicate(self, find_layout):
from pyramid_layout.config import LayoutPredicate
lm = self.make_one('context', 'request')
find_layout.return_value = 'Test Layout'
pred = LayoutPredicate('test', None)
class Request(object):
pass
request = Request()
request.layout_manager = lm
result = pred(None, request)
self.assertTrue(result)
self.assertEqual(lm.layout, 'Test Layout')
self.assertEqual(pred.text(), 'layout = test')
find_layout.assert_called_once_with('context', 'request', 'test')
class Test_find_layout(unittest.TestCase):
def test_it(self):
from zope.interface import providedBy
from pyramid_layout.interfaces import ILayout
from pyramid_layout.layout import find_layout
request = mock.Mock()
lookup = request.registry.adapters.lookup
Layout = lookup.return_value
find_layout('context', request, 'test')
Layout.assert_called_once_with('context', request)
lookup.assert_called_once_with(
(providedBy('context'),), ILayout, name='test')
class TestStructure(unittest.TestCase):
def test_it(self):
from pyramid_layout.layout import Structure
html = '<h1>Hello</h1>'
s = Structure(html)
self.assertTrue(s.__html__(), html)
class Test_layout_config(unittest.TestCase):
@mock.patch('pyramid_layout.layout.venusian')
def test_it(self, venusian):
from pyramid_layout.layout import layout_config
decorator = layout_config('name', 'context', 'template', 'containment')
self.assertEqual(decorator('wrapped'), 'wrapped')
info = venusian.attach.return_value
args, kwargs = venusian.attach.call_args
self.assertEqual(kwargs, {'category': 'pyramid_layout'})
wrapped, callback = args
self.assertEqual(wrapped, 'wrapped')
context = mock.Mock()
context.config.with_package.return_value = context
callback(context, 'name', 'layout')
context.config.with_package.assert_called_once_with(info.module)
context.add_layout.assert_called_once_with(
layout='layout',
name='name',
context='context',
template='template',
containment='containment',
_info=info.codeinfo)