Coverage for app / backend / src / couchers / helpers / strong_verification.py: 100%
27 statements
« prev ^ index » next coverage.py v7.13.2, created at 2026-02-03 06:18 +0000
« prev ^ index » next coverage.py v7.13.2, created at 2026-02-03 06:18 +0000
1from typing import TypedDict
3from sqlalchemy import select
4from sqlalchemy.orm import Session
6from couchers.models import StrongVerificationAttempt, User
7from couchers.proto import api_pb2
8from couchers.proto.api_pb2 import BirthdateVerificationStatus, GenderVerificationStatus
11def has_strong_verification(session: Session, user: User) -> bool:
12 attempt = session.execute(
13 select(StrongVerificationAttempt)
14 .where(StrongVerificationAttempt.user_id == user.id)
15 .where(StrongVerificationAttempt.is_valid)
16 .order_by(StrongVerificationAttempt.passport_expiry_datetime.desc())
17 .limit(1)
18 ).scalar_one_or_none()
19 if attempt:
20 assert attempt.is_valid
21 return bool(attempt.has_strong_verification(user))
22 return False
25class StrongVerificationFields(TypedDict):
26 birthdate_verification_status: BirthdateVerificationStatus.ValueType
27 gender_verification_status: GenderVerificationStatus.ValueType
28 has_strong_verification: bool
31def get_strong_verification_fields(session: Session, db_user: User) -> StrongVerificationFields:
32 out: StrongVerificationFields = dict(
33 birthdate_verification_status=api_pb2.BIRTHDATE_VERIFICATION_STATUS_UNVERIFIED,
34 gender_verification_status=api_pb2.GENDER_VERIFICATION_STATUS_UNVERIFIED,
35 has_strong_verification=False,
36 )
37 attempt = session.execute(
38 select(StrongVerificationAttempt)
39 .where(StrongVerificationAttempt.user_id == db_user.id)
40 .where(StrongVerificationAttempt.is_valid)
41 .order_by(StrongVerificationAttempt.passport_expiry_datetime.desc())
42 .limit(1)
43 ).scalar_one_or_none()
44 if attempt:
45 assert attempt.is_valid
46 if attempt.matches_birthdate(db_user):
47 out["birthdate_verification_status"] = api_pb2.BIRTHDATE_VERIFICATION_STATUS_VERIFIED
48 else:
49 out["birthdate_verification_status"] = api_pb2.BIRTHDATE_VERIFICATION_STATUS_MISMATCH
51 if attempt.matches_gender(db_user):
52 out["gender_verification_status"] = api_pb2.GENDER_VERIFICATION_STATUS_VERIFIED
53 else:
54 out["gender_verification_status"] = api_pb2.GENDER_VERIFICATION_STATUS_MISMATCH
56 out["has_strong_verification"] = attempt.has_strong_verification(db_user)
58 assert out["has_strong_verification"] == (
59 out["birthdate_verification_status"] == api_pb2.BIRTHDATE_VERIFICATION_STATUS_VERIFIED
60 and out["gender_verification_status"] == api_pb2.GENDER_VERIFICATION_STATUS_VERIFIED
61 )
62 return out