Merge "Allow users to specify a serializer easily"

This commit is contained in:
Jenkins
2017-03-07 21:36:12 +00:00
committed by Gerrit Code Review
2 changed files with 59 additions and 5 deletions

View File

@@ -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,

View File

@@ -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)