Merge "Allow users to specify a serializer easily"
This commit is contained in:
@@ -28,16 +28,26 @@ class BetamaxFixture(fixtures.Fixture):
|
||||
|
||||
def __init__(self, cassette_name, cassette_library_dir=None,
|
||||
serializer=None, record=False,
|
||||
pre_record_hook=hooks.pre_record_hook):
|
||||
pre_record_hook=hooks.pre_record_hook,
|
||||
serializer_name=None):
|
||||
self.cassette_library_dir = cassette_library_dir
|
||||
self.record = record
|
||||
self.cassette_name = cassette_name
|
||||
if not serializer:
|
||||
if not (serializer or serializer_name):
|
||||
serializer = yaml_serializer.YamlJsonSerializer
|
||||
serializer_name = serializer.name
|
||||
if serializer:
|
||||
betamax.Betamax.register_serializer(serializer)
|
||||
self.serializer = serializer
|
||||
betamax.Betamax.register_serializer(serializer)
|
||||
self._serializer_name = serializer_name
|
||||
self.pre_record_hook = pre_record_hook
|
||||
|
||||
@property
|
||||
def serializer_name(self):
|
||||
if self.serializer:
|
||||
return self.serializer.name
|
||||
return self._serializer_name
|
||||
|
||||
def setUp(self):
|
||||
super(BetamaxFixture, self).setUp()
|
||||
self.mockpatch = mock.patch.object(
|
||||
@@ -70,8 +80,7 @@ def _construct_session_with_betamax(fixture, session_obj=None):
|
||||
if fixture.record in ['once', 'all', 'new_episodes']:
|
||||
record = fixture.record
|
||||
|
||||
if fixture.serializer:
|
||||
serializer = fixture.serializer.name
|
||||
serializer = fixture.serializer_name
|
||||
|
||||
fixture.recorder.use_cassette(fixture.cassette_name,
|
||||
serialize_with=serializer,
|
||||
|
||||
@@ -12,9 +12,12 @@
|
||||
|
||||
import testtools
|
||||
|
||||
import betamax
|
||||
from betamax import exceptions
|
||||
import mock
|
||||
|
||||
from keystoneauth1.fixture import keystoneauth_betamax
|
||||
from keystoneauth1.fixture import serializer
|
||||
from keystoneauth1.fixture import v2 as v2Fixtures
|
||||
from keystoneauth1.identity import v2
|
||||
from keystoneauth1 import session
|
||||
@@ -58,3 +61,45 @@ class TestBetamaxFixture(testtools.TestCase):
|
||||
tenant_name=self.TEST_TENANT_NAME)
|
||||
s = session.Session()
|
||||
self.assertRaises(exceptions.BetamaxError, s.get_token, auth=plugin)
|
||||
|
||||
|
||||
class TestBetamaxFixtureSerializerBehaviour(testtools.TestCase):
|
||||
"""Test the fixture's logic, not its monkey-patching.
|
||||
|
||||
The setUp method of our BetamaxFixture monkey-patches the function to
|
||||
construct a session. We don't need to test that particular bit of logic
|
||||
here so we do not need to call useFixture in our setUp method.
|
||||
"""
|
||||
|
||||
@mock.patch.object(betamax.Betamax, 'register_serializer')
|
||||
def test_can_pass_custom_serializer(self, register_serializer):
|
||||
serializer = mock.Mock()
|
||||
serializer.name = 'mocked-serializer'
|
||||
fixture = keystoneauth_betamax.BetamaxFixture(
|
||||
cassette_name='fake',
|
||||
cassette_library_dir='keystoneauth1/tests/unit/data',
|
||||
serializer=serializer,
|
||||
)
|
||||
|
||||
register_serializer.assert_called_once_with(serializer)
|
||||
self.assertIs(serializer, fixture.serializer)
|
||||
self.assertEqual('mocked-serializer', fixture.serializer_name)
|
||||
|
||||
def test_can_pass_serializer_name(self):
|
||||
fixture = keystoneauth_betamax.BetamaxFixture(
|
||||
cassette_name='fake',
|
||||
cassette_library_dir='keystoneauth1/tests/unit/data',
|
||||
serializer_name='json',
|
||||
)
|
||||
|
||||
self.assertIsNone(fixture.serializer)
|
||||
self.assertEqual('json', fixture.serializer_name)
|
||||
|
||||
def test_no_serializer_options_provided(self):
|
||||
fixture = keystoneauth_betamax.BetamaxFixture(
|
||||
cassette_name='fake',
|
||||
cassette_library_dir='keystoneauth1/tests/unit/data',
|
||||
)
|
||||
|
||||
self.assertIs(serializer.YamlJsonSerializer, fixture.serializer)
|
||||
self.assertEqual('yamljson', fixture.serializer_name)
|
||||
|
||||
Reference in New Issue
Block a user