Coverage for app / backend / src / tests / test_visible_users.py: 100%

49 statements  

« prev     ^ index     » next       coverage.py v7.13.2, created at 2026-02-03 06:18 +0000

1from typing import cast 

2 

3from sqlalchemy import select, update 

4from sqlalchemy.sql import func 

5 

6from couchers.context import CouchersContext 

7from couchers.db import session_scope 

8from couchers.models import FriendRelationship, User 

9from couchers.sql import users_visible, where_users_column_visible 

10from tests.fixtures.db import generate_user, make_friends, make_user_block, make_user_invisible 

11 

12 

13class _FakeContext: 

14 def __init__(self, user_id): 

15 self.user_id = user_id 

16 

17 

18# Also tests different ways to make users invisible 

19def test_is_visible_property(db): 

20 user1, token1 = generate_user() 

21 user2, token2 = generate_user() 

22 user3, token3 = generate_user() 

23 user4, token4 = generate_user() 

24 user5, token5 = generate_user(delete_user=True) 

25 

26 with session_scope() as session: 

27 session.execute(update(User).where(User.id == user2.id).values(is_banned=True)) 

28 session.execute(update(User).where(User.id == user3.id).values(is_deleted=True)) 

29 session.execute(update(User).where(User.id == user4.id).values(is_banned=True)) 

30 

31 visible_users = session.execute(select(User.id).where(User.is_visible)).scalars().all() 

32 

33 assert visible_users[0] == user1.id 

34 

35 

36def test_select_dot_where_users_visible(db): 

37 user1, token1 = generate_user() 

38 user2, token2 = generate_user(delete_user=True) 

39 user3, token3 = generate_user() 

40 user4, token4 = generate_user() 

41 

42 make_user_block(user1, user3) 

43 make_user_block(user4, user1) 

44 

45 context = cast(CouchersContext, _FakeContext(user1.id)) 

46 with session_scope() as session: 

47 assert session.execute(select(func.count()).select_from(User).where(users_visible(context))).scalar_one() == 1 

48 

49 

50def test_select_dot_where_users_column_visible(db): 

51 user1, token1 = generate_user() 

52 user2, token2 = generate_user() 

53 user3, token3 = generate_user() 

54 user4, token4 = generate_user() 

55 user5, token5 = generate_user() 

56 

57 make_friends(user1, user2) 

58 make_friends(user1, user3) 

59 make_friends(user1, user4) 

60 make_friends(user1, user5) 

61 

62 make_user_invisible(user3.id) 

63 make_user_block(user1, user4) 

64 make_user_block(user5, user1) 

65 

66 context = cast(CouchersContext, _FakeContext(user1.id)) 

67 with session_scope() as session: 

68 assert ( 

69 session.execute( 

70 where_users_column_visible( 

71 select(func.count()).select_from(FriendRelationship), context, FriendRelationship.to_user_id 

72 ) 

73 ).scalar_one() 

74 == 1 

75 )