mirror of
https://git.anonymousland.org/anonymousland/synapse-product.git
synced 2024-12-24 21:09:23 -05:00
Add basic filtering public API unit tests. Use defers in the right places.
This commit is contained in:
parent
5561a87920
commit
83172487b0
@ -12,6 +12,7 @@
|
|||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
from twisted.internet import defer
|
||||||
|
|
||||||
from synapse.api.errors import SynapseError
|
from synapse.api.errors import SynapseError
|
||||||
from synapse.types import UserID, RoomID
|
from synapse.types import UserID, RoomID
|
||||||
@ -59,19 +60,21 @@ class Filtering(object):
|
|||||||
# replace_user_filter at some point? There's no REST API specified for
|
# replace_user_filter at some point? There's no REST API specified for
|
||||||
# them however
|
# them however
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
def _filter_on_key(self, events, user, filter_id, keys):
|
def _filter_on_key(self, events, user, filter_id, keys):
|
||||||
filter_json = self.get_user_filter(user.localpart, filter_id)
|
filter_json = yield self.get_user_filter(user.localpart, filter_id)
|
||||||
if not filter_json:
|
if not filter_json:
|
||||||
return events
|
defer.returnValue(events)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# extract the right definition from the filter
|
# extract the right definition from the filter
|
||||||
definition = filter_json
|
definition = filter_json
|
||||||
for key in keys:
|
for key in keys:
|
||||||
definition = definition[key]
|
definition = definition[key]
|
||||||
return self._filter_with_definition(events, definition)
|
defer.returnValue(self._filter_with_definition(events, definition))
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return events # return all events if definition isn't specified.
|
# return all events if definition isn't specified.
|
||||||
|
defer.returnValue(events)
|
||||||
|
|
||||||
def _filter_with_definition(self, events, definition):
|
def _filter_with_definition(self, events, definition):
|
||||||
return [e for e in events if self._passes_definition(definition, e)]
|
return [e for e in events if self._passes_definition(definition, e)]
|
||||||
|
@ -24,7 +24,7 @@ from tests.utils import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
from synapse.server import HomeServer
|
from synapse.server import HomeServer
|
||||||
|
from synapse.types import UserID
|
||||||
|
|
||||||
user_localpart = "test_user"
|
user_localpart = "test_user"
|
||||||
MockEvent = namedtuple("MockEvent", "sender type room_id")
|
MockEvent = namedtuple("MockEvent", "sender type room_id")
|
||||||
@ -352,6 +352,58 @@ class FilteringTestCase(unittest.TestCase):
|
|||||||
self.filtering._passes_definition(definition, event)
|
self.filtering._passes_definition(definition, event)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
|
def test_filter_public_user_data_match(self):
|
||||||
|
user_filter = {
|
||||||
|
"public_user_data": {
|
||||||
|
"types": ["m.*"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
user = UserID.from_string("@" + user_localpart + ":test")
|
||||||
|
filter_id = yield self.datastore.add_user_filter(
|
||||||
|
user_localpart=user_localpart,
|
||||||
|
user_filter=user_filter,
|
||||||
|
)
|
||||||
|
event = MockEvent(
|
||||||
|
sender="@foo:bar",
|
||||||
|
type="m.profile",
|
||||||
|
room_id="!foo:bar"
|
||||||
|
)
|
||||||
|
events = [event]
|
||||||
|
|
||||||
|
results = yield self.filtering.filter_public_user_data(
|
||||||
|
events=events,
|
||||||
|
user=user,
|
||||||
|
filter_id=filter_id
|
||||||
|
)
|
||||||
|
self.assertEquals(events, results)
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
|
def test_filter_public_user_data_no_match(self):
|
||||||
|
user_filter = {
|
||||||
|
"public_user_data": {
|
||||||
|
"types": ["m.*"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
user = UserID.from_string("@" + user_localpart + ":test")
|
||||||
|
filter_id = yield self.datastore.add_user_filter(
|
||||||
|
user_localpart=user_localpart,
|
||||||
|
user_filter=user_filter,
|
||||||
|
)
|
||||||
|
event = MockEvent(
|
||||||
|
sender="@foo:bar",
|
||||||
|
type="custom.avatar.3d.crazy",
|
||||||
|
room_id="!foo:bar"
|
||||||
|
)
|
||||||
|
events = [event]
|
||||||
|
|
||||||
|
results = yield self.filtering.filter_public_user_data(
|
||||||
|
events=events,
|
||||||
|
user=user,
|
||||||
|
filter_id=filter_id
|
||||||
|
)
|
||||||
|
self.assertEquals([], results)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def test_add_filter(self):
|
def test_add_filter(self):
|
||||||
user_filter = {
|
user_filter = {
|
||||||
|
Loading…
Reference in New Issue
Block a user