"""
Simplified unit tests for abstract document elements using test mixins.

This demonstrates how test mixins can eliminate duplication and simplify tests.
"""

import unittest
from pyWebLayout.abstract.document import Document, Chapter
from tests.mixins.font_registry_tests import FontRegistryTestMixin, FontRegistryParentDelegationTestMixin
from tests.mixins.metadata_tests import MetadataContainerTestMixin


class TestDocumentFontRegistry(FontRegistryTestMixin, unittest.TestCase):
    """Test FontRegistry behavior for Document - simplified with mixin."""

    def create_test_object(self):
        """Create a Document instance for testing."""
        return Document("Test Document", "en-US")


class TestDocumentMetadata(MetadataContainerTestMixin, unittest.TestCase):
    """Test MetadataContainer behavior for Document - simplified with mixin."""

    def create_test_object(self):
        """Create a Document instance for testing."""
        return Document("Test Document", "en-US")


class TestChapterFontRegistry(FontRegistryTestMixin, unittest.TestCase):
    """Test FontRegistry behavior for Chapter - simplified with mixin."""

    def create_test_object(self):
        """Create a Chapter instance for testing."""
        return Chapter("Test Chapter", level=1)


class TestChapterFontRegistryParentDelegation(
        FontRegistryParentDelegationTestMixin,
        unittest.TestCase):
    """Test FontRegistry parent delegation for Chapter - simplified with mixin."""

    def create_parent(self):
        """Create a Document as parent."""
        return Document("Parent Document", "en-US")

    def create_child(self, parent):
        """Create a Chapter with parent reference."""
        return Chapter("Child Chapter", level=1, parent=parent)


class TestChapterMetadata(MetadataContainerTestMixin, unittest.TestCase):
    """Test MetadataContainer behavior for Chapter - simplified with mixin."""

    def create_test_object(self):
        """Create a Chapter instance for testing."""
        return Chapter("Test Chapter", level=1)


if __name__ == '__main__':
    unittest.main()
