pyWebLayout/tests/mixins/metadata_tests.py
Duncan Tourolle ea93681aaf
All checks were successful
Python CI / test (push) Successful in 6m46s
refactoring the mixin system
2025-11-08 08:08:02 +01:00

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