|
21 | 21 | import json
|
22 | 22 | import time
|
23 | 23 | import urllib.parse
|
| 24 | +from http import HTTPStatus |
24 | 25 | from typing import List, Optional
|
25 | 26 | from unittest.mock import AsyncMock, Mock
|
26 | 27 |
|
@@ -2190,6 +2191,33 @@ def test_room_messages_purge(self) -> None:
|
2190 | 2191 | chunk = channel.json_body["chunk"]
|
2191 | 2192 | self.assertEqual(len(chunk), 0, [event["content"] for event in chunk])
|
2192 | 2193 |
|
| 2194 | + def test_room_message_filter_query_validation(self) -> None: |
| 2195 | + # Test json validation in (filter) query parameter. |
| 2196 | + # Does not test the validity of the filter, only the json validation. |
| 2197 | + |
| 2198 | + # Check Get with valid json filter parameter, expect 200. |
| 2199 | + valid_filter_str = '{"types": ["m.room.message"]}' |
| 2200 | + channel = self.make_request( |
| 2201 | + "GET", |
| 2202 | + f"/_synapse/admin/v1/rooms/{self.room_id}/messages?dir=b&filter={valid_filter_str}", |
| 2203 | + access_token=self.admin_user_tok, |
| 2204 | + ) |
| 2205 | + |
| 2206 | + self.assertEqual(channel.code, HTTPStatus.OK, channel.json_body) |
| 2207 | + |
| 2208 | + # Check Get with invalid json filter parameter, expect 400 NOT_JSON. |
| 2209 | + invalid_filter_str = "}}}{}" |
| 2210 | + channel = self.make_request( |
| 2211 | + "GET", |
| 2212 | + f"/_synapse/admin/v1/rooms/{self.room_id}/messages?dir=b&filter={invalid_filter_str}", |
| 2213 | + access_token=self.admin_user_tok, |
| 2214 | + ) |
| 2215 | + |
| 2216 | + self.assertEqual(channel.code, HTTPStatus.BAD_REQUEST, channel.json_body) |
| 2217 | + self.assertEqual( |
| 2218 | + channel.json_body["errcode"], Codes.NOT_JSON, channel.json_body |
| 2219 | + ) |
| 2220 | + |
2193 | 2221 |
|
2194 | 2222 | class JoinAliasRoomTestCase(unittest.HomeserverTestCase):
|
2195 | 2223 | servlets = [
|
@@ -2522,6 +2550,39 @@ def test_context_as_admin(self) -> None:
|
2522 | 2550 | else:
|
2523 | 2551 | self.fail("Event %s from events_after not found" % j)
|
2524 | 2552 |
|
| 2553 | + def test_room_event_context_filter_query_validation(self) -> None: |
| 2554 | + # Test json validation in (filter) query parameter. |
| 2555 | + # Does not test the validity of the filter, only the json validation. |
| 2556 | + |
| 2557 | + # Create a user with room and event_id. |
| 2558 | + user_id = self.register_user("test", "test") |
| 2559 | + user_tok = self.login("test", "test") |
| 2560 | + room_id = self.helper.create_room_as(user_id, tok=user_tok) |
| 2561 | + event_id = self.helper.send(room_id, "message 1", tok=user_tok)["event_id"] |
| 2562 | + |
| 2563 | + # Check Get with valid json filter parameter, expect 200. |
| 2564 | + valid_filter_str = '{"types": ["m.room.message"]}' |
| 2565 | + channel = self.make_request( |
| 2566 | + "GET", |
| 2567 | + f"/_synapse/admin/v1/rooms/{room_id}/context/{event_id}?filter={valid_filter_str}", |
| 2568 | + access_token=self.admin_user_tok, |
| 2569 | + ) |
| 2570 | + |
| 2571 | + self.assertEqual(channel.code, HTTPStatus.OK, channel.json_body) |
| 2572 | + |
| 2573 | + # Check Get with invalid json filter parameter, expect 400 NOT_JSON. |
| 2574 | + invalid_filter_str = "}}}{}" |
| 2575 | + channel = self.make_request( |
| 2576 | + "GET", |
| 2577 | + f"/_synapse/admin/v1/rooms/{room_id}/context/{event_id}?filter={invalid_filter_str}", |
| 2578 | + access_token=self.admin_user_tok, |
| 2579 | + ) |
| 2580 | + |
| 2581 | + self.assertEqual(channel.code, HTTPStatus.BAD_REQUEST, channel.json_body) |
| 2582 | + self.assertEqual( |
| 2583 | + channel.json_body["errcode"], Codes.NOT_JSON, channel.json_body |
| 2584 | + ) |
| 2585 | + |
2525 | 2586 |
|
2526 | 2587 | class MakeRoomAdminTestCase(unittest.HomeserverTestCase):
|
2527 | 2588 | servlets = [
|
|
0 commit comments