mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-07-26 23:05:19 -04:00
Implement MSC3827: Filtering of /publicRooms
by room type (#13031)
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
This commit is contained in:
parent
e714b8a057
commit
13e359aec8
11 changed files with 345 additions and 13 deletions
|
@ -12,6 +12,9 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import json
|
||||
|
||||
from synapse.api.constants import RoomTypes
|
||||
from synapse.rest import admin
|
||||
from synapse.rest.client import login, room
|
||||
from synapse.storage.databases.main.room import _BackgroundUpdates
|
||||
|
@ -91,3 +94,69 @@ class RoomBackgroundUpdateStoreTestCase(HomeserverTestCase):
|
|||
)
|
||||
)
|
||||
self.assertEqual(room_creator_after, self.user_id)
|
||||
|
||||
def test_background_add_room_type_column(self):
|
||||
"""Test that the background update to populate the `room_type` column in
|
||||
`room_stats_state` works properly.
|
||||
"""
|
||||
|
||||
# Create a room without a type
|
||||
room_id = self._generate_room()
|
||||
|
||||
# Get event_id of the m.room.create event
|
||||
event_id = self.get_success(
|
||||
self.store.db_pool.simple_select_one_onecol(
|
||||
table="current_state_events",
|
||||
keyvalues={
|
||||
"room_id": room_id,
|
||||
"type": "m.room.create",
|
||||
},
|
||||
retcol="event_id",
|
||||
)
|
||||
)
|
||||
|
||||
# Fake a room creation event with a room type
|
||||
event = {
|
||||
"content": {
|
||||
"creator": "@user:server.org",
|
||||
"room_version": "9",
|
||||
"type": RoomTypes.SPACE,
|
||||
},
|
||||
"type": "m.room.create",
|
||||
}
|
||||
self.get_success(
|
||||
self.store.db_pool.simple_update(
|
||||
table="event_json",
|
||||
keyvalues={"event_id": event_id},
|
||||
updatevalues={"json": json.dumps(event)},
|
||||
desc="test",
|
||||
)
|
||||
)
|
||||
|
||||
# Insert and run the background update
|
||||
self.get_success(
|
||||
self.store.db_pool.simple_insert(
|
||||
"background_updates",
|
||||
{
|
||||
"update_name": _BackgroundUpdates.ADD_ROOM_TYPE_COLUMN,
|
||||
"progress_json": "{}",
|
||||
},
|
||||
)
|
||||
)
|
||||
|
||||
# ... and tell the DataStore that it hasn't finished all updates yet
|
||||
self.store.db_pool.updates._all_done = False
|
||||
|
||||
# Now let's actually drive the updates to completion
|
||||
self.wait_for_background_updates()
|
||||
|
||||
# Make sure the background update filled in the room type
|
||||
room_type_after = self.get_success(
|
||||
self.store.db_pool.simple_select_one_onecol(
|
||||
table="room_stats_state",
|
||||
keyvalues={"room_id": room_id},
|
||||
retcol="room_type",
|
||||
allow_none=True,
|
||||
)
|
||||
)
|
||||
self.assertEqual(room_type_after, RoomTypes.SPACE)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue