Factor out common code in tests and fix comments. (#14819)

This commit is contained in:
Patrick Cloke 2023-01-11 13:36:41 -05:00 committed by GitHub
parent f4d2a734f9
commit 071f8b0f9b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 64 additions and 36 deletions

1
changelog.d/14819.misc Normal file
View file

@ -0,0 +1 @@
Refactor push tests.

View file

@ -1,3 +1,17 @@
# Copyright 2022 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 Any, Collection, Dict, Mapping, Optional, Sequence, Set, Tuple, Union from typing import Any, Collection, Dict, Mapping, Optional, Sequence, Set, Tuple, Union
from synapse.types import JsonDict from synapse.types import JsonDict

View file

@ -1,10 +1,28 @@
# Copyright 2022 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 unittest.mock import patch from unittest.mock import patch
from twisted.test.proto_helpers import MemoryReactor
from synapse.api.room_versions import RoomVersions from synapse.api.room_versions import RoomVersions
from synapse.push.bulk_push_rule_evaluator import BulkPushRuleEvaluator from synapse.push.bulk_push_rule_evaluator import BulkPushRuleEvaluator
from synapse.rest import admin from synapse.rest import admin
from synapse.rest.client import login, register, room from synapse.rest.client import login, register, room
from synapse.server import HomeServer
from synapse.types import create_requester from synapse.types import create_requester
from synapse.util import Clock
from tests.test_utils import simple_async_mock from tests.test_utils import simple_async_mock
from tests.unittest import HomeserverTestCase, override_config from tests.unittest import HomeserverTestCase, override_config
@ -19,6 +37,20 @@ class TestBulkPushRuleEvaluator(HomeserverTestCase):
register.register_servlets, register.register_servlets,
] ]
def prepare(
self, reactor: MemoryReactor, clock: Clock, homeserver: HomeServer
) -> None:
# Create a new user and room.
self.alice = self.register_user("alice", "pass")
self.token = self.login(self.alice, "pass")
self.requester = create_requester(self.alice)
self.room_id = self.helper.create_room_as(
self.alice, room_version=RoomVersions.V9.identifier, tok=self.token
)
self.event_creation_handler = self.hs.get_event_creation_handler()
def test_action_for_event_by_user_handles_noninteger_power_levels(self) -> None: def test_action_for_event_by_user_handles_noninteger_power_levels(self) -> None:
"""We should convert floats and strings to integers before passing to Rust. """We should convert floats and strings to integers before passing to Rust.
@ -26,46 +58,37 @@ class TestBulkPushRuleEvaluator(HomeserverTestCase):
A lack of validation: the gift that keeps on giving. A lack of validation: the gift that keeps on giving.
""" """
# Create a new user and room.
alice = self.register_user("alice", "pass")
token = self.login(alice, "pass")
room_id = self.helper.create_room_as(
alice, room_version=RoomVersions.V9.identifier, tok=token
)
# Alter the power levels in that room to include stringy and floaty levels. # Alter the power levels in that room to include stringy and floaty levels.
# We need to suppress the validation logic or else it will reject these dodgy # We need to suppress the validation logic or else it will reject these dodgy
# values. (Presumably this validation was not always present.) # values. (Presumably this validation was not always present.)
event_creation_handler = self.hs.get_event_creation_handler()
requester = create_requester(alice)
with patch("synapse.events.validator.validate_canonicaljson"), patch( with patch("synapse.events.validator.validate_canonicaljson"), patch(
"synapse.events.validator.jsonschema.validate" "synapse.events.validator.jsonschema.validate"
): ):
self.helper.send_state( self.helper.send_state(
room_id, self.room_id,
"m.room.power_levels", "m.room.power_levels",
{ {
"users": {alice: "100"}, # stringy "users": {self.alice: "100"}, # stringy
"notifications": {"room": 100.0}, # float "notifications": {"room": 100.0}, # float
}, },
token, self.token,
state_key="", state_key="",
) )
# Create a new message event, and try to evaluate it under the dodgy # Create a new message event, and try to evaluate it under the dodgy
# power level event. # power level event.
event, context = self.get_success( event, context = self.get_success(
event_creation_handler.create_event( self.event_creation_handler.create_event(
requester, self.requester,
{ {
"type": "m.room.message", "type": "m.room.message",
"room_id": room_id, "room_id": self.room_id,
"content": { "content": {
"msgtype": "m.text", "msgtype": "m.text",
"body": "helo", "body": "helo",
}, },
"sender": alice, "sender": self.alice,
}, },
) )
) )
@ -77,39 +100,29 @@ class TestBulkPushRuleEvaluator(HomeserverTestCase):
@override_config({"push": {"enabled": False}}) @override_config({"push": {"enabled": False}})
def test_action_for_event_by_user_disabled_by_config(self) -> None: def test_action_for_event_by_user_disabled_by_config(self) -> None:
"""Ensure that push rules are not calculated when disabled in the config""" """Ensure that push rules are not calculated when disabled in the config"""
# Create a new user and room.
alice = self.register_user("alice", "pass")
token = self.login(alice, "pass")
room_id = self.helper.create_room_as( # Create a new message event which should cause a notification.
alice, room_version=RoomVersions.V9.identifier, tok=token
)
# Alter the power levels in that room to include stringy and floaty levels.
# We need to suppress the validation logic or else it will reject these dodgy
# values. (Presumably this validation was not always present.)
event_creation_handler = self.hs.get_event_creation_handler()
requester = create_requester(alice)
# Create a new message event, and try to evaluate it under the dodgy
# power level event.
event, context = self.get_success( event, context = self.get_success(
event_creation_handler.create_event( self.event_creation_handler.create_event(
requester, self.requester,
{ {
"type": "m.room.message", "type": "m.room.message",
"room_id": room_id, "room_id": self.room_id,
"content": { "content": {
"msgtype": "m.text", "msgtype": "m.text",
"body": "helo", "body": "helo",
}, },
"sender": alice, "sender": self.alice,
}, },
) )
) )
bulk_evaluator = BulkPushRuleEvaluator(self.hs) bulk_evaluator = BulkPushRuleEvaluator(self.hs)
# Mock the method which calculates push rules -- we do this instead of
# e.g. checking the results in the database because we want to ensure
# that code isn't even running.
bulk_evaluator._action_for_event_by_user = simple_async_mock() # type: ignore[assignment] bulk_evaluator._action_for_event_by_user = simple_async_mock() # type: ignore[assignment]
# should not raise
# Ensure no actions are generated!
self.get_success(bulk_evaluator.action_for_events_by_user([(event, context)])) self.get_success(bulk_evaluator.action_for_events_by_user([(event, context)]))
bulk_evaluator._action_for_event_by_user.assert_not_called() bulk_evaluator._action_for_event_by_user.assert_not_called()