mirror of
				https://github.com/matrix-org/synapse.git
				synced 2025-11-03 21:57:26 +00:00 
			
		
		
		
	Add tests for using _flatten_dict with an event. (#15002)
This commit is contained in:
		
							parent
							
								
									d0fed7a37b
								
							
						
					
					
						commit
						5b55c32d61
					
				
							
								
								
									
										1
									
								
								changelog.d/15002.misc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								changelog.d/15002.misc
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
Add tests for `_flatten_dict`.
 | 
			
		||||
@ -36,7 +36,7 @@ from synapse.api.constants import (
 | 
			
		||||
    Membership,
 | 
			
		||||
    RelationTypes,
 | 
			
		||||
)
 | 
			
		||||
from synapse.api.room_versions import PushRuleRoomFlag, RoomVersion
 | 
			
		||||
from synapse.api.room_versions import PushRuleRoomFlag
 | 
			
		||||
from synapse.event_auth import auth_types_for_event, get_user_power_level
 | 
			
		||||
from synapse.events import EventBase, relation_from_event
 | 
			
		||||
from synapse.events.snapshot import EventContext
 | 
			
		||||
@ -405,7 +405,7 @@ class BulkPushRuleEvaluator:
 | 
			
		||||
            room_mention = mentions.get("room") is True
 | 
			
		||||
 | 
			
		||||
        evaluator = PushRuleEvaluator(
 | 
			
		||||
            _flatten_dict(event, room_version=event.room_version),
 | 
			
		||||
            _flatten_dict(event),
 | 
			
		||||
            has_mentions,
 | 
			
		||||
            user_mentions,
 | 
			
		||||
            room_mention,
 | 
			
		||||
@ -491,7 +491,6 @@ StateGroup = Union[object, int]
 | 
			
		||||
 | 
			
		||||
def _flatten_dict(
 | 
			
		||||
    d: Union[EventBase, Mapping[str, Any]],
 | 
			
		||||
    room_version: Optional[RoomVersion] = None,
 | 
			
		||||
    prefix: Optional[List[str]] = None,
 | 
			
		||||
    result: Optional[Dict[str, str]] = None,
 | 
			
		||||
) -> Dict[str, str]:
 | 
			
		||||
@ -511,7 +510,6 @@ def _flatten_dict(
 | 
			
		||||
 | 
			
		||||
    Args:
 | 
			
		||||
        d: The event or content to continue flattening.
 | 
			
		||||
        room_version: The room version object.
 | 
			
		||||
        prefix: The key prefix (from outer dictionaries).
 | 
			
		||||
        result: The result to mutate.
 | 
			
		||||
 | 
			
		||||
@ -531,14 +529,13 @@ def _flatten_dict(
 | 
			
		||||
 | 
			
		||||
    # `room_version` should only ever be set when looking at the top level of an event
 | 
			
		||||
    if (
 | 
			
		||||
        room_version is not None
 | 
			
		||||
        and PushRuleRoomFlag.EXTENSIBLE_EVENTS in room_version.msc3931_push_features
 | 
			
		||||
        and isinstance(d, EventBase)
 | 
			
		||||
        isinstance(d, EventBase)
 | 
			
		||||
        and PushRuleRoomFlag.EXTENSIBLE_EVENTS in d.room_version.msc3931_push_features
 | 
			
		||||
    ):
 | 
			
		||||
        # Room supports extensible events: replace `content.body` with the plain text
 | 
			
		||||
        # representation from `m.markup`, as per MSC1767.
 | 
			
		||||
        markup = d.get("content").get("m.markup")
 | 
			
		||||
        if room_version.identifier.startswith("org.matrix.msc1767."):
 | 
			
		||||
        if d.room_version.identifier.startswith("org.matrix.msc1767."):
 | 
			
		||||
            markup = d.get("content").get("org.matrix.msc1767.markup")
 | 
			
		||||
        if markup is not None and isinstance(markup, list):
 | 
			
		||||
            text = ""
 | 
			
		||||
 | 
			
		||||
@ -22,7 +22,7 @@ import synapse.rest.admin
 | 
			
		||||
from synapse.api.constants import EventTypes, HistoryVisibility, Membership
 | 
			
		||||
from synapse.api.room_versions import RoomVersions
 | 
			
		||||
from synapse.appservice import ApplicationService
 | 
			
		||||
from synapse.events import FrozenEvent
 | 
			
		||||
from synapse.events import FrozenEvent, make_event_from_dict
 | 
			
		||||
from synapse.push.bulk_push_rule_evaluator import _flatten_dict
 | 
			
		||||
from synapse.push.httppusher import tweaks_for_actions
 | 
			
		||||
from synapse.rest import admin
 | 
			
		||||
@ -60,6 +60,67 @@ class FlattenDictTestCase(unittest.TestCase):
 | 
			
		||||
        }
 | 
			
		||||
        self.assertEqual({"woo": "woo"}, _flatten_dict(input))
 | 
			
		||||
 | 
			
		||||
    def test_event(self) -> None:
 | 
			
		||||
        """Events can also be flattened."""
 | 
			
		||||
        event = make_event_from_dict(
 | 
			
		||||
            {
 | 
			
		||||
                "room_id": "!test:test",
 | 
			
		||||
                "type": "m.room.message",
 | 
			
		||||
                "sender": "@alice:test",
 | 
			
		||||
                "content": {
 | 
			
		||||
                    "msgtype": "m.text",
 | 
			
		||||
                    "body": "Hello world!",
 | 
			
		||||
                    "format": "org.matrix.custom.html",
 | 
			
		||||
                    "formatted_body": "<h1>Hello world!</h1>",
 | 
			
		||||
                },
 | 
			
		||||
            },
 | 
			
		||||
            room_version=RoomVersions.V8,
 | 
			
		||||
        )
 | 
			
		||||
        expected = {
 | 
			
		||||
            "content.msgtype": "m.text",
 | 
			
		||||
            "content.body": "hello world!",
 | 
			
		||||
            "content.format": "org.matrix.custom.html",
 | 
			
		||||
            "content.formatted_body": "<h1>hello world!</h1>",
 | 
			
		||||
            "room_id": "!test:test",
 | 
			
		||||
            "sender": "@alice:test",
 | 
			
		||||
            "type": "m.room.message",
 | 
			
		||||
        }
 | 
			
		||||
        self.assertEqual(expected, _flatten_dict(event))
 | 
			
		||||
 | 
			
		||||
    def test_extensible_events(self) -> None:
 | 
			
		||||
        """Extensible events has compatibility behaviour."""
 | 
			
		||||
        event_dict = {
 | 
			
		||||
            "room_id": "!test:test",
 | 
			
		||||
            "type": "m.room.message",
 | 
			
		||||
            "sender": "@alice:test",
 | 
			
		||||
            "content": {
 | 
			
		||||
                "org.matrix.msc1767.markup": [
 | 
			
		||||
                    {"mimetype": "text/plain", "body": "Hello world!"},
 | 
			
		||||
                    {"mimetype": "text/html", "body": "<h1>Hello world!</h1>"},
 | 
			
		||||
                ]
 | 
			
		||||
            },
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        # For a current room version, there's no special behavior.
 | 
			
		||||
        event = make_event_from_dict(event_dict, room_version=RoomVersions.V8)
 | 
			
		||||
        expected = {
 | 
			
		||||
            "room_id": "!test:test",
 | 
			
		||||
            "sender": "@alice:test",
 | 
			
		||||
            "type": "m.room.message",
 | 
			
		||||
        }
 | 
			
		||||
        self.assertEqual(expected, _flatten_dict(event))
 | 
			
		||||
 | 
			
		||||
        # For a room version with extensible events, they parse out the text/plain
 | 
			
		||||
        # to a content.body property.
 | 
			
		||||
        event = make_event_from_dict(event_dict, room_version=RoomVersions.MSC1767v10)
 | 
			
		||||
        expected = {
 | 
			
		||||
            "content.body": "hello world!",
 | 
			
		||||
            "room_id": "!test:test",
 | 
			
		||||
            "sender": "@alice:test",
 | 
			
		||||
            "type": "m.room.message",
 | 
			
		||||
        }
 | 
			
		||||
        self.assertEqual(expected, _flatten_dict(event))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class PushRuleEvaluatorTestCase(unittest.TestCase):
 | 
			
		||||
    def _get_evaluator(
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user