Coverage for src/couchers/helpers/strong_verification.py: 100%
24 statements
« prev ^ index » next coverage.py v7.11.0, created at 2025-12-20 11:53 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2025-12-20 11:53 +0000
1from sqlalchemy.orm import Session
3from couchers.models import StrongVerificationAttempt, User
4from couchers.proto import api_pb2
5from couchers.sql import couchers_select as select
8def has_strong_verification(session: Session, user: User) -> bool:
9 attempt = session.execute(
10 select(StrongVerificationAttempt)
11 .where(StrongVerificationAttempt.user_id == user.id)
12 .where(StrongVerificationAttempt.is_valid)
13 .order_by(StrongVerificationAttempt.passport_expiry_datetime.desc())
14 .limit(1)
15 ).scalar_one_or_none()
16 if attempt:
17 assert attempt.is_valid
18 return bool(attempt.has_strong_verification(user))
19 return False
22def get_strong_verification_fields(session: Session, db_user: User) -> dict[str, int | bool]:
23 out: dict[str, int | bool] = dict(
24 birthdate_verification_status=api_pb2.BIRTHDATE_VERIFICATION_STATUS_UNVERIFIED,
25 gender_verification_status=api_pb2.GENDER_VERIFICATION_STATUS_UNVERIFIED,
26 has_strong_verification=False,
27 )
28 attempt = session.execute(
29 select(StrongVerificationAttempt)
30 .where(StrongVerificationAttempt.user_id == db_user.id)
31 .where(StrongVerificationAttempt.is_valid)
32 .order_by(StrongVerificationAttempt.passport_expiry_datetime.desc())
33 .limit(1)
34 ).scalar_one_or_none()
35 if attempt:
36 assert attempt.is_valid
37 if attempt.matches_birthdate(db_user):
38 out["birthdate_verification_status"] = api_pb2.BIRTHDATE_VERIFICATION_STATUS_VERIFIED
39 else:
40 out["birthdate_verification_status"] = api_pb2.BIRTHDATE_VERIFICATION_STATUS_MISMATCH
42 if attempt.matches_gender(db_user):
43 out["gender_verification_status"] = api_pb2.GENDER_VERIFICATION_STATUS_VERIFIED
44 else:
45 out["gender_verification_status"] = api_pb2.GENDER_VERIFICATION_STATUS_MISMATCH
47 out["has_strong_verification"] = attempt.has_strong_verification(db_user)
49 assert out["has_strong_verification"] == (
50 out["birthdate_verification_status"] == api_pb2.BIRTHDATE_VERIFICATION_STATUS_VERIFIED
51 and out["gender_verification_status"] == api_pb2.GENDER_VERIFICATION_STATUS_VERIFIED
52 )
53 return out