merge qyqy_develop and retain risk review updates
This commit is contained in:
@@ -114,6 +114,49 @@ def test_score_bands_are_deterministic_and_server_only() -> None:
|
||||
assert (high.total, high.risk_level) == (57, "C5")
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_completed_questionnaire_can_be_requested_for_retake(
|
||||
monkeypatch: pytest.MonkeyPatch,
|
||||
) -> None:
|
||||
class SessionContext:
|
||||
async def __aenter__(self) -> object:
|
||||
return object()
|
||||
|
||||
async def __aexit__(self, *_args: object) -> None:
|
||||
return None
|
||||
|
||||
async def not_required(_self: object, _context: RequestContext) -> bool:
|
||||
return False
|
||||
|
||||
async def no_pending_review(
|
||||
_self: object, _customer_id: int, *, lock: bool = False
|
||||
) -> None:
|
||||
del lock
|
||||
return None
|
||||
|
||||
monkeypatch.setattr(
|
||||
RiskQuestionnaireService, "is_required", not_required
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"app.service.risk_questionnaire_service.SessionFactory",
|
||||
lambda: SessionContext(),
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"app.service.risk_questionnaire_service.RiskQuestionnaireRepository.pending_drift_review",
|
||||
no_pending_review,
|
||||
)
|
||||
service = RiskQuestionnaireService()
|
||||
|
||||
regular = await service.questionnaire(context())
|
||||
assert regular["data"]["questionnaire"] is None # type: ignore[index]
|
||||
|
||||
retake = await service.questionnaire(context(), retake=True)
|
||||
questionnaire = retake["data"]["questionnaire"] # type: ignore[index]
|
||||
assert isinstance(questionnaire, dict)
|
||||
assert questionnaire["version"] == "opening-risk-v1"
|
||||
assert len(questionnaire["questions"]) == 13
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_submission_persists_assessment_and_profile_without_exposing_them(
|
||||
monkeypatch: pytest.MonkeyPatch,
|
||||
@@ -139,8 +182,9 @@ async def test_submission_persists_assessment_and_profile_without_exposing_them(
|
||||
)
|
||||
|
||||
data = cast(dict[str, object], response["data"])
|
||||
assert set(data) == {"completed", "questionnaire_version", "valid_until"}
|
||||
assert set(data) == {"completed", "status", "questionnaire_version", "valid_until"}
|
||||
assert data["completed"] is True
|
||||
assert data["status"] == "active"
|
||||
assert not {"total_score", "risk_level", "risk_profile", "profile"}.intersection(data)
|
||||
assert any(isinstance(item, RiskAssessment) for item in session.items)
|
||||
assert any(isinstance(item, ProfileSnapshot) for item in session.items)
|
||||
|
||||
Reference in New Issue
Block a user