Coverage for src/tests/test_discussions.py: 100%
76 statements
« prev ^ index » next coverage.py v7.6.10, created at 2025-03-11 15:27 +0000
« prev ^ index » next coverage.py v7.6.10, created at 2025-03-11 15:27 +0000
1import grpc
2import pytest
4from couchers import errors
5from couchers.db import session_scope
6from couchers.utils import now, to_aware_datetime
7from proto import discussions_pb2, notifications_pb2
8from tests.test_communities import create_community, create_group
9from tests.test_fixtures import ( # noqa
10 db,
11 discussions_session,
12 generate_user,
13 notifications_session,
14 process_jobs,
15 push_collector,
16 testconfig,
17)
20@pytest.fixture(autouse=True)
21def _(testconfig):
22 pass
25def test_create_discussion_errors(db):
26 user, token = generate_user()
27 with discussions_session(token) as api:
28 with pytest.raises(grpc.RpcError) as e:
29 api.CreateDiscussion(
30 discussions_pb2.CreateDiscussionReq(
31 title=None,
32 content="dummy content",
33 )
34 )
35 assert e.value.code() == grpc.StatusCode.INVALID_ARGUMENT
36 assert e.value.details() == errors.MISSING_DISCUSSION_TITLE
38 with discussions_session(token) as api:
39 with pytest.raises(grpc.RpcError) as e:
40 api.CreateDiscussion(
41 discussions_pb2.CreateDiscussionReq(
42 title="dummy title",
43 content=None,
44 )
45 )
46 assert e.value.code() == grpc.StatusCode.INVALID_ARGUMENT
47 assert e.value.details() == errors.MISSING_DISCUSSION_CONTENT
50def test_create_and_get_discussion(db, push_collector):
51 generate_user()
52 user, token = generate_user()
53 user2, token2 = generate_user()
54 generate_user()
55 generate_user()
57 with notifications_session(token2) as notifications:
58 notifications.SetNotificationSettings(
59 notifications_pb2.SetNotificationSettingsReq(
60 preferences=[
61 notifications_pb2.SingleNotificationPreference(
62 topic="discussion",
63 action="create",
64 delivery_method="push",
65 enabled=True,
66 )
67 ],
68 )
69 )
71 with session_scope() as session:
72 community = create_community(session, 0, 1, "Testing Community", [user2], [], None)
73 group_id = create_group(session, "Testing Group", [user2], [], community).id
74 community_id = community.id
75 user2_id = user2.id
77 with discussions_session(token) as api:
78 time_before_create = now()
79 res = api.CreateDiscussion(
80 discussions_pb2.CreateDiscussionReq(
81 title="dummy title",
82 content="dummy content",
83 owner_community_id=community_id,
84 )
85 )
86 time_after_create = now()
88 assert res.title == "dummy title"
89 assert res.content == "dummy content"
90 assert res.slug == "dummy-title"
91 assert time_before_create <= to_aware_datetime(res.created) <= time_after_create
92 assert res.creator_user_id == user.id
93 assert res.owner_community_id == community_id
95 discussion_id = res.discussion_id
97 process_jobs()
99 push_collector.assert_user_has_single_matching(
100 user2_id,
101 title="dummy title",
102 body=f"{user.name} created a discussion in Testing Community: dummy title\n\ndummy content",
103 )
105 with discussions_session(token) as api:
106 res = api.GetDiscussion(
107 discussions_pb2.GetDiscussionReq(
108 discussion_id=discussion_id,
109 )
110 )
112 assert res.title == "dummy title"
113 assert res.content == "dummy content"
114 assert res.slug == "dummy-title"
115 assert time_before_create <= to_aware_datetime(res.created) <= time_after_create
116 assert res.creator_user_id == user.id
117 assert res.owner_community_id == community_id
119 with discussions_session(token) as api:
120 time_before_create = now()
121 res = api.CreateDiscussion(
122 discussions_pb2.CreateDiscussionReq(
123 title="dummy title",
124 content="dummy content",
125 owner_group_id=group_id,
126 )
127 )
128 time_after_create = now()
130 assert res.title == "dummy title"
131 assert res.content == "dummy content"
132 assert res.slug == "dummy-title"
133 assert time_before_create <= to_aware_datetime(res.created) <= time_after_create
134 assert res.creator_user_id == user.id
135 assert res.owner_group_id == group_id
137 discussion_id = res.discussion_id
139 with discussions_session(token) as api:
140 res = api.GetDiscussion(
141 discussions_pb2.GetDiscussionReq(
142 discussion_id=discussion_id,
143 )
144 )
146 assert res.title == "dummy title"
147 assert res.content == "dummy content"
148 assert res.slug == "dummy-title"
149 assert time_before_create <= to_aware_datetime(res.created) <= time_after_create
150 assert res.creator_user_id == user.id
151 assert res.owner_group_id == group_id