Skip to content

Commit 474444c

Browse files
authored
Merge pull request #215 from python-ellar/test_fix
fix: TestingModule metadata sharing during tests
2 parents 7407e82 + f8f2852 commit 474444c

File tree

3 files changed

+32
-12
lines changed

3 files changed

+32
-12
lines changed

ellar/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
"""Ellar - Python ASGI web framework for building fast, efficient, and scalable RESTful APIs and server-side applications."""
22

3-
__version__ = "0.7.6"
3+
__version__ = "0.7.7"

ellar/testing/module.py

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55
from ellar.app import App, AppFactory
66
from ellar.common import ControllerBase, Module, ModuleRouter
77
from ellar.common.types import T
8-
from ellar.core import ModuleBase
8+
from ellar.core import DynamicModule, ModuleBase, ModuleSetup
99
from ellar.core.routing import EllarMount
1010
from ellar.di import ProviderConfig
11+
from ellar.utils import get_name
1112
from starlette.routing import Host, Mount
1213
from starlette.testclient import TestClient as TestClient
1314

@@ -100,20 +101,39 @@ def create_test_module(
100101
t.List[t.Union[t.Type["GuardCanActivate"], "GuardCanActivate"]]
101102
] = None,
102103
config_module: t.Optional[t.Union[str, t.Dict]] = None,
104+
modify_modules: bool = True,
103105
) -> TESTING_MODULE: # type: ignore[valid-type]
104106
"""
105107
Create a TestingModule to test controllers and services in isolation
106-
:param modules:
107-
:param controllers:
108-
:param routers:
109-
:param providers:
110-
:param template_folder:
111-
:param base_directory:
112-
:param static_folder:
113-
:param config_module:
114-
:param global_guards:
108+
:param modules: Other module dependencies
109+
:param controllers: Module Controllers
110+
:param routers: Module router
111+
:param providers: Module Services
112+
:param template_folder: Module Templating folder
113+
:param base_directory: Base Directory for static folder and template
114+
:param static_folder: Module Static folder
115+
:param config_module: Application Config
116+
:param global_guards: Application Guard
117+
:param modify_modules: Modifies Modules
118+
if setup or register_setup is used to avoid module sharing metadata between tests
115119
:return:
116120
"""
121+
122+
if modify_modules:
123+
124+
def modifier_module(
125+
_module: t.Union[t.Type, t.Any],
126+
) -> t.Union[t.Type, t.Any]:
127+
return Module()(
128+
type(
129+
f"{get_name(_module)}Modified_{uuid4().hex[:6]}", (_module,), {}
130+
)
131+
)
132+
133+
for module_ in modules:
134+
if isinstance(module_, (ModuleSetup, DynamicModule)):
135+
module_.module = modifier_module(module_.module)
136+
117137
module = Module(
118138
modules=modules,
119139
controllers=controllers,

tests/test_modules/test_module_config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ def test_dynamic_module_haves_routes():
200200
mount0 = ModuleRouterBuilder.build(routers[0])
201201
assert len(mount0.routes) == 39
202202
tm = Test.create_test_module(
203-
modules=(DynamicInstantiatedModule.setup(a=233, b=344),)
203+
modules=(DynamicInstantiatedModule.setup(a=233, b=344),), modify_modules=False
204204
)
205205
tm.create_application()
206206
routers = reflect.get_metadata(MODULE_METADATA.ROUTERS, DynamicInstantiatedModule)

0 commit comments

Comments
 (0)