|
|
@@ -312,6 +312,166 @@ class ProfileTestCase(unittest.HomeserverTestCase): |
|
|
|
) |
|
|
|
self.assertEqual(channel.code, 200, channel.result) |
|
|
|
|
|
|
|
@unittest.override_config( |
|
|
|
{"experimental_features": {"msc4069_profile_inhibit_propagation": True}} |
|
|
|
) |
|
|
|
def test_msc4069_inhibit_propagation(self) -> None: |
|
|
|
"""Tests to ensure profile update propagation can be inhibited.""" |
|
|
|
for prop in ["avatar_url", "displayname"]: |
|
|
|
room_id = self.helper.create_room_as(tok=self.owner_tok) |
|
|
|
|
|
|
|
channel = self.make_request( |
|
|
|
"PUT", |
|
|
|
f"/rooms/{room_id}/state/m.room.member/{self.owner}", |
|
|
|
content={"membership": "join", prop: "mxc://my.server/existing"}, |
|
|
|
access_token=self.owner_tok, |
|
|
|
) |
|
|
|
self.assertEqual(channel.code, 200, channel.result) |
|
|
|
|
|
|
|
channel = self.make_request( |
|
|
|
"PUT", |
|
|
|
f"/profile/{self.owner}/{prop}?org.matrix.msc4069.propagate=false", |
|
|
|
content={prop: "http://my.server/pic.gif"}, |
|
|
|
access_token=self.owner_tok, |
|
|
|
) |
|
|
|
self.assertEqual(channel.code, 200, channel.result) |
|
|
|
|
|
|
|
res = ( |
|
|
|
self._get_avatar_url() |
|
|
|
if prop == "avatar_url" |
|
|
|
else self._get_displayname() |
|
|
|
) |
|
|
|
self.assertEqual(res, "http://my.server/pic.gif") |
|
|
|
|
|
|
|
channel = self.make_request( |
|
|
|
"GET", |
|
|
|
f"/rooms/{room_id}/state/m.room.member/{self.owner}", |
|
|
|
access_token=self.owner_tok, |
|
|
|
) |
|
|
|
self.assertEqual(channel.code, 200, channel.result) |
|
|
|
self.assertEqual(channel.json_body.get(prop), "mxc://my.server/existing") |
|
|
|
|
|
|
|
def test_msc4069_inhibit_propagation_disabled(self) -> None: |
|
|
|
"""Tests to ensure profile update propagation inhibit flags are ignored when the |
|
|
|
experimental flag is not enabled. |
|
|
|
""" |
|
|
|
for prop in ["avatar_url", "displayname"]: |
|
|
|
room_id = self.helper.create_room_as(tok=self.owner_tok) |
|
|
|
|
|
|
|
channel = self.make_request( |
|
|
|
"PUT", |
|
|
|
f"/rooms/{room_id}/state/m.room.member/{self.owner}", |
|
|
|
content={"membership": "join", prop: "mxc://my.server/existing"}, |
|
|
|
access_token=self.owner_tok, |
|
|
|
) |
|
|
|
self.assertEqual(channel.code, 200, channel.result) |
|
|
|
|
|
|
|
channel = self.make_request( |
|
|
|
"PUT", |
|
|
|
f"/profile/{self.owner}/{prop}?org.matrix.msc4069.propagate=false", |
|
|
|
content={prop: "http://my.server/pic.gif"}, |
|
|
|
access_token=self.owner_tok, |
|
|
|
) |
|
|
|
self.assertEqual(channel.code, 200, channel.result) |
|
|
|
|
|
|
|
res = ( |
|
|
|
self._get_avatar_url() |
|
|
|
if prop == "avatar_url" |
|
|
|
else self._get_displayname() |
|
|
|
) |
|
|
|
self.assertEqual(res, "http://my.server/pic.gif") |
|
|
|
|
|
|
|
channel = self.make_request( |
|
|
|
"GET", |
|
|
|
f"/rooms/{room_id}/state/m.room.member/{self.owner}", |
|
|
|
access_token=self.owner_tok, |
|
|
|
) |
|
|
|
self.assertEqual(channel.code, 200, channel.result) |
|
|
|
|
|
|
|
# The ?propagate=false should be ignored by the server because the config flag |
|
|
|
# isn't enabled. |
|
|
|
self.assertEqual(channel.json_body.get(prop), "http://my.server/pic.gif") |
|
|
|
|
|
|
|
def test_msc4069_inhibit_propagation_default(self) -> None: |
|
|
|
"""Tests to ensure profile update propagation happens by default.""" |
|
|
|
for prop in ["avatar_url", "displayname"]: |
|
|
|
room_id = self.helper.create_room_as(tok=self.owner_tok) |
|
|
|
|
|
|
|
channel = self.make_request( |
|
|
|
"PUT", |
|
|
|
f"/rooms/{room_id}/state/m.room.member/{self.owner}", |
|
|
|
content={"membership": "join", prop: "mxc://my.server/existing"}, |
|
|
|
access_token=self.owner_tok, |
|
|
|
) |
|
|
|
self.assertEqual(channel.code, 200, channel.result) |
|
|
|
|
|
|
|
channel = self.make_request( |
|
|
|
"PUT", |
|
|
|
f"/profile/{self.owner}/{prop}", |
|
|
|
content={prop: "http://my.server/pic.gif"}, |
|
|
|
access_token=self.owner_tok, |
|
|
|
) |
|
|
|
self.assertEqual(channel.code, 200, channel.result) |
|
|
|
|
|
|
|
res = ( |
|
|
|
self._get_avatar_url() |
|
|
|
if prop == "avatar_url" |
|
|
|
else self._get_displayname() |
|
|
|
) |
|
|
|
self.assertEqual(res, "http://my.server/pic.gif") |
|
|
|
|
|
|
|
channel = self.make_request( |
|
|
|
"GET", |
|
|
|
f"/rooms/{room_id}/state/m.room.member/{self.owner}", |
|
|
|
access_token=self.owner_tok, |
|
|
|
) |
|
|
|
self.assertEqual(channel.code, 200, channel.result) |
|
|
|
|
|
|
|
# The ?propagate=false should be ignored by the server because the config flag |
|
|
|
# isn't enabled. |
|
|
|
self.assertEqual(channel.json_body.get(prop), "http://my.server/pic.gif") |
|
|
|
|
|
|
|
@unittest.override_config( |
|
|
|
{"experimental_features": {"msc4069_profile_inhibit_propagation": True}} |
|
|
|
) |
|
|
|
def test_msc4069_inhibit_propagation_like_default(self) -> None: |
|
|
|
"""Tests to ensure clients can request explicit profile propagation.""" |
|
|
|
for prop in ["avatar_url", "displayname"]: |
|
|
|
room_id = self.helper.create_room_as(tok=self.owner_tok) |
|
|
|
|
|
|
|
channel = self.make_request( |
|
|
|
"PUT", |
|
|
|
f"/rooms/{room_id}/state/m.room.member/{self.owner}", |
|
|
|
content={"membership": "join", prop: "mxc://my.server/existing"}, |
|
|
|
access_token=self.owner_tok, |
|
|
|
) |
|
|
|
self.assertEqual(channel.code, 200, channel.result) |
|
|
|
|
|
|
|
channel = self.make_request( |
|
|
|
"PUT", |
|
|
|
f"/profile/{self.owner}/{prop}?org.matrix.msc4069.propagate=true", |
|
|
|
content={prop: "http://my.server/pic.gif"}, |
|
|
|
access_token=self.owner_tok, |
|
|
|
) |
|
|
|
self.assertEqual(channel.code, 200, channel.result) |
|
|
|
|
|
|
|
res = ( |
|
|
|
self._get_avatar_url() |
|
|
|
if prop == "avatar_url" |
|
|
|
else self._get_displayname() |
|
|
|
) |
|
|
|
self.assertEqual(res, "http://my.server/pic.gif") |
|
|
|
|
|
|
|
channel = self.make_request( |
|
|
|
"GET", |
|
|
|
f"/rooms/{room_id}/state/m.room.member/{self.owner}", |
|
|
|
access_token=self.owner_tok, |
|
|
|
) |
|
|
|
self.assertEqual(channel.code, 200, channel.result) |
|
|
|
|
|
|
|
# The client requested ?propagate=true, so it should have happened. |
|
|
|
self.assertEqual(channel.json_body.get(prop), "http://my.server/pic.gif") |
|
|
|
|
|
|
|
def _setup_local_files(self, names_and_props: Dict[str, Dict[str, Any]]) -> None: |
|
|
|
"""Stores metadata about files in the database. |
|
|
|
|
|
|
|