diff --git a/frappe/commands/testing.py b/frappe/commands/testing.py index bc16e3a337..20c5ab2a48 100644 --- a/frappe/commands/testing.py +++ b/frappe/commands/testing.py @@ -102,7 +102,7 @@ def main( if doctype or doctype_list_path: doctype = _load_doctype_list(doctype_list_path) if doctype_list_path else doctype - discover_doctype_tests(doctype, runner, force, app) + discover_doctype_tests(doctype, runner, app, force) elif module_def: _run_module_def_tests(app, module_def, runner, force) elif module: @@ -197,7 +197,7 @@ def _run_module_def_tests(app, module_def, runner: "TestRunner", force) -> "Test from frappe.testing import discover_doctype_tests doctypes = _get_doctypes_for_module_def(app, module_def) - return discover_doctype_tests(doctypes, runner, force, app) + return discover_doctype_tests(doctypes, runner, app, force) def _get_doctypes_for_module_def(app, module_def): diff --git a/frappe/testing/discovery.py b/frappe/testing/discovery.py index 257a6d34e7..c5966cdab7 100644 --- a/frappe/testing/discovery.py +++ b/frappe/testing/discovery.py @@ -74,6 +74,7 @@ def discover_doctype_tests(doctypes: list[str], runner, app: str, force: bool = """Discover tests for the specified doctype(s)""" if isinstance(doctypes, str): doctypes = [doctypes] + _app = app for doctype in doctypes: try: module = frappe.db.get_value("DocType", doctype, "module") @@ -82,13 +83,15 @@ def discover_doctype_tests(doctypes: list[str], runner, app: str, force: bool = # Check if the DocType belongs to the specified app doctype_app = frappe.db.get_value("Module Def", module, "app_name") - if app and doctype_app != app: - raise TestRunnerError(f"DocType {doctype} does not belong to app {app}") - elif not app: - app = doctype_app + if app is None: + _app = doctype_app + elif doctype_app != app: + raise TestRunnerError( + f"Mismatch between specified app '{app}' and doctype app '{doctype_app}'" + ) test_module = frappe.modules.utils.get_module_name(doctype, module, "test_") force and frappe.db.delete(doctype) - _add_module_tests(runner, app, test_module) + _add_module_tests(runner, _app, test_module) except Exception as e: logger.error(f"Error discovering tests for {doctype}: {e!s}") raise TestRunnerError(f"Failed to discover tests for {doctype}: {e!s}") from e @@ -100,9 +103,15 @@ def discover_module_tests(modules: list[str], runner, app: str) -> "TestRunner": """Discover tests for the specified test module""" if isinstance(modules, str): modules = [modules] + _app = app try: for module in modules: - _add_module_tests(runner, app, module) + module_app = module.split(".")[0] + if app is None: + _app = module_app + elif app != module_app: + raise TestRunnerError(f"Mismatch between specified app '{app}' and module app '{module_app}'") + _add_module_tests(runner, _app, module) except Exception as e: logger.error(f"Error discovering tests for {module}: {e!s}") raise TestRunnerError(f"Failed to discover tests for {module}: {e!s}") from e diff --git a/frappe/testing/environment.py b/frappe/testing/environment.py index a8698a8e5b..4eee93d710 100644 --- a/frappe/testing/environment.py +++ b/frappe/testing/environment.py @@ -96,7 +96,7 @@ class IntegrationTestPreparation: """Run 'before_tests' hooks""" logger.info(f'Running "before_tests" hooks for {category} tests on app: {app}') for hook_function in frappe.get_hooks("before_tests", app_name=app): - logger.info('Running "before_tests" hook function {hook_function}') + logger.info(f'Running "before_tests" hook function {hook_function}') frappe.get_attr(hook_function)() @staticmethod