mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-02 20:34:48 -04:00
Allow ThirdPartyEventRules modules to manipulate public room state (#8292)
This PR allows `ThirdPartyEventRules` modules to view, manipulate and block changes to the state of whether a room is published in the public rooms directory. While the idea of whether a room is in the public rooms list is not kept within an event in the room, `ThirdPartyEventRules` generally deal with controlling which modifications can happen to a room. Public rooms fits within that idea, even if its toggle state isn't controlled through a state event.
This commit is contained in:
parent
f31f8e6319
commit
0991a2da93
8 changed files with 223 additions and 19 deletions
|
@ -12,13 +12,20 @@
|
|||
# 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 synapse.module_api import ModuleApi
|
||||
from synapse.rest import admin
|
||||
from synapse.rest.client.v1 import login, room
|
||||
|
||||
from tests.unittest import HomeserverTestCase
|
||||
|
||||
|
||||
class ModuleApiTestCase(HomeserverTestCase):
|
||||
servlets = [
|
||||
admin.register_servlets,
|
||||
login.register_servlets,
|
||||
room.register_servlets,
|
||||
]
|
||||
|
||||
def prepare(self, reactor, clock, homeserver):
|
||||
self.store = homeserver.get_datastore()
|
||||
self.module_api = ModuleApi(homeserver, homeserver.get_auth_handler())
|
||||
|
@ -52,3 +59,50 @@ class ModuleApiTestCase(HomeserverTestCase):
|
|||
# Check that the displayname was assigned
|
||||
displayname = self.get_success(self.store.get_profile_displayname("bob"))
|
||||
self.assertEqual(displayname, "Bobberino")
|
||||
|
||||
def test_public_rooms(self):
|
||||
"""Tests that a room can be added and removed from the public rooms list,
|
||||
as well as have its public rooms directory state queried.
|
||||
"""
|
||||
# Create a user and room to play with
|
||||
user_id = self.register_user("kermit", "monkey")
|
||||
tok = self.login("kermit", "monkey")
|
||||
room_id = self.helper.create_room_as(user_id, tok=tok)
|
||||
|
||||
# The room should not currently be in the public rooms directory
|
||||
is_in_public_rooms = self.get_success(
|
||||
self.module_api.public_room_list_manager.room_is_in_public_room_list(
|
||||
room_id
|
||||
)
|
||||
)
|
||||
self.assertFalse(is_in_public_rooms)
|
||||
|
||||
# Let's try adding it to the public rooms directory
|
||||
self.get_success(
|
||||
self.module_api.public_room_list_manager.add_room_to_public_room_list(
|
||||
room_id
|
||||
)
|
||||
)
|
||||
|
||||
# And checking whether it's in there...
|
||||
is_in_public_rooms = self.get_success(
|
||||
self.module_api.public_room_list_manager.room_is_in_public_room_list(
|
||||
room_id
|
||||
)
|
||||
)
|
||||
self.assertTrue(is_in_public_rooms)
|
||||
|
||||
# Let's remove it again
|
||||
self.get_success(
|
||||
self.module_api.public_room_list_manager.remove_room_from_public_room_list(
|
||||
room_id
|
||||
)
|
||||
)
|
||||
|
||||
# Should be gone
|
||||
is_in_public_rooms = self.get_success(
|
||||
self.module_api.public_room_list_manager.room_is_in_public_room_list(
|
||||
room_id
|
||||
)
|
||||
)
|
||||
self.assertFalse(is_in_public_rooms)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue