69 lines
2.4 KiB
Python
69 lines
2.4 KiB
Python
"""
|
|
Test mixins for MetadataContainer functionality.
|
|
|
|
Provides reusable test cases for any class that uses the MetadataContainer mixin.
|
|
"""
|
|
|
|
|
|
class MetadataContainerTestMixin:
|
|
"""
|
|
Mixin providing standard tests for MetadataContainer behavior.
|
|
|
|
Classes using this mixin must implement:
|
|
- create_test_object() -> object with MetadataContainer mixin
|
|
"""
|
|
|
|
def create_test_object(self):
|
|
"""
|
|
Create an instance of the object to test.
|
|
Must be implemented by test class.
|
|
"""
|
|
raise NotImplementedError("Test class must implement create_test_object()")
|
|
|
|
def test_set_and_get_metadata(self):
|
|
"""Test basic metadata storage and retrieval."""
|
|
obj = self.create_test_object()
|
|
|
|
# Set various types of metadata
|
|
obj.set_metadata("string_key", "string_value")
|
|
obj.set_metadata("int_key", 42)
|
|
obj.set_metadata("list_key", [1, 2, 3])
|
|
obj.set_metadata("dict_key", {"nested": "value"})
|
|
|
|
# Verify retrieval
|
|
self.assertEqual(obj.get_metadata("string_key"), "string_value")
|
|
self.assertEqual(obj.get_metadata("int_key"), 42)
|
|
self.assertEqual(obj.get_metadata("list_key"), [1, 2, 3])
|
|
self.assertEqual(obj.get_metadata("dict_key"), {"nested": "value"})
|
|
|
|
def test_get_nonexistent_metadata(self):
|
|
"""Test that getting nonexistent metadata returns None."""
|
|
obj = self.create_test_object()
|
|
|
|
result = obj.get_metadata("nonexistent_key")
|
|
self.assertIsNone(result, "Nonexistent metadata should return None")
|
|
|
|
def test_update_metadata(self):
|
|
"""Test that metadata values can be updated."""
|
|
obj = self.create_test_object()
|
|
|
|
# Set initial value
|
|
obj.set_metadata("key", "initial")
|
|
self.assertEqual(obj.get_metadata("key"), "initial")
|
|
|
|
# Update value
|
|
obj.set_metadata("key", "updated")
|
|
self.assertEqual(obj.get_metadata("key"), "updated", "Metadata should be updateable")
|
|
|
|
def test_metadata_isolation(self):
|
|
"""Test that metadata is isolated between instances."""
|
|
obj1 = self.create_test_object()
|
|
obj2 = self.create_test_object()
|
|
|
|
obj1.set_metadata("key", "value1")
|
|
obj2.set_metadata("key", "value2")
|
|
|
|
self.assertEqual(obj1.get_metadata("key"), "value1")
|
|
self.assertEqual(obj2.get_metadata("key"), "value2")
|
|
self.assertNotEqual(obj1.get_metadata("key"), obj2.get_metadata("key"))
|