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
« 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
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)
16class _FakeContext:
17 def __init__(self, user_id):
18 self.user_id = user_id
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)
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))
34 visible_users = session.execute(select(User.id).where(User.is_visible)).scalars().all()
36 assert visible_users[0] == user1.id
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()
45 make_user_block(user1, user3)
46 make_user_block(user4, user1)
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
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()
60 make_friends(user1, user2)
61 make_friends(user1, user3)
62 make_friends(user1, user4)
63 make_friends(user1, user5)
65 make_user_invisible(user3.id)
66 make_user_block(user1, user4)
67 make_user_block(user5, user1)
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 )