1
0
mirror of https://github.com/kevin1024/vcrpy.git synced 2025-12-08 16:53:23 +00:00

Handle unicode error in json serialize properly.

This commit is contained in:
Ivan Malison
2014-10-07 13:21:16 -07:00
parent a9a68ba44b
commit 99692a92d2
3 changed files with 23 additions and 6 deletions

View File

@@ -1,4 +1,4 @@
'''Basic tests about cassettes'''
'''Basic tests for cassettes'''
# coding=utf-8
# External imports

View File

@@ -1,21 +1,34 @@
import mock
import pytest
from vcr.serialize import deserialize
from vcr.serializers import yamlserializer, jsonserializer
def test_deserialize_old_yaml_cassette():
with open('tests/fixtures/migration/old_cassette.yaml', 'r') as f:
with pytest.raises(ValueError):
deserialize(f.read(), yamlserializer)
def test_deserialize_old_json_cassette():
with open('tests/fixtures/migration/old_cassette.json', 'r') as f:
with pytest.raises(ValueError):
deserialize(f.read(), jsonserializer)
def test_deserialize_new_yaml_cassette():
with open('tests/fixtures/migration/new_cassette.yaml', 'r') as f:
deserialize(f.read(), yamlserializer)
def test_deserialize_new_json_cassette():
with open('tests/fixtures/migration/new_cassette.json', 'r') as f:
deserialize(f.read(), jsonserializer)
@mock.patch.object(jsonserializer.json, 'dumps',
side_effect=UnicodeDecodeError('utf-8', b'unicode error in serialization',
0, 10, 'blew up'))
def test_serialize_constructs_UnicodeDecodeError(mock_dumps):
jsonserializer.serialize({})

View File

@@ -11,10 +11,14 @@ def deserialize(cassette_string):
def serialize(cassette_dict):
try:
return json.dumps(cassette_dict, indent=4)
except UnicodeDecodeError:
except UnicodeDecodeError as original:
raise UnicodeDecodeError(
"Error serializing cassette to JSON. ",
"Does this HTTP interaction contain binary data? ",
"If so, use a different serializer (like the yaml serializer) ",
"for this request"
original.encoding,
b"Error serializing cassette to JSON",
original.start,
original.end,
original.message +
("Does this HTTP interaction contain binary data? "
"If so, use a different serializer (like the yaml serializer) "
"for this request?")
)