django-components/tests/test_registry.py

66 lines
2.3 KiB
Python

import unittest
from django_components import component
from .django_test_setup import * # NOQA
class MockComponent(component.Component):
pass
class MockComponent2(component.Component):
pass
class MockComponentView(component.Component):
def get(self, request, *args, **kwargs):
pass
class ComponentRegistryTest(unittest.TestCase):
def setUp(self):
self.registry = component.ComponentRegistry()
def test_register_class_decorator(self):
@component.register("decorated_component")
class TestComponent(component.Component):
pass
self.assertEqual(component.registry.get("decorated_component"), TestComponent)
def test_simple_register(self):
self.registry.register(name="testcomponent", component=MockComponent)
self.assertEqual(self.registry.all(), {"testcomponent": MockComponent})
def test_register_two_components(self):
self.registry.register(name="testcomponent", component=MockComponent)
self.registry.register(name="testcomponent2", component=MockComponent)
self.assertEqual(
self.registry.all(),
{
"testcomponent": MockComponent,
"testcomponent2": MockComponent,
},
)
def test_prevent_registering_different_components_with_the_same_name(self):
self.registry.register(name="testcomponent", component=MockComponent)
with self.assertRaises(component.AlreadyRegistered):
self.registry.register(name="testcomponent", component=MockComponent2)
def test_allow_duplicated_registration_of_the_same_component(self):
try:
self.registry.register(name="testcomponent", component=MockComponentView)
self.registry.register(name="testcomponent", component=MockComponentView)
except component.AlreadyRegistered:
self.fail("Should not raise AlreadyRegistered")
def test_simple_unregister(self):
self.registry.register(name="testcomponent", component=MockComponent)
self.registry.unregister(name="testcomponent")
self.assertEqual(self.registry.all(), {})
def test_raises_on_failed_unregister(self):
with self.assertRaises(component.NotRegistered):
self.registry.unregister(name="testcomponent")