summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMichael Merickel <michael@merickel.org>2020-05-08 00:22:55 -0500
committerGitHub <noreply@github.com>2020-05-08 00:22:55 -0500
commit683bc742f7b08db563f3385796809c09babf004b (patch)
tree9f3ced848d13003209173369a6f0f4431473d8d2 /tests
parent1722cbb7bf40ce9d3793faf38f63e9f00d577613 (diff)
parentf5a8cd2840dc6b0fea4fd7642950b5c731445776 (diff)
downloadpyramid-683bc742f7b08db563f3385796809c09babf004b.tar.gz
pyramid-683bc742f7b08db563f3385796809c09babf004b.tar.bz2
pyramid-683bc742f7b08db563f3385796809c09babf004b.zip
Merge pull request #3576 from merwok/feature/multi-predicate-header
Allow multiple values for header predicate
Diffstat (limited to 'tests')
-rw-r--r--tests/test_config/test_predicates.py81
1 files changed, 81 insertions, 0 deletions
diff --git a/tests/test_config/test_predicates.py b/tests/test_config/test_predicates.py
index d1562947e..8017fc898 100644
--- a/tests/test_config/test_predicates.py
+++ b/tests/test_config/test_predicates.py
@@ -312,6 +312,20 @@ class TestPredicateList(unittest.TestCase):
self.assertEqual(predicates[10].text(), 'classmethod predicate')
self.assertTrue(predicates[11].text().startswith('custom predicate'))
+ def test_predicate_text_is_correct_when_multiple(self):
+ _, predicates, _ = self._callFUT(
+ request_method=('one', 'two'),
+ request_param=('par2=on', 'par1'),
+ header=('header2', 'header1:val.*'),
+ accept=('accept1', 'accept2'),
+ match_param=('foo=bar', 'baz=bim'),
+ )
+ self.assertEqual(predicates[0].text(), "request_method = one,two")
+ self.assertEqual(predicates[1].text(), 'request_param par1,par2=on')
+ self.assertEqual(predicates[2].text(), 'header header1=val.*, header2')
+ self.assertEqual(predicates[3].text(), 'accept = accept1, accept2')
+ self.assertEqual(predicates[4].text(), "match_param baz=bim,foo=bar")
+
def test_match_param_from_string(self):
_, predicates, _ = self._callFUT(match_param='foo=bar')
request = DummyRequest()
@@ -354,6 +368,72 @@ class TestPredicateList(unittest.TestCase):
hash2, _, __ = self._callFUT(request_method='GET')
self.assertEqual(hash1, hash2)
+ def test_header_simple(self):
+ _, predicates, _ = self._callFUT(header='foo')
+ request = DummyRequest()
+ request.headers = {'foo': 'bars', 'baz': 'foo'}
+ self.assertTrue(predicates[0](Dummy(), request))
+
+ def test_header_simple_fails(self):
+ _, predicates, _ = self._callFUT(header='content-length')
+ request = DummyRequest()
+ request.headers = {'foo': 'bars', 'baz': 'foo'}
+ self.assertFalse(predicates[0](Dummy(), request))
+
+ def test_header_with_value(self):
+ _, predicates, _ = self._callFUT(header='foo:bar')
+ request = DummyRequest()
+ request.headers = {'foo': 'bars', 'baz': 'foo'}
+ self.assertTrue(predicates[0](Dummy(), request))
+
+ def test_header_with_value_fails(self):
+ _, predicates, _ = self._callFUT(header='foo:bar')
+ request = DummyRequest()
+ request.headers = {'foo': 'nobar', 'baz': 'foo'}
+ self.assertFalse(predicates[0](Dummy(), request))
+
+ def test_header_with_value_fails_case(self):
+ _, predicates, _ = self._callFUT(header='foo:bar')
+ request = DummyRequest()
+ request.headers = {'foo': 'BAR'}
+ self.assertFalse(predicates[0](Dummy(), request))
+
+ def test_header_multiple(self):
+ _, predicates, _ = self._callFUT(header=('foo', 'content-length'))
+ request = DummyRequest()
+ request.headers = {'foo': 'bars', 'content-length': '42'}
+ self.assertTrue(predicates[0](Dummy(), request))
+
+ def test_header_multiple_fails(self):
+ _, predicates, _ = self._callFUT(header=('foo', 'content-encoding'))
+ request = DummyRequest()
+ request.headers = {'foo': 'bars', 'content-length': '42'}
+ self.assertFalse(predicates[0](Dummy(), request))
+
+ def test_header_multiple_with_values(self):
+ _, predicates, _ = self._callFUT(header=('foo:bar', 'spam:egg'))
+ request = DummyRequest()
+ request.headers = {'foo': 'bars', 'spam': 'eggs'}
+ self.assertTrue(predicates[0](Dummy(), request))
+
+ def test_header_multiple_with_values_fails(self):
+ _, predicates, _ = self._callFUT(header=('foo:bar', 'spam:egg$'))
+ request = DummyRequest()
+ request.headers = {'foo': 'bars', 'spam': 'eggs'}
+ self.assertFalse(predicates[0](Dummy(), request))
+
+ def test_header_multiple_mixed(self):
+ _, predicates, _ = self._callFUT(header=('foo:bar', 'spam'))
+ request = DummyRequest()
+ request.headers = {'foo': 'bars', 'spam': 'ham'}
+ self.assertTrue(predicates[0](Dummy(), request))
+
+ def test_header_multiple_mixed_fails(self):
+ _, predicates, _ = self._callFUT(header=('foo:bar', 'spam'))
+ request = DummyRequest()
+ request.headers = {'foo': 'nobar', 'spamme': 'ham'}
+ self.assertFalse(predicates[0](Dummy(), request))
+
def test_unknown_predicate(self):
from pyramid.exceptions import ConfigurationError
@@ -472,6 +552,7 @@ class DummyRequest:
environ = {}
self.environ = environ
self.params = {}
+ self.headers = {}
self.cookies = {}