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

1from sqlalchemy.orm import Session 

2 

3from couchers.models import StrongVerificationAttempt, User 

4from couchers.proto import api_pb2 

5from couchers.sql import couchers_select as select 

6 

7 

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 

20 

21 

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 

41 

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 

46 

47 out["has_strong_verification"] = attempt.has_strong_verification(db_user) 

48 

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