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

41 lines
1.3 KiB
Python

import subprocess
from collections.abc import Callable
from cli.exit_codes import DATABASE_ERROR, REDIS_ERROR, RUNTIME_ERROR, SUCCESS
def test_config_doctor_json_output_has_stable_contract(
run_cli_command: Callable[..., subprocess.CompletedProcess[str]],
parse_json_stdout: Callable[[subprocess.CompletedProcess[str]], dict],
) -> None:
completed = run_cli_command('config', 'doctor', '--env=dev', '--output=json')
payload = parse_json_stdout(completed)
assert completed.returncode in {SUCCESS, REDIS_ERROR, DATABASE_ERROR, RUNTIME_ERROR}
assert payload['env'] == 'dev'
assert isinstance(payload['ok'], bool)
if 'error' in payload:
assert isinstance(payload['message'], str)
assert isinstance(payload['error'], str)
return
assert set(payload) == {
'ok',
'message',
'databaseCount',
'cacheCount',
'missingInCacheCount',
'orphanInCacheCount',
'mismatchCount',
'sampleLimit',
'missingInCache',
'orphanInCache',
'mismatchKeys',
'env',
}
assert isinstance(payload['databaseCount'], int)
assert isinstance(payload['cacheCount'], int)
assert isinstance(payload['missingInCache'], list)
assert isinstance(payload['orphanInCache'], list)
assert isinstance(payload['mismatchKeys'], list)