diff options
author | Erik Olof Gunnar Andersson <eandersson@blizzard.com> | 2022-07-18 21:15:25 -0700 |
---|---|---|
committer | Erik Olof Gunnar Andersson <eandersson@blizzard.com> | 2022-08-06 03:28:23 +0000 |
commit | 8beccabe4eb78f7da60748cec84df66946d423e7 (patch) | |
tree | 55f57bae3ff09599653085f15327c42f3a5a7993 | |
parent | ef187ddec8599c2833909049f77e53d90cf4eea4 (diff) | |
download | designate-8beccabe4eb78f7da60748cec84df66946d423e7.tar.gz |
Added additional test coverage for adapters
- Removed uncessary log line in base adapter.
Change-Id: I6e1a74fa3ecca0f82735ba36ac4336ab6cdeb56e
-rw-r--r-- | designate/objects/adapters/base.py | 4 | ||||
-rw-r--r-- | designate/tests/unit/objects/test_adapters.py | 99 |
2 files changed, 79 insertions, 24 deletions
diff --git a/designate/objects/adapters/base.py b/designate/objects/adapters/base.py index 9ba825fb..b2f65c78 100644 --- a/designate/objects/adapters/base.py +++ b/designate/objects/adapters/base.py @@ -169,8 +169,6 @@ class DesignateAdapter(object, metaclass=DesignateObjectAdapterMetaclass): 'Creating %s object with values %r', output_object.obj_name(), values ) - LOG.debug(output_object) - try: adapter = cls.get_object_adapter(output_object, obj_format) if isinstance(output_object, objects.ListObjectMixin): @@ -285,7 +283,7 @@ class DesignateAdapter(object, metaclass=DesignateObjectAdapterMetaclass): if error_keys: raise exceptions.InvalidObject( - 'Provided object does not match schema. Keys {0} are not ' + 'Provided object does not match schema. Keys {0} are not ' 'valid for {1}'.format( error_keys, cls.MODIFICATIONS['options']['resource_name'] ) diff --git a/designate/tests/unit/objects/test_adapters.py b/designate/tests/unit/objects/test_adapters.py index 8a094864..e6e96747 100644 --- a/designate/tests/unit/objects/test_adapters.py +++ b/designate/tests/unit/objects/test_adapters.py @@ -20,68 +20,125 @@ from oslo_log import log as logging from oslo_utils import timeutils import oslotest.base +from designate import exceptions from designate import objects from designate.objects import adapters from designate.objects import base +from designate.objects import fields LOG = logging.getLogger(__name__) -class DesignateTestAdapter(adapters.DesignateAdapter): - ADAPTER_OBJECT = objects.DesignateObject - ADAPTER_FORMAT = 'TEST_API' - - MODIFICATIONS = { - 'fields': {}, - 'options': {} +@base.DesignateRegistry.register +class DesignateTestObject(base.DictObjectMixin, base.PersistentObjectMixin, + base.DesignateObject): + def __init__(self, *args, **kwargs): + super(DesignateTestObject, self).__init__(*args, **kwargs) + + fields = { + 'name': fields.StringFields(maxLength=255), + 'description': fields.StringFields(nullable=True, maxLength=255) } + STRING_KEYS = [ + 'id', 'name' + ] + @base.DesignateRegistry.register -class DesignateTestPersistentObject(objects.DesignateObject, - objects.base.PersistentObjectMixin): +class DesignateTestPersistentObject(objects.base.PersistentObjectMixin, + objects.DesignateObject): pass +class DesignateTestAdapter(adapters.DesignateAdapter): + ADAPTER_OBJECT = DesignateTestObject + ADAPTER_FORMAT = 'TEST_API' + + MODIFICATIONS = { + 'fields': { + 'id': {}, + 'name': { + 'read_only': False + }, + 'description': { + 'read_only': False + }, + 'created_at': {}, + 'updated_at': {}, + }, + 'options': { + 'links': True, + 'resource_name': 'test_obj', + 'collection_name': 'test_obj', + } + } + + class DesignateDateTimeAdaptor(adapters.DesignateAdapter): ADAPTER_OBJECT = DesignateTestPersistentObject ADAPTER_FORMAT = 'TEST_API' MODIFICATIONS = { 'fields': { - "id": {}, - "created_at": {}, - "updated_at": {}, + 'id': {}, + 'created_at': {}, + 'updated_at': {}, }, 'options': {} } class DesignateAdapterTest(oslotest.base.BaseTestCase): + def test_parse(self): + test_obj = adapters.DesignateAdapter.parse( + 'TEST_API', {'name': 'example.test.'}, DesignateTestObject() + ) + + self.assertIsInstance(test_obj, DesignateTestObject) + self.assertEqual('example.test.', test_obj.name) + + def test_parse_schema_does_not_match(self): + self.assertRaisesRegex( + exceptions.InvalidObject, + 'Provided object does not match schema. ' + 'Keys \\[\'address\'\\] are not valid for test_obj', + adapters.DesignateAdapter.parse, + 'TEST_API', {'address': '192.168.0.1'}, DesignateTestObject(), + ) + def test_get_object_adapter(self): adapter = adapters.DesignateAdapter.get_object_adapter( - objects.DesignateObject(), 'TEST_API' + DesignateTestObject(), 'TEST_API' ) + self.assertIsInstance(adapter(), DesignateTestAdapter) def test_object_render(self): - test_obj = adapters.DesignateAdapter.render('TEST_API', - objects.DesignateObject()) - self.assertEqual(dict(), test_obj) + test_obj = adapters.DesignateAdapter.render( + 'TEST_API', DesignateTestObject() + ) + + self.assertEqual( + sorted([ + 'created_at', 'description', 'id', 'name', 'updated_at', + ]), + sorted(test_obj) + ) def test_datetime_format(self): now = timeutils.utcnow() test_obj = DesignateTestPersistentObject() test_obj.created_at = now - test_dict = adapters.DesignateAdapter.render('TEST_API', test_obj) - datetime.datetime.strptime( - test_dict['created_at'], '%Y-%m-%dT%H:%M:%S.%f' + self.assertEqual( + datetime.datetime.strptime( + test_dict['created_at'], '%Y-%m-%dT%H:%M:%S.%f' + ), + test_obj.created_at ) - self.assertEqual(now, test_obj.created_at) - class RecordSetAPIv2AdapterTest(oslotest.base.BaseTestCase): def test_get_path(self): |