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

47 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-12-29 00:10 +0000

1from sqlalchemy import select, update 

2from sqlalchemy.sql import func 

3 

4from couchers.db import session_scope 

5from couchers.models import FriendRelationship, User 

6from couchers.sql import users_visible, where_users_column_visible 

7from tests.test_fixtures import ( # noqa 

8 db, 

9 generate_user, 

10 make_friends, 

11 make_user_block, 

12 make_user_invisible, 

13) 

14 

15 

16class _FakeContext: 

17 def __init__(self, user_id): 

18 self.user_id = user_id 

19 

20 

21# Also tests different ways to make users invisible 

22def test_is_visible_property(db): 

23 user1, token1 = generate_user() 

24 user2, token2 = generate_user() 

25 user3, token3 = generate_user() 

26 user4, token4 = generate_user() 

27 user5, token5 = generate_user(delete_user=True) 

28 

29 with session_scope() as session: 

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

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

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

33 

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

35 

36 assert visible_users[0] == user1.id 

37 

38 

39def test_select_dot_where_users_visible(db): 

40 user1, token1 = generate_user() 

41 user2, token2 = generate_user(delete_user=True) 

42 user3, token3 = generate_user() 

43 user4, token4 = generate_user() 

44 

45 make_user_block(user1, user3) 

46 make_user_block(user4, user1) 

47 

48 context = _FakeContext(user1.id) 

49 with session_scope() as session: 

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

51 

52 

53def test_select_dot_where_users_column_visible(db): 

54 user1, token1 = generate_user() 

55 user2, token2 = generate_user() 

56 user3, token3 = generate_user() 

57 user4, token4 = generate_user() 

58 user5, token5 = generate_user() 

59 

60 make_friends(user1, user2) 

61 make_friends(user1, user3) 

62 make_friends(user1, user4) 

63 make_friends(user1, user5) 

64 

65 make_user_invisible(user3.id) 

66 make_user_block(user1, user4) 

67 make_user_block(user5, user1) 

68 

69 context = _FakeContext(user1.id) 

70 with session_scope() as session: 

71 assert ( 

72 session.execute( 

73 where_users_column_visible( 

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

75 ) 

76 ).scalar_one() 

77 == 1 

78 )