|
5 | 5 | from ellar.app import App, AppFactory |
6 | 6 | from ellar.common import ControllerBase, Module, ModuleRouter |
7 | 7 | from ellar.common.types import T |
8 | | -from ellar.core import ModuleBase |
| 8 | +from ellar.core import DynamicModule, ModuleBase, ModuleSetup |
9 | 9 | from ellar.core.routing import EllarMount |
10 | 10 | from ellar.di import ProviderConfig |
| 11 | +from ellar.utils import get_name |
11 | 12 | from starlette.routing import Host, Mount |
12 | 13 | from starlette.testclient import TestClient as TestClient |
13 | 14 |
|
@@ -100,20 +101,39 @@ def create_test_module( |
100 | 101 | t.List[t.Union[t.Type["GuardCanActivate"], "GuardCanActivate"]] |
101 | 102 | ] = None, |
102 | 103 | config_module: t.Optional[t.Union[str, t.Dict]] = None, |
| 104 | + modify_modules: bool = True, |
103 | 105 | ) -> TESTING_MODULE: # type: ignore[valid-type] |
104 | 106 | """ |
105 | 107 | 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 |
115 | 119 | :return: |
116 | 120 | """ |
| 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 | + |
117 | 137 | module = Module( |
118 | 138 | modules=modules, |
119 | 139 | controllers=controllers, |
|
0 commit comments