Files
X-Financial/server/tests/test_bootstrap_security.py

66 lines
2.0 KiB
Python
Raw Normal View History

2026-07-13 14:45:36 +08:00
from __future__ import annotations
from types import SimpleNamespace
import pytest
from fastapi import HTTPException
from app.api.v1.endpoints import bootstrap as bootstrap_endpoint
from app.schemas.bootstrap import BootstrapSetupPayload
def completed_settings() -> SimpleNamespace:
return SimpleNamespace(
setup_completed=True,
company_name="X-Financial",
company_code="XF-001",
admin_email="admin@example.com",
web_host="0.0.0.0",
web_port=5273,
app_host="0.0.0.0",
app_port=8000,
postgres_host="postgres.internal",
postgres_port=5432,
postgres_db="x_financial",
postgres_user="postgres-admin",
postgres_password="secret",
redis_url="redis://redis.internal:6379/0",
)
def setup_payload() -> BootstrapSetupPayload:
return BootstrapSetupPayload(
company_name="X-Financial",
company_code="XF-001",
admin_email="admin@example.com",
postgres_host="postgres.internal",
postgres_port=5432,
postgres_db="x_financial",
postgres_user="postgres-admin",
postgres_password="secret",
redis_url="redis://redis.internal:6379/0",
)
def test_completed_bootstrap_state_redacts_infrastructure(monkeypatch: pytest.MonkeyPatch) -> None:
monkeypatch.setattr(bootstrap_endpoint, "get_settings", completed_settings)
state = bootstrap_endpoint.get_bootstrap_state()
assert state.initialized is True
assert state.database.host == ""
assert state.database.username == ""
assert state.database.password_configured is True
assert state.redis.url == ""
def test_completed_bootstrap_rejects_anonymous_reconfiguration(
monkeypatch: pytest.MonkeyPatch,
) -> None:
monkeypatch.setattr(bootstrap_endpoint, "get_settings", completed_settings)
with pytest.raises(HTTPException) as exc_info:
bootstrap_endpoint.initialize_bootstrap(setup_payload(), None)
assert exc_info.value.status_code == 403