diff --git a/tests/unit/test_request.py b/tests/unit/test_request.py index adecee6..fdc2e89 100644 --- a/tests/unit/test_request.py +++ b/tests/unit/test_request.py @@ -4,3 +4,18 @@ from vcr.request import Request def test_str(): req = Request('GET', 'http://www.google.com:80/', '', {}) str(req) == '' + + +def test_headers(): + headers = {'X-Header1': ['h1'], 'X-Header2': 'h2'} + req = Request('GET', 'http://go.com:80/', '', headers) + assert req.headers == {'X-Header1': ['h1'], 'X-Header2': ['h2']} + + req.add_header('X-Header1', 'h11') + assert req.headers == {'X-Header1': ['h1', 'h11'], 'X-Header2': ['h2']} + + +def test_flat_headers_dict(): + headers = {'X-Header1': ['h1', 'h11'], 'X-Header2': ['h2']} + req = Request('GET', 'http://go.com:80/', '', headers) + assert req.flat_headers_dict() == {'X-Header1': 'h1', 'X-Header2': 'h2'} diff --git a/vcr/request.py b/vcr/request.py index 10b9fb5..6d48a56 100644 --- a/vcr/request.py +++ b/vcr/request.py @@ -7,10 +7,16 @@ class Request(object): self.method = method self.uri = uri self.body = body - self.headers = headers + self.headers = {} + for key in headers: + self.add_header(key, headers[key]) def add_header(self, key, value): - self.headers[key] = value + value = list(value) if isinstance(value, (tuple, list)) else [value] + self.headers.setdefault(key, []).extend(value) + + def flat_headers_dict(self): + return {key: self.headers[key][0] for key in self.headers} @property def scheme(self): @@ -54,7 +60,7 @@ class Request(object): 'method': self.method, 'uri': self.uri, 'body': self.body, - 'headers': dict(self.headers), + 'headers': self.headers, } @classmethod diff --git a/vcr/stubs/__init__.py b/vcr/stubs/__init__.py index 77391b2..fc14919 100644 --- a/vcr/stubs/__init__.py +++ b/vcr/stubs/__init__.py @@ -225,7 +225,7 @@ class VCRConnection: method=self._vcr_request.method, url=self._url(self._vcr_request.uri), body=self._vcr_request.body, - headers=dict(self._vcr_request.headers or {}) + headers=self._vcr_request.flat_headers_dict(), ) # get the response