mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-06-09 04:32:37 -04:00
Allow selecting "prejoin" events by state keys (#14642)
* Declare new config * Parse new config * Read new config * Don't use trial/our TestCase where it's not needed Before: ``` $ time trial tests/events/test_utils.py > /dev/null real 0m2.277s user 0m2.186s sys 0m0.083s ``` After: ``` $ time trial tests/events/test_utils.py > /dev/null real 0m0.566s user 0m0.508s sys 0m0.056s ``` * Helper to upsert to event fields without exceeding size limits. * Use helper when adding invite/knock state Now that we allow admins to include events in prejoin room state with arbitrary state keys, be a good Matrix citizen and ensure they don't accidentally create an oversized event. * Changelog * Move StateFilter tests should have done this in #14668 * Add extra methods to StateFilter * Use StateFilter * Ensure test file enforces typed defs; alphabetise * Workaround surprising get_current_state_ids * Whoops, fix mypy
This commit is contained in:
parent
3d87847ecc
commit
e2a1adbf5d
14 changed files with 982 additions and 694 deletions
|
@ -12,19 +12,20 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import unittest as stdlib_unittest
|
||||
|
||||
from synapse.api.constants import EventContentFields
|
||||
from synapse.api.room_versions import RoomVersions
|
||||
from synapse.events import make_event_from_dict
|
||||
from synapse.events.utils import (
|
||||
SerializeEventConfig,
|
||||
copy_and_fixup_power_levels_contents,
|
||||
maybe_upsert_event_field,
|
||||
prune_event,
|
||||
serialize_event,
|
||||
)
|
||||
from synapse.util.frozenutils import freeze
|
||||
|
||||
from tests import unittest
|
||||
|
||||
|
||||
def MockEvent(**kwargs):
|
||||
if "event_id" not in kwargs:
|
||||
|
@ -34,7 +35,31 @@ def MockEvent(**kwargs):
|
|||
return make_event_from_dict(kwargs)
|
||||
|
||||
|
||||
class PruneEventTestCase(unittest.TestCase):
|
||||
class TestMaybeUpsertEventField(stdlib_unittest.TestCase):
|
||||
def test_update_okay(self) -> None:
|
||||
event = make_event_from_dict({"event_id": "$1234"})
|
||||
success = maybe_upsert_event_field(event, event.unsigned, "key", "value")
|
||||
self.assertTrue(success)
|
||||
self.assertEqual(event.unsigned["key"], "value")
|
||||
|
||||
def test_update_not_okay(self) -> None:
|
||||
event = make_event_from_dict({"event_id": "$1234"})
|
||||
LARGE_STRING = "a" * 100_000
|
||||
success = maybe_upsert_event_field(event, event.unsigned, "key", LARGE_STRING)
|
||||
self.assertFalse(success)
|
||||
self.assertNotIn("key", event.unsigned)
|
||||
|
||||
def test_update_not_okay_leaves_original_value(self) -> None:
|
||||
event = make_event_from_dict(
|
||||
{"event_id": "$1234", "unsigned": {"key": "value"}}
|
||||
)
|
||||
LARGE_STRING = "a" * 100_000
|
||||
success = maybe_upsert_event_field(event, event.unsigned, "key", LARGE_STRING)
|
||||
self.assertFalse(success)
|
||||
self.assertEqual(event.unsigned["key"], "value")
|
||||
|
||||
|
||||
class PruneEventTestCase(stdlib_unittest.TestCase):
|
||||
def run_test(self, evdict, matchdict, **kwargs):
|
||||
"""
|
||||
Asserts that a new event constructed with `evdict` will look like
|
||||
|
@ -391,7 +416,7 @@ class PruneEventTestCase(unittest.TestCase):
|
|||
)
|
||||
|
||||
|
||||
class SerializeEventTestCase(unittest.TestCase):
|
||||
class SerializeEventTestCase(stdlib_unittest.TestCase):
|
||||
def serialize(self, ev, fields):
|
||||
return serialize_event(
|
||||
ev, 1479807801915, config=SerializeEventConfig(only_event_fields=fields)
|
||||
|
@ -513,7 +538,7 @@ class SerializeEventTestCase(unittest.TestCase):
|
|||
)
|
||||
|
||||
|
||||
class CopyPowerLevelsContentTestCase(unittest.TestCase):
|
||||
class CopyPowerLevelsContentTestCase(stdlib_unittest.TestCase):
|
||||
def setUp(self) -> None:
|
||||
self.test_content = {
|
||||
"ban": 50,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue