mirror of
https://github.com/django-components/django-components.git
synced 2025-08-04 06:18:17 +00:00

* feat: skeleton of dependency manager backend (#688) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * refactor: selectolax update and tests cleanup (#702) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * refactor: move release notes to own file (#704) * chore: merge changes from master (#705) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Yassin Rakha <yaso2go@gmail.com> Co-authored-by: Emil Stenström <emil@emilstenstrom.se> fix for nested slots (#698) (#699) * refactor: remove joint {% component_dependencies %} tag (#706) Co-authored-by: Emil Stenström <emil@emilstenstrom.se> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * refactor: split up utils file and move utils to util dir (#707) * docs: Move docs inside src/ to allow imports in python scripts (#708) * refactor: Docs prep 1 (#715) * refactor: Document template tags (#716) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * refactor: pass slot fills in template via slots param (#719) * chore: Merge master to dev (#729) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Yassin Rakha <yaso2go@gmail.com> Co-authored-by: Emil Stenström <emil@emilstenstrom.se> Co-authored-by: Tom Larsen <larsent@gmail.com> fix for nested slots (#698) (#699) * fix: Do not raise error if multiple slots with same name are flagged as default (#727) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * refactor: tag formatter - allow fwd slash in end tag (#730) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * refactor: Use lowercase names for registry settings (#731) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * docs: add docstrings (#732) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat: define settings as a data class for type hints, intellisense, and docs (#733) * refactor: fix reload-on-change logic, expose autodiscover's dirs-getting logic, rename settings (#734) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * docs: document settings (#743) * docs: document settings * refactor: fix linter errors * feat: passthrough slots and more (#758) * feat: passthrough slots and more * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * refactor: remove ComponentSlotContext.slots * refactor: update comment * docs: update changelog * refactor: update docstrings * refactor: document and test-cover more changes * refactor: revert fill without name * docs: update README --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix: apostrophes in tags (#765) * refactor: fix merge error - duplicate code --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Emil Stenström <emil@emilstenstrom.se>
117 lines
4.9 KiB
Python
117 lines
4.9 KiB
Python
import sys
|
|
from unittest import TestCase
|
|
|
|
from django.conf import settings
|
|
|
|
from django_components import AlreadyRegistered, registry
|
|
from django_components.autodiscovery import autodiscover, import_libraries
|
|
|
|
from .django_test_setup import setup_test_config
|
|
|
|
|
|
# NOTE: This is different from BaseTestCase in testutils.py, because here we need
|
|
# TestCase instead of SimpleTestCase.
|
|
class _TestCase(TestCase):
|
|
def tearDown(self) -> None:
|
|
super().tearDown()
|
|
registry.clear()
|
|
|
|
|
|
class TestAutodiscover(_TestCase):
|
|
def test_autodiscover(self):
|
|
setup_test_config({"autodiscover": False})
|
|
|
|
all_components = registry.all().copy()
|
|
self.assertNotIn("single_file_component", all_components)
|
|
self.assertNotIn("multi_file_component", all_components)
|
|
self.assertNotIn("relative_file_component", all_components)
|
|
self.assertNotIn("relative_file_pathobj_component", all_components)
|
|
|
|
try:
|
|
modules = autodiscover(map_module=lambda p: "tests." + p if p.startswith("components") else p)
|
|
except AlreadyRegistered:
|
|
self.fail("Autodiscover should not raise AlreadyRegistered exception")
|
|
|
|
self.assertIn("tests.components", modules)
|
|
self.assertIn("tests.components.single_file", modules)
|
|
self.assertIn("tests.components.staticfiles.staticfiles", modules)
|
|
self.assertIn("tests.components.multi_file.multi_file", modules)
|
|
self.assertIn("tests.components.relative_file_pathobj.relative_file_pathobj", modules)
|
|
self.assertIn("tests.components.relative_file.relative_file", modules)
|
|
self.assertIn("tests.test_app.components.app_lvl_comp.app_lvl_comp", modules)
|
|
self.assertIn("django_components.components", modules)
|
|
self.assertIn("django_components.components.dynamic", modules)
|
|
|
|
all_components = registry.all().copy()
|
|
self.assertIn("single_file_component", all_components)
|
|
self.assertIn("multi_file_component", all_components)
|
|
self.assertIn("relative_file_component", all_components)
|
|
self.assertIn("relative_file_pathobj_component", all_components)
|
|
|
|
|
|
class TestImportLibraries(_TestCase):
|
|
def test_import_libraries(self):
|
|
# Prepare settings
|
|
setup_test_config({"autodiscover": False})
|
|
settings.COMPONENTS["libraries"] = ["tests.components.single_file", "tests.components.multi_file.multi_file"]
|
|
|
|
# Ensure we start with a clean state
|
|
registry.clear()
|
|
all_components = registry.all().copy()
|
|
self.assertNotIn("single_file_component", all_components)
|
|
self.assertNotIn("multi_file_component", all_components)
|
|
|
|
# Ensure that the modules are executed again after import
|
|
if "tests.components.single_file" in sys.modules:
|
|
del sys.modules["tests.components.single_file"]
|
|
if "tests.components.multi_file.multi_file" in sys.modules:
|
|
del sys.modules["tests.components.multi_file.multi_file"]
|
|
|
|
try:
|
|
modules = import_libraries()
|
|
except AlreadyRegistered:
|
|
self.fail("Autodiscover should not raise AlreadyRegistered exception")
|
|
|
|
self.assertIn("tests.components.single_file", modules)
|
|
self.assertIn("tests.components.multi_file.multi_file", modules)
|
|
|
|
all_components = registry.all().copy()
|
|
self.assertIn("single_file_component", all_components)
|
|
self.assertIn("multi_file_component", all_components)
|
|
|
|
settings.COMPONENTS["libraries"] = []
|
|
|
|
def test_import_libraries_map_modules(self):
|
|
# Prepare settings
|
|
setup_test_config(
|
|
{
|
|
"autodiscover": False,
|
|
}
|
|
)
|
|
settings.COMPONENTS["libraries"] = ["components.single_file", "components.multi_file.multi_file"]
|
|
|
|
# Ensure we start with a clean state
|
|
registry.clear()
|
|
all_components = registry.all().copy()
|
|
self.assertNotIn("single_file_component", all_components)
|
|
self.assertNotIn("multi_file_component", all_components)
|
|
|
|
# Ensure that the modules are executed again after import
|
|
if "tests.components.single_file" in sys.modules:
|
|
del sys.modules["tests.components.single_file"]
|
|
if "tests.components.multi_file.multi_file" in sys.modules:
|
|
del sys.modules["tests.components.multi_file.multi_file"]
|
|
|
|
try:
|
|
modules = import_libraries(map_module=lambda p: "tests." + p if p.startswith("components") else p)
|
|
except AlreadyRegistered:
|
|
self.fail("Autodiscover should not raise AlreadyRegistered exception")
|
|
|
|
self.assertIn("tests.components.single_file", modules)
|
|
self.assertIn("tests.components.multi_file.multi_file", modules)
|
|
|
|
all_components = registry.all().copy()
|
|
self.assertIn("single_file_component", all_components)
|
|
self.assertIn("multi_file_component", all_components)
|
|
|
|
settings.COMPONENTS["libraries"] = []
|