@ -1080,48 +1080,6 @@ class BundledAggregationsTestCase(BaseRelationsTestCase):
]
]
assert_bundle ( self . _find_event_in_chunk ( chunk ) )
assert_bundle ( self . _find_event_in_chunk ( chunk ) )
def test_annotation ( self ) - > None :
"""
Test that annotations get correctly bundled .
"""
# Setup by sending a variety of relations.
self . _send_relation ( RelationTypes . ANNOTATION , " m.reaction " , " a " )
self . _send_relation (
RelationTypes . ANNOTATION , " m.reaction " , " a " , access_token = self . user2_token
)
self . _send_relation ( RelationTypes . ANNOTATION , " m.reaction " , " b " )
def assert_annotations ( bundled_aggregations : JsonDict ) - > None :
self . assertEqual (
{
" chunk " : [
{ " type " : " m.reaction " , " key " : " a " , " count " : 2 } ,
{ " type " : " m.reaction " , " key " : " b " , " count " : 1 } ,
]
} ,
bundled_aggregations ,
)
self . _test_bundled_aggregations ( RelationTypes . ANNOTATION , assert_annotations , 7 )
def test_annotation_to_annotation ( self ) - > None :
""" Any relation to an annotation should be ignored. """
channel = self . _send_relation ( RelationTypes . ANNOTATION , " m.reaction " , " a " )
event_id = channel . json_body [ " event_id " ]
self . _send_relation (
RelationTypes . ANNOTATION , " m.reaction " , " b " , parent_id = event_id
)
# Fetch the initial annotation event to see if it has bundled aggregations.
channel = self . make_request (
" GET " ,
f " /_matrix/client/v3/rooms/ { self . room } /event/ { event_id } " ,
access_token = self . user_token ,
)
self . assertEquals ( 200 , channel . code , channel . json_body )
# The first annotationt should not have any bundled aggregations.
self . assertNotIn ( " m.relations " , channel . json_body [ " unsigned " ] )
def test_reference ( self ) - > None :
def test_reference ( self ) - > None :
"""
"""
Test that references get correctly bundled .
Test that references get correctly bundled .
@ -1138,7 +1096,7 @@ class BundledAggregationsTestCase(BaseRelationsTestCase):
bundled_aggregations ,
bundled_aggregations ,
)
)
self . _test_bundled_aggregations ( RelationTypes . REFERENCE , assert_annotations , 7 )
self . _test_bundled_aggregations ( RelationTypes . REFERENCE , assert_annotations , 6 )
def test_thread ( self ) - > None :
def test_thread ( self ) - > None :
"""
"""
@ -1183,7 +1141,7 @@ class BundledAggregationsTestCase(BaseRelationsTestCase):
# The "user" sent the root event and is making queries for the bundled
# The "user" sent the root event and is making queries for the bundled
# aggregations: they have participated.
# aggregations: they have participated.
self . _test_bundled_aggregations ( RelationTypes . THREAD , _gen_assert ( True ) , 7 )
self . _test_bundled_aggregations ( RelationTypes . THREAD , _gen_assert ( True ) , 6 )
# The "user2" sent replies in the thread and is making queries for the
# The "user2" sent replies in the thread and is making queries for the
# bundled aggregations: they have participated.
# bundled aggregations: they have participated.
#
#
@ -1208,9 +1166,10 @@ class BundledAggregationsTestCase(BaseRelationsTestCase):
channel = self . _send_relation ( RelationTypes . THREAD , " m.room.test " )
channel = self . _send_relation ( RelationTypes . THREAD , " m.room.test " )
thread_2 = channel . json_body [ " event_id " ]
thread_2 = channel . json_body [ " event_id " ]
self . _send_relation (
channel = self . _send_relation (
RelationTypes . ANNOTATION , " m.reaction " , " a " , parent_id = thread_2
RelationTypes . REFERENCE , " org.matrix.test " , parent_id = thread_2
)
)
reference_event_id = channel . json_body [ " event_id " ]
def assert_thread ( bundled_aggregations : JsonDict ) - > None :
def assert_thread ( bundled_aggregations : JsonDict ) - > None :
self . assertEqual ( 2 , bundled_aggregations . get ( " count " ) )
self . assertEqual ( 2 , bundled_aggregations . get ( " count " ) )
@ -1235,17 +1194,15 @@ class BundledAggregationsTestCase(BaseRelationsTestCase):
self . assert_dict (
self . assert_dict (
{
{
" m.relations " : {
" m.relations " : {
RelationTypes . ANNOTATION : {
RelationTypes . REFERENCE : {
" chunk " : [
" chunk " : [ { " event_id " : reference_event_id } ]
{ " type " : " m.reaction " , " key " : " a " , " count " : 1 } ,
]
} ,
} ,
}
}
} ,
} ,
bundled_aggregations [ " latest_event " ] . get ( " unsigned " ) ,
bundled_aggregations [ " latest_event " ] . get ( " unsigned " ) ,
)
)
self . _test_bundled_aggregations ( RelationTypes . THREAD , assert_thread , 7 )
self . _test_bundled_aggregations ( RelationTypes . THREAD , assert_thread , 6 )
def test_nested_thread ( self ) - > None :
def test_nested_thread ( self ) - > None :
"""
"""
@ -1363,10 +1320,11 @@ class BundledAggregationsTestCase(BaseRelationsTestCase):
channel = self . _send_relation ( RelationTypes . THREAD , " m.room.test " )
channel = self . _send_relation ( RelationTypes . THREAD , " m.room.test " )
thread_id = channel . json_body [ " event_id " ]
thread_id = channel . json_body [ " event_id " ]
# Annotate the thread.
# Make a reference to the thread.
self . _send_relation (
channel = self . _send_relation (
RelationTypes . ANNOTATION , " m.reaction " , " a " , parent_id = thread_id
RelationTypes . REFERENCE , " org.matrix.test " , parent_id = thread_id
)
)
reference_event_id = channel . json_body [ " event_id " ]
channel = self . make_request (
channel = self . make_request (
" GET " ,
" GET " ,
@ -1377,9 +1335,7 @@ class BundledAggregationsTestCase(BaseRelationsTestCase):
self . assertEqual (
self . assertEqual (
channel . json_body [ " unsigned " ] . get ( " m.relations " ) ,
channel . json_body [ " unsigned " ] . get ( " m.relations " ) ,
{
{
RelationTypes . ANNOTATION : {
RelationTypes . REFERENCE : { " chunk " : [ { " event_id " : reference_event_id } ] } ,
" chunk " : [ { " count " : 1 , " key " : " a " , " type " : " m.reaction " } ]
} ,
} ,
} ,
)
)
@ -1396,9 +1352,7 @@ class BundledAggregationsTestCase(BaseRelationsTestCase):
self . assertEqual (
self . assertEqual (
thread_message [ " unsigned " ] . get ( " m.relations " ) ,
thread_message [ " unsigned " ] . get ( " m.relations " ) ,
{
{
RelationTypes . ANNOTATION : {
RelationTypes . REFERENCE : { " chunk " : [ { " event_id " : reference_event_id } ] } ,
" chunk " : [ { " count " : 1 , " key " : " a " , " type " : " m.reaction " } ]
} ,
} ,
} ,
)
)
@ -1410,7 +1364,8 @@ class BundledAggregationsTestCase(BaseRelationsTestCase):
Note that the spec allows for a server to return additional fields beyond
Note that the spec allows for a server to return additional fields beyond
what is specified .
what is specified .
"""
"""
self . _send_relation ( RelationTypes . ANNOTATION , " m.reaction " , " a " )
channel = self . _send_relation ( RelationTypes . REFERENCE , " org.matrix.test " )
reference_event_id = channel . json_body [ " event_id " ]
# Note that the sync filter does not include "unsigned" as a field.
# Note that the sync filter does not include "unsigned" as a field.
filter = urllib . parse . quote_plus (
filter = urllib . parse . quote_plus (
@ -1428,7 +1383,12 @@ class BundledAggregationsTestCase(BaseRelationsTestCase):
# Ensure there's bundled aggregations on it.
# Ensure there's bundled aggregations on it.
self . assertIn ( " unsigned " , parent_event )
self . assertIn ( " unsigned " , parent_event )
self . assertIn ( " m.relations " , parent_event [ " unsigned " ] )
self . assertEqual (
parent_event [ " unsigned " ] . get ( " m.relations " ) ,
{
RelationTypes . REFERENCE : { " chunk " : [ { " event_id " : reference_event_id } ] } ,
} ,
)
class RelationIgnoredUserTestCase ( BaseRelationsTestCase ) :
class RelationIgnoredUserTestCase ( BaseRelationsTestCase ) :
@ -1475,53 +1435,8 @@ class RelationIgnoredUserTestCase(BaseRelationsTestCase):
return before_aggregations [ relation_type ] , after_aggregations [ relation_type ]
return before_aggregations [ relation_type ] , after_aggregations [ relation_type ]
def test_annotation ( self ) - > None :
""" Annotations should ignore """
# Send 2 from us, 2 from the to be ignored user.
allowed_event_ids = [ ]
ignored_event_ids = [ ]
channel = self . _send_relation ( RelationTypes . ANNOTATION , " m.reaction " , key = " a " )
allowed_event_ids . append ( channel . json_body [ " event_id " ] )
channel = self . _send_relation ( RelationTypes . ANNOTATION , " m.reaction " , key = " b " )
allowed_event_ids . append ( channel . json_body [ " event_id " ] )
channel = self . _send_relation (
RelationTypes . ANNOTATION ,
" m.reaction " ,
key = " a " ,
access_token = self . user2_token ,
)
ignored_event_ids . append ( channel . json_body [ " event_id " ] )
channel = self . _send_relation (
RelationTypes . ANNOTATION ,
" m.reaction " ,
key = " c " ,
access_token = self . user2_token ,
)
ignored_event_ids . append ( channel . json_body [ " event_id " ] )
before_aggregations , after_aggregations = self . _test_ignored_user (
RelationTypes . ANNOTATION , allowed_event_ids , ignored_event_ids
)
self . assertCountEqual (
before_aggregations [ " chunk " ] ,
[
{ " type " : " m.reaction " , " key " : " a " , " count " : 2 } ,
{ " type " : " m.reaction " , " key " : " b " , " count " : 1 } ,
{ " type " : " m.reaction " , " key " : " c " , " count " : 1 } ,
] ,
)
self . assertCountEqual (
after_aggregations [ " chunk " ] ,
[
{ " type " : " m.reaction " , " key " : " a " , " count " : 1 } ,
{ " type " : " m.reaction " , " key " : " b " , " count " : 1 } ,
] ,
)
def test_reference ( self ) - > None :
def test_reference ( self ) - > None :
""" Annotations should ignore """
""" Aggregations should exclude reference relations from ignored users """
channel = self . _send_relation ( RelationTypes . REFERENCE , " m.room.test " )
channel = self . _send_relation ( RelationTypes . REFERENCE , " m.room.test " )
allowed_event_ids = [ channel . json_body [ " event_id " ] ]
allowed_event_ids = [ channel . json_body [ " event_id " ] ]
@ -1544,7 +1459,7 @@ class RelationIgnoredUserTestCase(BaseRelationsTestCase):
)
)
def test_thread ( self ) - > None :
def test_thread ( self ) - > None :
""" Annotations should ignore """
""" Aggregations should exclude thread releations from ignored users """
channel = self . _send_relation ( RelationTypes . THREAD , " m.room.test " )
channel = self . _send_relation ( RelationTypes . THREAD , " m.room.test " )
allowed_event_ids = [ channel . json_body [ " event_id " ] ]
allowed_event_ids = [ channel . json_body [ " event_id " ] ]
@ -1618,43 +1533,6 @@ class RelationRedactionTestCase(BaseRelationsTestCase):
for t in threads
for t in threads
]
]
def test_redact_relation_annotation ( self ) - > None :
"""
Test that annotations of an event are properly handled after the
annotation is redacted .
The redacted relation should not be included in bundled aggregations or
the response to relations .
"""
channel = self . _send_relation ( RelationTypes . ANNOTATION , " m.reaction " , " a " )
to_redact_event_id = channel . json_body [ " event_id " ]
channel = self . _send_relation (
RelationTypes . ANNOTATION , " m.reaction " , " a " , access_token = self . user2_token
)
unredacted_event_id = channel . json_body [ " event_id " ]
# Both relations should exist.
event_ids = self . _get_related_events ( )
relations = self . _get_bundled_aggregations ( )
self . assertCountEqual ( event_ids , [ to_redact_event_id , unredacted_event_id ] )
self . assertEquals (
relations [ " m.annotation " ] ,
{ " chunk " : [ { " type " : " m.reaction " , " key " : " a " , " count " : 2 } ] } ,
)
# Redact one of the reactions.
self . _redact ( to_redact_event_id )
# The unredacted relation should still exist.
event_ids = self . _get_related_events ( )
relations = self . _get_bundled_aggregations ( )
self . assertEquals ( event_ids , [ unredacted_event_id ] )
self . assertEquals (
relations [ " m.annotation " ] ,
{ " chunk " : [ { " type " : " m.reaction " , " key " : " a " , " count " : 1 } ] } ,
)
def test_redact_relation_thread ( self ) - > None :
def test_redact_relation_thread ( self ) - > None :
"""
"""
Test that thread replies are properly handled after the thread reply redacted .
Test that thread replies are properly handled after the thread reply redacted .
@ -1775,14 +1653,14 @@ class RelationRedactionTestCase(BaseRelationsTestCase):
is redacted .
is redacted .
"""
"""
# Add a relation
# Add a relation
channel = self . _send_relation ( RelationTypes . ANNOTATION , " m.reaction " , key = " 👍 " )
channel = self . _send_relation ( RelationTypes . REFERENCE , " org.matrix.test " )
related_event_id = channel . json_body [ " event_id " ]
related_event_id = channel . json_body [ " event_id " ]
# The relations should exist.
# The relations should exist.
event_ids = self . _get_related_events ( )
event_ids = self . _get_related_events ( )
relations = self . _get_bundled_aggregations ( )
relations = self . _get_bundled_aggregations ( )
self . assertEqual ( len ( event_ids ) , 1 )
self . assertEqual ( len ( event_ids ) , 1 )
self . assertIn ( RelationTypes . ANNOTATION , relations )
self . assertIn ( RelationTypes . REFERENCE , relations )
# Redact the original event.
# Redact the original event.
self . _redact ( self . parent_id )
self . _redact ( self . parent_id )
@ -1792,8 +1670,8 @@ class RelationRedactionTestCase(BaseRelationsTestCase):
relations = self . _get_bundled_aggregations ( )
relations = self . _get_bundled_aggregations ( )
self . assertEquals ( event_ids , [ related_event_id ] )
self . assertEquals ( event_ids , [ related_event_id ] )
self . assertEquals (
self . assertEquals (
relations [ " m.annotation " ] ,
relations [ RelationTypes . REFERENCE ] ,
{ " chunk " : [ { " type " : " m.reaction " , " key " : " 👍 " , " count " : 1 } ] } ,
{ " chunk " : [ { " event_id " : related_event_id } ] } ,
)
)
def test_redact_parent_thread ( self ) - > None :
def test_redact_parent_thread ( self ) - > None :