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
« prev ^ index » next coverage.py v7.13.2, created at 2026-02-03 06:18 +0000
1from typing import cast
3from sqlalchemy import select, update
4from sqlalchemy.sql import func
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
13class _FakeContext:
14 def __init__(self, user_id):
15 self.user_id = user_id
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)
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))
31 visible_users = session.execute(select(User.id).where(User.is_visible)).scalars().all()
33 assert visible_users[0] == user1.id
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()
42 make_user_block(user1, user3)
43 make_user_block(user4, user1)
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
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()
57 make_friends(user1, user2)
58 make_friends(user1, user3)
59 make_friends(user1, user4)
60 make_friends(user1, user5)
62 make_user_invisible(user3.id)
63 make_user_block(user1, user4)
64 make_user_block(user5, user1)
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 )