mirror of
https://github.com/kevin1024/vcrpy.git
synced 2025-12-09 01:03:24 +00:00
Handle unicode error in json serialize properly.
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
'''Basic tests about cassettes'''
|
'''Basic tests for cassettes'''
|
||||||
# coding=utf-8
|
# coding=utf-8
|
||||||
|
|
||||||
# External imports
|
# External imports
|
||||||
|
|||||||
@@ -1,21 +1,34 @@
|
|||||||
|
import mock
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from vcr.serialize import deserialize
|
from vcr.serialize import deserialize
|
||||||
from vcr.serializers import yamlserializer, jsonserializer
|
from vcr.serializers import yamlserializer, jsonserializer
|
||||||
|
|
||||||
|
|
||||||
def test_deserialize_old_yaml_cassette():
|
def test_deserialize_old_yaml_cassette():
|
||||||
with open('tests/fixtures/migration/old_cassette.yaml', 'r') as f:
|
with open('tests/fixtures/migration/old_cassette.yaml', 'r') as f:
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
deserialize(f.read(), yamlserializer)
|
deserialize(f.read(), yamlserializer)
|
||||||
|
|
||||||
|
|
||||||
def test_deserialize_old_json_cassette():
|
def test_deserialize_old_json_cassette():
|
||||||
with open('tests/fixtures/migration/old_cassette.json', 'r') as f:
|
with open('tests/fixtures/migration/old_cassette.json', 'r') as f:
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
deserialize(f.read(), jsonserializer)
|
deserialize(f.read(), jsonserializer)
|
||||||
|
|
||||||
|
|
||||||
def test_deserialize_new_yaml_cassette():
|
def test_deserialize_new_yaml_cassette():
|
||||||
with open('tests/fixtures/migration/new_cassette.yaml', 'r') as f:
|
with open('tests/fixtures/migration/new_cassette.yaml', 'r') as f:
|
||||||
deserialize(f.read(), yamlserializer)
|
deserialize(f.read(), yamlserializer)
|
||||||
|
|
||||||
|
|
||||||
def test_deserialize_new_json_cassette():
|
def test_deserialize_new_json_cassette():
|
||||||
with open('tests/fixtures/migration/new_cassette.json', 'r') as f:
|
with open('tests/fixtures/migration/new_cassette.json', 'r') as f:
|
||||||
deserialize(f.read(), jsonserializer)
|
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({})
|
||||||
|
|||||||
@@ -11,10 +11,14 @@ def deserialize(cassette_string):
|
|||||||
def serialize(cassette_dict):
|
def serialize(cassette_dict):
|
||||||
try:
|
try:
|
||||||
return json.dumps(cassette_dict, indent=4)
|
return json.dumps(cassette_dict, indent=4)
|
||||||
except UnicodeDecodeError:
|
except UnicodeDecodeError as original:
|
||||||
raise UnicodeDecodeError(
|
raise UnicodeDecodeError(
|
||||||
"Error serializing cassette to JSON. ",
|
original.encoding,
|
||||||
"Does this HTTP interaction contain binary data? ",
|
b"Error serializing cassette to JSON",
|
||||||
"If so, use a different serializer (like the yaml serializer) ",
|
original.start,
|
||||||
"for this request"
|
original.end,
|
||||||
|
original.message +
|
||||||
|
("Does this HTTP interaction contain binary data? "
|
||||||
|
"If so, use a different serializer (like the yaml serializer) "
|
||||||
|
"for this request?")
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user