diff options
| author | Casey Duncan <casey.duncan@gmail.com> | 2015-04-16 12:14:25 -0400 |
|---|---|---|
| committer | Casey Duncan <casey.duncan@gmail.com> | 2015-04-16 12:14:25 -0400 |
| commit | 07d4a441adc9074439ec6071542d5d3d61643798 (patch) | |
| tree | 0764110bb829fb3f3421595cbb6ec806b0381663 | |
| parent | 96c87b36a39aa492d4ecaab0805d997270bec33b (diff) | |
| download | pyramid-07d4a441adc9074439ec6071542d5d3d61643798.tar.gz pyramid-07d4a441adc9074439ec6071542d5d3d61643798.tar.bz2 pyramid-07d4a441adc9074439ec6071542d5d3d61643798.zip | |
Tests for adding view derivations
| -rw-r--r-- | pyramid/tests/test_config/test_derivations.py | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/pyramid/tests/test_config/test_derivations.py b/pyramid/tests/test_config/test_derivations.py index 97fc4c58a..5bbbdd04f 100644 --- a/pyramid/tests/test_config/test_derivations.py +++ b/pyramid/tests/test_config/test_derivations.py @@ -1084,6 +1084,119 @@ class TestDeriveView(unittest.TestCase): self.assertRaises(ConfigurationError, self.config._derive_view, view, http_cache=(None,)) + +class TestAddDerivation(unittest.TestCase): + + def setUp(self): + self.config = testing.setUp() + + def tearDown(self): + self.config = None + + def test_add_single_derivation(self): + response = DummyResponse() + response.deriv = False + view = lambda *arg: response + + def deriv(view, default, **kw): + self.assertFalse(response.deriv) + self.assertEqual(default, None) + response.deriv = True + return view + + result = self.config._derive_view(view) + self.assertFalse(response.deriv) + self.config.add_view_derivation('test_deriv', deriv, default=None) + + result = self.config._derive_view(view) + self.assertTrue(response.deriv) + + def test_derivation_default(self): + response = DummyResponse() + response.deriv_default = None + test_default = object() + view = lambda *arg: response + + def deriv(view, default, **kw): + response.deriv_default = default + return view + + self.config.add_view_derivation('test_default_deriv', deriv, default=test_default) + result = self.config._derive_view(view) + self.assertEqual(response.deriv_default, test_default) + + def test_override_derivation(self): + flags = {} + + class AView: + def __init__(self): + self.response = DummyResponse() + def __call__(self): + return self.response + + def deriv1(view, default, **kw): + flags['deriv1'] = True + return view + + def deriv2(view, default, **kw): + flags['deriv2'] = True + return view + + view1 = AView() + self.config.add_view_derivation('test_deriv', deriv1, default=None) + result = self.config._derive_view(view1) + self.assertTrue(flags.get('deriv1')) + self.assertFalse(flags.get('deriv2')) + + flags.clear() + view2 = AView() + self.config.add_view_derivation('test_deriv', deriv2, default=None) + result = self.config._derive_view(view2) + self.assertFalse(flags.get('deriv1')) + self.assertTrue(flags.get('deriv2')) + + def test_override_derivation_default(self): + response = DummyResponse() + response.deriv_default = None + test_default1 = 'first default' + test_default2 = 'second default' + view = lambda *arg: response + + def deriv(view, default, **kw): + response.deriv_default = default + return view + + self.config.add_view_derivation('test_default_deriv', deriv, default=test_default1) + result = self.config._derive_view(view) + self.assertEqual(response.deriv_default, test_default1) + self.config.add_view_derivation('test_default_deriv', deriv, default=test_default2) + result = self.config._derive_view(view) + self.assertEqual(response.deriv_default, test_default2) + + def test_add_multi_derivations_ordered(self): + response = DummyResponse() + view = lambda *arg: response + response.deriv = [] + + def deriv1(view, default, **kw): + response.deriv.append('deriv1') + return view + + def deriv2(view, default, **kw): + response.deriv.append('deriv2') + return view + + def deriv3(view, default, **kw): + response.deriv.append('deriv3') + return view + + self.config.add_view_derivation('deriv1', deriv1, default=None) + self.config.add_view_derivation('deriv2', deriv2, default=None, weighs_less_than='deriv1') + self.config.add_view_derivation('deriv3', deriv3, default=None, weighs_more_than='deriv2') + result = self.config._derive_view(view) + self.assertEqual(response.deriv, ['deriv2', 'deriv3', 'deriv1']) + + from zope.interface import implementer from pyramid.interfaces import ( IResponse, |
