From 166facd0d0521807c03d6efa395b3ee28f6df6d5 Mon Sep 17 00:00:00 2001 From: Kevin McCarthy Date: Tue, 6 Aug 2013 18:34:56 -1000 Subject: [PATCH] check that cassette contains things before returning --- tests/unit/test_cassettes.py | 5 +++-- vcr/cassette.py | 7 +++---- vcr/stubs/__init__.py | 24 ++++++++++++------------ 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/tests/unit/test_cassettes.py b/tests/unit/test_cassettes.py index 18104b6..bd42fe2 100644 --- a/tests/unit/test_cassettes.py +++ b/tests/unit/test_cassettes.py @@ -1,4 +1,4 @@ -import mock +import pytest import yaml from vcr.cassette import Cassette @@ -56,4 +56,5 @@ def test_cassette_response(): def test_cassette_missing_response(): a = Cassette('test') - assert not a.response('foo') + with pytest.raises(KeyError): + a.response('foo') diff --git a/vcr/cassette.py b/vcr/cassette.py index 27c93e9..6eefbc3 100644 --- a/vcr/cassette.py +++ b/vcr/cassette.py @@ -38,7 +38,7 @@ class Cassette(object): } for req, res in zip(self._requests, self._responses)]) def deserialize(self, source): - '''Given a seritalized version, load the requests''' + '''Given a serialized version, load the requests''' self._requests, self._responses = ( [r['request'] for r in source], [r['response'] for r in source]) @@ -49,7 +49,7 @@ class Cassette(object): self.play_count += 1 def append(self, request, response): - '''Add a pair of request, response pairs to this cassette''' + '''Add a pair of request, response to this cassette''' self._requests.append(request) self._responses.append(response) @@ -70,8 +70,7 @@ class Cassette(object): try: return self._responses[self._requests.index(request)] except ValueError: - #todo: keyerror if not in cassette - return None + raise KeyError def __enter__(self): '''Patch the fetching libraries we know about''' diff --git a/vcr/stubs/__init__.py b/vcr/stubs/__init__.py index 3c93677..693f2e0 100644 --- a/vcr/stubs/__init__.py +++ b/vcr/stubs/__init__.py @@ -65,22 +65,22 @@ class VCRConnectionMixin: '''Retrieve a the response''' # Check to see if the cassette has a response for this request. If so, # then return it - response = self.cassette.response(self._request) - if response: + if self._request in self.cassette: + response = self.cassette.response(self._request) # Alert the cassette to the fact that we've served another # response for the provided requests self.cassette.mark_played() return VCRHTTPResponse(response) - - # Otherwise, we made an actual request, and should return the response - # we got from the actual connection - response = HTTPConnection.getresponse(self) - response = { - 'status': {'code': response.status, 'message': response.reason}, - 'headers': dict(response.getheaders()), - 'body': {'string': response.read()}, - } - self.cassette.append(self._request, response) + else: + # Otherwise, we made an actual request, and should return the response + # we got from the actual connection + response = HTTPConnection.getresponse(self) + response = { + 'status': {'code': response.status, 'message': response.reason}, + 'headers': dict(response.getheaders()), + 'body': {'string': response.read()}, + } + self.cassette.append(self._request, response) return VCRHTTPResponse(response)