mirror of
				https://github.com/matrix-org/synapse.git
				synced 2025-11-04 10:11:05 +01:00 
			
		
		
		
	This caused `prev_state_ids` to be incorrect if the state event was not replacing an existing state entry.
		
			
				
	
	
		
			111 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# -*- coding: utf-8 -*-
 | 
						|
# Copyright 2018 New Vector Ltd
 | 
						|
# Copyright 2020 The Matrix.org Foundation C.I.C
 | 
						|
#
 | 
						|
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
# you may not use this file except in compliance with the License.
 | 
						|
# You may obtain a copy of the License at
 | 
						|
#
 | 
						|
#     http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
#
 | 
						|
# Unless required by applicable law or agreed to in writing, software
 | 
						|
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
# See the License for the specific language governing permissions and
 | 
						|
# limitations under the License.
 | 
						|
 | 
						|
from typing import Optional, Tuple
 | 
						|
 | 
						|
import synapse.server
 | 
						|
from synapse.api.constants import EventTypes
 | 
						|
from synapse.api.room_versions import KNOWN_ROOM_VERSIONS
 | 
						|
from synapse.events import EventBase
 | 
						|
from synapse.events.snapshot import EventContext
 | 
						|
from synapse.types import Collection
 | 
						|
 | 
						|
from tests.test_utils import get_awaitable_result
 | 
						|
 | 
						|
 | 
						|
"""
 | 
						|
Utility functions for poking events into the storage of the server under test.
 | 
						|
"""
 | 
						|
 | 
						|
 | 
						|
def inject_member_event(
 | 
						|
    hs: synapse.server.HomeServer,
 | 
						|
    room_id: str,
 | 
						|
    sender: str,
 | 
						|
    membership: str,
 | 
						|
    target: Optional[str] = None,
 | 
						|
    extra_content: Optional[dict] = None,
 | 
						|
    **kwargs
 | 
						|
) -> EventBase:
 | 
						|
    """Inject a membership event into a room."""
 | 
						|
    if target is None:
 | 
						|
        target = sender
 | 
						|
 | 
						|
    content = {"membership": membership}
 | 
						|
    if extra_content:
 | 
						|
        content.update(extra_content)
 | 
						|
 | 
						|
    return inject_event(
 | 
						|
        hs,
 | 
						|
        room_id=room_id,
 | 
						|
        type=EventTypes.Member,
 | 
						|
        sender=sender,
 | 
						|
        state_key=target,
 | 
						|
        content=content,
 | 
						|
        **kwargs
 | 
						|
    )
 | 
						|
 | 
						|
 | 
						|
def inject_event(
 | 
						|
    hs: synapse.server.HomeServer,
 | 
						|
    room_version: Optional[str] = None,
 | 
						|
    prev_event_ids: Optional[Collection[str]] = None,
 | 
						|
    **kwargs
 | 
						|
) -> EventBase:
 | 
						|
    """Inject a generic event into a room
 | 
						|
 | 
						|
    Args:
 | 
						|
        hs: the homeserver under test
 | 
						|
        room_version: the version of the room we're inserting into.
 | 
						|
            if not specified, will be looked up
 | 
						|
        prev_event_ids: prev_events for the event. If not specified, will be looked up
 | 
						|
        kwargs: fields for the event to be created
 | 
						|
    """
 | 
						|
    test_reactor = hs.get_reactor()
 | 
						|
 | 
						|
    event, context = create_event(hs, room_version, prev_event_ids, **kwargs)
 | 
						|
 | 
						|
    d = hs.get_storage().persistence.persist_event(event, context)
 | 
						|
    test_reactor.advance(0)
 | 
						|
    get_awaitable_result(d)
 | 
						|
 | 
						|
    return event
 | 
						|
 | 
						|
 | 
						|
def create_event(
 | 
						|
    hs: synapse.server.HomeServer,
 | 
						|
    room_version: Optional[str] = None,
 | 
						|
    prev_event_ids: Optional[Collection[str]] = None,
 | 
						|
    **kwargs
 | 
						|
) -> Tuple[EventBase, EventContext]:
 | 
						|
    test_reactor = hs.get_reactor()
 | 
						|
 | 
						|
    if room_version is None:
 | 
						|
        d = hs.get_datastore().get_room_version_id(kwargs["room_id"])
 | 
						|
        test_reactor.advance(0)
 | 
						|
        room_version = get_awaitable_result(d)
 | 
						|
 | 
						|
    builder = hs.get_event_builder_factory().for_room_version(
 | 
						|
        KNOWN_ROOM_VERSIONS[room_version], kwargs
 | 
						|
    )
 | 
						|
    d = hs.get_event_creation_handler().create_new_client_event(
 | 
						|
        builder, prev_event_ids=prev_event_ids
 | 
						|
    )
 | 
						|
    test_reactor.advance(0)
 | 
						|
    event, context = get_awaitable_result(d)
 | 
						|
 | 
						|
    return event, context
 |