test: add CM_DEBUG helper parity test (failing)
This commit is contained in:
parent
40c3a76c13
commit
34f5398bff
0
tests/__init__.py
Normal file
0
tests/__init__.py
Normal file
84
tests/test_debug_enabled.py
Normal file
84
tests/test_debug_enabled.py
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
"""Regression tests for the _debug_enabled helper.
|
||||||
|
|
||||||
|
Both app.cm_api and app.cm_web_view define a private _debug_enabled()
|
||||||
|
function that parses the CM_DEBUG environment variable. They are
|
||||||
|
intentionally duplicated (only two call sites; no shared utility module
|
||||||
|
exists). This test runs the same parametrized cases against every copy
|
||||||
|
to catch drift if one is updated without the other.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import unittest
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
|
# Import the modules at top-level (before any mock.patch.dict with
|
||||||
|
# clear=True), so module-load-time os.getenv() reads see the real
|
||||||
|
# environment. The patches inside individual tests then only affect the
|
||||||
|
# helper's runtime read of CM_DEBUG.
|
||||||
|
import app.cm_api
|
||||||
|
import app.cm_web_view
|
||||||
|
|
||||||
|
|
||||||
|
# Modules expected to expose a private _debug_enabled() helper.
|
||||||
|
# Add new entries here if more Flask entrypoints adopt the same toggle.
|
||||||
|
HELPER_MODULES = (
|
||||||
|
app.cm_web_view,
|
||||||
|
app.cm_api,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# (env_value, expected_result). env_value=None means CM_DEBUG is unset.
|
||||||
|
CASES = (
|
||||||
|
(None, False),
|
||||||
|
("", False),
|
||||||
|
("false", False),
|
||||||
|
("False", False),
|
||||||
|
("FALSE", False),
|
||||||
|
("0", False),
|
||||||
|
("no", False),
|
||||||
|
("anything-else", False),
|
||||||
|
("true", True),
|
||||||
|
("True", True),
|
||||||
|
("TRUE", True),
|
||||||
|
("1", True),
|
||||||
|
("yes", True),
|
||||||
|
("YES", True),
|
||||||
|
(" true ", True),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class DebugEnabledTests(unittest.TestCase):
|
||||||
|
def _resolve(self, module):
|
||||||
|
return getattr(module, "_debug_enabled", None)
|
||||||
|
|
||||||
|
def test_helper_exists_on_every_module(self):
|
||||||
|
for module in HELPER_MODULES:
|
||||||
|
with self.subTest(module=module.__name__):
|
||||||
|
helper = self._resolve(module)
|
||||||
|
self.assertTrue(
|
||||||
|
callable(helper),
|
||||||
|
f"{module.__name__}._debug_enabled must be callable",
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_parses_cm_debug_consistently(self):
|
||||||
|
for module in HELPER_MODULES:
|
||||||
|
helper = self._resolve(module)
|
||||||
|
if helper is None:
|
||||||
|
self.fail(
|
||||||
|
f"{module.__name__}._debug_enabled is missing — "
|
||||||
|
"make test_helper_exists_on_every_module pass first"
|
||||||
|
)
|
||||||
|
for env_value, expected in CASES:
|
||||||
|
with self.subTest(module=module.__name__, env=env_value):
|
||||||
|
env = {} if env_value is None else {"CM_DEBUG": env_value}
|
||||||
|
with mock.patch.dict(os.environ, env, clear=True):
|
||||||
|
self.assertEqual(
|
||||||
|
helper(),
|
||||||
|
expected,
|
||||||
|
f"{module.__name__}._debug_enabled() should be "
|
||||||
|
f"{expected!r} for CM_DEBUG={env_value!r}",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
unittest.main()
|
||||||
Loading…
x
Reference in New Issue
Block a user