Skip to content

Commit 2af06ca

Browse files
author
Eugene
authored
[CHAT-2693] Add flag reports api (#91)
* [CHAT-2693] Add flag reports api * Fix typing * Mark methods as private * Include user_id in _query_flag_reports * Fix lint * Remove user_id from query_flag_reports
1 parent 20a79b4 commit 2af06ca

File tree

4 files changed

+128
-0
lines changed

4 files changed

+128
-0
lines changed

stream_chat/async_chat/client.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,30 @@ async def unflag_user(self, target_id: str, **options: Any) -> StreamResponse:
190190
data = {"target_user_id": target_id, **options}
191191
return await self.post("moderation/unflag", data=data)
192192

193+
async def _query_flag_reports(self, **options: Any) -> StreamResponse:
194+
"""
195+
Note: Do not use this.
196+
It is present for internal usage only.
197+
This function can, and will, break and/or be removed at any point in time.
198+
"""
199+
data = {"filter_conditions": options}
200+
return await self.post("moderation/reports", data=data)
201+
202+
async def _review_flag_report(
203+
self, report_id: int, review_result: str, user_id: str, **details: Any
204+
) -> StreamResponse:
205+
"""
206+
Note: Do not use this.
207+
It is present for internal usage only.
208+
This function can, and will, break and/or be removed at any point in time.
209+
"""
210+
data = {
211+
"review_result": review_result,
212+
"user_id": user_id,
213+
"review_details": details,
214+
}
215+
return await self.patch(f"moderation/reports/{report_id}", data=data)
216+
193217
async def mute_user(
194218
self, target_id: str, user_id: str, **options: Any
195219
) -> StreamResponse:

stream_chat/client.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,30 @@ def unflag_user(self, target_id: str, **options: Any) -> StreamResponse:
175175
data = {"target_user_id": target_id, **options}
176176
return self.post("moderation/unflag", data=data)
177177

178+
def _query_flag_reports(self, **options: Any) -> StreamResponse:
179+
"""
180+
Note: Do not use this.
181+
It is present for internal usage only.
182+
This function can, and will, break and/or be removed at any point in time.
183+
"""
184+
data = {"filter_conditions": options}
185+
return self.post("moderation/reports", data=data)
186+
187+
def _review_flag_report(
188+
self, report_id: int, review_result: str, user_id: str, **details: Any
189+
) -> StreamResponse:
190+
"""
191+
Note: Do not use this.
192+
It is present for internal usage only.
193+
This function can, and will, break and/or be removed at any point in time.
194+
"""
195+
data = {
196+
"review_result": review_result,
197+
"user_id": user_id,
198+
"review_details": details,
199+
}
200+
return self.patch(f"moderation/reports/{report_id}", data=data)
201+
178202
def mute_user(self, target_id: str, user_id: str, **options: Any) -> StreamResponse:
179203
data = {"target_id": target_id, "user_id": user_id, **options}
180204
return self.post("moderation/mute", data=data)

stream_chat/tests/async_chat/test_client.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,46 @@ async def test_unflag_message(
363363
await client.flag_message(msg_id, user_id=server_user["id"])
364364
await client.unflag_message(msg_id, user_id=server_user["id"])
365365

366+
@pytest.mark.asyncio
367+
async def test_query_flag_reports(
368+
self, client: StreamChatAsync, channel, random_user, server_user: Dict
369+
):
370+
msg = {"id": str(uuid.uuid4()), "text": "hello world"}
371+
await channel.send_message(msg, random_user["id"])
372+
await client.flag_message(msg["id"], user_id=server_user["id"])
373+
374+
response = await client._query_flag_reports(message_id=msg["id"])
375+
report = response["flag_reports"][0]
376+
377+
assert report["id"] is not None
378+
assert report["message"]["id"] == msg["id"]
379+
assert report["message"]["text"] == msg["text"]
380+
381+
@pytest.mark.asyncio
382+
async def test_review_flag_report(
383+
self, client: StreamChatAsync, channel, random_user, server_user: Dict
384+
):
385+
msg = {"id": str(uuid.uuid4()), "text": "hello world"}
386+
await channel.send_message(msg, random_user["id"])
387+
await client.flag_message(msg["id"], user_id=server_user["id"])
388+
389+
response = await client._query_flag_reports(message_id=msg["id"])
390+
response = await client._review_flag_report(
391+
report_id=response["flag_reports"][0]["id"],
392+
review_result="reviewed",
393+
user_id=random_user["id"],
394+
custom="reason_a",
395+
)
396+
397+
report = response["flag_report"]
398+
399+
assert report["id"] is not None
400+
assert report["message"]["id"] == msg["id"]
401+
assert report["message"]["text"] == msg["text"]
402+
403+
assert report["review_result"] == "reviewed"
404+
assert report["review_details"]["custom"] == "reason_a"
405+
366406
@pytest.mark.asyncio
367407
async def test_query_users_young_hobbits(
368408
self, client: StreamChatAsync, fellowship_of_the_ring

stream_chat/tests/test_client.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,46 @@ def test_unflag_user(self, client: StreamChat, random_user, server_user: Dict):
213213
client.flag_user(random_user["id"], user_id=server_user["id"])
214214
client.unflag_user(random_user["id"], user_id=server_user["id"])
215215

216+
def test_query_flag_reports(
217+
self, client: StreamChat, channel, random_user, server_user: Dict
218+
):
219+
msg = {"id": str(uuid.uuid4()), "text": "hello world"}
220+
channel.send_message(msg, random_user["id"])
221+
client.flag_message(msg["id"], user_id=server_user["id"])
222+
223+
response = client._query_flag_reports(message_id=msg["id"])
224+
225+
assert len(response["flag_reports"]) == 1
226+
227+
report = response["flag_reports"][0]
228+
assert report["id"] is not None
229+
assert report["message"]["id"] == msg["id"]
230+
assert report["message"]["text"] == msg["text"]
231+
232+
def test_review_flag_report(
233+
self, client: StreamChat, channel, random_user, server_user: Dict
234+
):
235+
msg = {"id": str(uuid.uuid4()), "text": "hello world"}
236+
channel.send_message(msg, random_user["id"])
237+
client.flag_message(msg["id"], user_id=server_user["id"])
238+
239+
response = client._query_flag_reports(message_id=msg["id"])
240+
response = client._review_flag_report(
241+
report_id=response["flag_reports"][0]["id"],
242+
review_result="reviewed",
243+
user_id=random_user["id"],
244+
custom="reason_a",
245+
)
246+
247+
report = response["flag_report"]
248+
249+
assert report["id"] is not None
250+
assert report["message"]["id"] == msg["id"]
251+
assert report["message"]["text"] == msg["text"]
252+
253+
assert report["review_result"] == "reviewed"
254+
assert report["review_details"]["custom"] == "reason_a"
255+
216256
def test_mark_all_read(self, client: StreamChat, random_user: Dict):
217257
client.mark_all_read(random_user["id"])
218258

0 commit comments

Comments
 (0)