89 lines
3.4 KiB
Python
89 lines
3.4 KiB
Python
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
|