Private
Public Access
Add an auto-provisioned system account for automated messages (#74)
The #72 welcome message was attributed to whichever admin added the member, since there was no system/bot sender concept -- every Message row requires a real user_id. Adds a lazily-created "system" bot account (reusing the existing is_bot infrastructure) and switches the welcome message to post as it instead. Excluded from the People directory and @mention autocomplete for free: the directory already filters is_bot users, and mention suggestions are sourced from room membership, which the system account is never added to. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -485,10 +485,10 @@ async def test_add_member_directly(client, db_session, monkeypatch):
|
||||
|
||||
|
||||
async def test_add_member_posts_welcome_message(client, db_session, monkeypatch):
|
||||
# #72: attributed to the admin who added them, since there's no
|
||||
# system/bot sender concept -- mirrors test_add_member_directly's setup.
|
||||
# #74: posted as the auto-provisioned "system" account, not the admin
|
||||
# who added them -- mirrors test_add_member_directly's setup.
|
||||
_fake_send_email(monkeypatch)
|
||||
alice = await register_and_login(client, db_session, username="alice")
|
||||
await register_and_login(client, db_session, username="alice")
|
||||
room_id = (await client.post("/api/rooms", json={"name": "general"})).json()["id"]
|
||||
|
||||
await client.post("/api/auth/logout")
|
||||
@@ -500,7 +500,7 @@ async def test_add_member_posts_welcome_message(client, db_session, monkeypatch)
|
||||
assert resp.status_code == 201, resp.text
|
||||
|
||||
history = (await client.get(f"/api/rooms/{room_id}/messages")).json()
|
||||
welcome_messages = [m for m in history if m["username"] == "alice"]
|
||||
welcome_messages = [m for m in history if m["username"] == "system"]
|
||||
assert len(welcome_messages) == 1
|
||||
assert welcome_messages[0]["content"] == "Welcome to #general, bob!"
|
||||
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
from app.services.system_user_service import SYSTEM_USERNAME, get_or_create_system_user
|
||||
|
||||
|
||||
async def test_get_or_create_system_user_creates_bot_account(db_session):
|
||||
user = await get_or_create_system_user(db_session)
|
||||
assert user.username == SYSTEM_USERNAME
|
||||
assert user.is_bot is True
|
||||
|
||||
|
||||
async def test_get_or_create_system_user_is_idempotent(db_session):
|
||||
first = await get_or_create_system_user(db_session)
|
||||
second = await get_or_create_system_user(db_session)
|
||||
assert first.id == second.id
|
||||
Reference in New Issue
Block a user