ShiErFeng/shierfeng-fastapi-backend/tests/cli/wizard/test_cache_clear.py
2026-07-24 09:43:10 +08:00

89 lines
3.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from types import ModuleType, SimpleNamespace
from pytest import MonkeyPatch
def test_cache_clear_wizard_cancels_when_confirmation_rejected(
monkeypatch: MonkeyPatch,
cache_clear_flow: ModuleType,
exit_codes: ModuleType,
) -> None:
captured: dict[str, object] = {}
answers = iter(['dev', 'cache-name', 'sys_config', True, False])
monkeypatch.setattr(
cache_clear_flow.CacheClearWizardFlow,
'prompt_service',
SimpleNamespace(
prompt_env=lambda default_env='dev': next(answers),
prompt_choice=lambda prompt_text, choices, default_value: next(answers),
prompt_required_text=lambda prompt_text, default_value='': next(answers),
prompt_optional_text=lambda prompt_text, default_value='': '',
prompt_confirm=lambda prompt_text, default_value=False: next(answers),
),
)
monkeypatch.setattr(
cache_clear_flow.CacheClearWizardFlow.context_factory,
'build_regular',
lambda env, output, allow_prod, yes, dry_run: SimpleNamespace(env=env, output=output),
)
monkeypatch.setattr(
cache_clear_flow.CacheClearWizardFlow.execution_service,
'complete_result',
lambda ctx, result: captured.update({'ctx': ctx, 'result': result}),
)
cache_clear_flow.run_cache_clear_wizard('text')
assert captured['ctx'].env == 'dev'
assert captured['result'].exit_code == exit_codes.GUARD_REJECTED
assert captured['result'].data['message'] == '已取消向导执行wizard cache-clear'
def test_cache_clear_wizard_accepts_default_context_values(
monkeypatch: MonkeyPatch,
cache_clear_flow: ModuleType,
) -> None:
captured_defaults: dict[str, object] = {}
captured_confirm_defaults: list[tuple[str, bool]] = []
answers = iter(['dev', 'cache-name', 'sys_config', True, False])
monkeypatch.setattr(
cache_clear_flow.CacheClearWizardFlow,
'prompt_service',
SimpleNamespace(
prompt_env=lambda default_env='dev': captured_defaults.update({'env': default_env}) or next(answers),
prompt_choice=lambda prompt_text, choices, default_value: (
captured_defaults.update({'mode': default_value}) or next(answers)
),
prompt_required_text=lambda prompt_text, default_value='': (
captured_defaults.update({'cache_name': default_value}) or next(answers)
),
prompt_optional_text=lambda prompt_text, default_value='': '',
prompt_confirm=lambda prompt_text, default_value=False: (
captured_confirm_defaults.append((prompt_text, default_value)) or next(answers)
),
),
)
monkeypatch.setattr(
cache_clear_flow.CacheClearWizardFlow.context_factory,
'build_regular',
lambda env, output, allow_prod, yes, dry_run: SimpleNamespace(env=env, output=output),
)
monkeypatch.setattr(
cache_clear_flow.CacheClearWizardFlow.execution_service,
'complete_result',
lambda ctx, result: None,
)
cache_clear_flow.run_cache_clear_wizard(
'text',
default_env='dev',
default_mode='cache-name',
default_cache_name='sys_config',
default_dry_run=True,
)
assert captured_defaults['env'] == 'dev'
assert captured_defaults['mode'] == 'cache-name'
assert captured_defaults['cache_name'] == 'sys_config'
assert captured_confirm_defaults[0][1] is True