pyWebLayout/tests/mixins/metadata_tests.py

72 lines
2.5 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"))