Keep auto_accept_invites accepting invites that answer a knock

The `auto_accept_invites` module accepts every invite to a local user,
including the invite an admin sends to accept a knock. MSC4509 adds a
separate, opt-in auto-join for that case. This test pins the module's
behaviour on develop, so a deployment running
`auto_accept_invites.enabled: true` keeps joining knockers whatever
happens to the MSC4509 path.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Quentin GliechandClaude Fable 5.1 committed 2026-10-30 10:20:36 +01:00
1 parent ca28da9663
commit 153f48dd12
1 file changed
+42 -1
+42 -1
View File
@@ -36,7 +36,7 @@ from synapse.events.auto_accept_invites import InviteAutoAccepter
from synapse.handlers.sync import JoinedSyncResult, SyncRequestKey
from synapse.module_api import ModuleApi
from synapse.rest import admin
from synapse.rest.client import login, room
from synapse.rest.client import knock, login, room
from synapse.server import HomeServer
from synapse.types import StreamToken, UserID, UserInfo, create_requester
from synapse.util.clock import Clock
@@ -58,6 +58,7 @@ class AutoAcceptInvitesTestCase(FederatingHomeserverTestCase):
servlets = [
admin.register_servlets,
knock.register_servlets,
login.register_servlets,
room.register_servlets,
]
@@ -119,6 +120,46 @@ class AutoAcceptInvitesTestCase(FederatingHomeserverTestCase):
join_update: JoinedSyncResult = join_updates[0]
self.assertEqual(join_update.room_id, room_id)
@override_config(
{
"auto_accept_invites": {
"enabled": True,
},
}
)
def test_auto_accept_invite_accepting_a_knock(self) -> None:
"""Test that an invite which accepts a knock is auto-accepted like any
other invite.
MSC4509 joins such invites through a separate, opt-in path; this module
must keep accepting them for deployments which have `enabled` set.
"""
creator_id = self.register_user("creator", "pass")
creator_tok = self.login("creator", "pass")
knocker_id = self.register_user("knocker", "pass")
knocker_tok = self.login("knocker", "pass")
room_id = self.helper.create_room_as(
creator_id,
is_public=False,
tok=creator_tok,
)
self.helper.send_state(
room_id,
EventTypes.JoinRules,
{"join_rule": "knock"},
tok=creator_tok,
)
self.helper.knock(room=room_id, user=knocker_id, tok=knocker_tok)
# The creator accepts the knock by inviting the knocker.
self.helper.invite(room_id, creator_id, knocker_id, tok=creator_tok)
join_updates, _ = sync_join(self, knocker_id)
self.assertEqual(len(join_updates), 1)
self.assertEqual(join_updates[0].room_id, room_id)
@override_config(
{
"auto_accept_invites": {