seitime-frappe/frappe/tests/utils/__init__.py
Sagar Vora 11235f6b3a fix: allow whitelist_for_tests in CI environment
The CI check was incorrectly nested inside the dev_server condition,
preventing test endpoints from being accessible during CI runs using
bench execute. Now CI is checked independently.
2025-11-21 17:03:50 +05:30

85 lines
2.2 KiB
Python

import logging
import os
from functools import wraps
import frappe
logger = logging.Logger(__file__)
from .generators import *
def whitelist_for_tests(**whitelist_kwargs):
"""Decorator to whitelist test endpoints.
Only allows access when running in test mode or running a development server with testing enabled.
Supports all parameters that @frappe.whitelist() accepts.
Usage:
@whitelist_for_tests(allow_guest=True)
def my_guest_test_endpoint():
...
"""
def decorator(fn):
@wraps(fn)
def wrapper(*args, **kwargs):
if not (
frappe.in_test or (frappe._dev_server and frappe.conf.allow_tests) or os.environ.get("CI")
):
frappe.throw( # nosemgrep: frappe-missing-translate-function-python
'Test endpoints are only available when running in test mode or running a development server ("bench start") with the "allow_tests" site config enabled'
)
return fn(*args, **kwargs)
return frappe.whitelist(**whitelist_kwargs)(wrapper)
return decorator
def check_orpahned_doctypes():
"""Check that all doctypes in DB actually exist after patch test"""
from frappe.model.base_document import get_controller
doctypes = frappe.get_all("DocType", {"custom": 0}, pluck="name")
orpahned_doctypes = []
for doctype in doctypes:
try:
get_controller(doctype)
except ImportError:
orpahned_doctypes.append(doctype)
if orpahned_doctypes:
frappe.throw(
"Following doctypes exist in DB without controller.\n {}".format("\n".join(orpahned_doctypes))
)
def toggle_test_mode(enable: bool):
"""Enable or disable `frappe.in_test` (and related deprecated flag)"""
frappe.in_test = enable
frappe.local.flags.in_test = enable
from frappe.deprecation_dumpster import (
get_tests_CompatFrappeTestCase,
)
from frappe.deprecation_dumpster import (
tests_change_settings as change_settings,
)
from frappe.deprecation_dumpster import (
tests_debug_on as debug_on,
)
FrappeTestCase = get_tests_CompatFrappeTestCase()
from frappe.deprecation_dumpster import (
tests_patch_hooks as patch_hooks,
)
from frappe.deprecation_dumpster import (
tests_timeout as timeout,
)
from frappe.deprecation_dumpster import (
tests_utils_get_dependencies as get_dependencies,
)