fix: surface real errors when adding user to Mattermost team

_ensure_team_member silently swallowed every exception from
add_user_to_team, assuming failure meant the user was already a
member. Real failures (bad permissions, domain restrictions, wrong
team ID) were masked and only surfaced later as a confusing "No team
member found" error when adding the user to a channel. Now checks
actual membership via get_team_member and raises a clear
MattermostError on genuine add failures.
This commit is contained in:
Ali Asadi 2026-08-09 14:00:52 +03:30
parent c6e26bcbaa
commit e127fd39bc

View file

@ -72,12 +72,22 @@ class MattermostClient:
def _ensure_team_member(self, mm_user_id: str) -> None: def _ensure_team_member(self, mm_user_id: str) -> None:
if not self._team_id: if not self._team_id:
return return
try:
self._driver.teams.get_team_member(self._team_id, mm_user_id)
return # already a member
except ResourceNotFound:
pass
except Exception as exc:
raise MattermostError(f"Team membership lookup failed: {exc}") from exc
try: try:
self._driver.teams.add_user_to_team( self._driver.teams.add_user_to_team(
self._team_id, options={"team_id": self._team_id, "user_id": mm_user_id} self._team_id, options={"team_id": self._team_id, "user_id": mm_user_id}
) )
except Exception: except Exception as exc:
pass # already a member or team not configured — not fatal raise MattermostError(
f"Adding user {mm_user_id} to team failed: {exc}"
) from exc
def get_or_create_user(self, user_id: UUID) -> str: def get_or_create_user(self, user_id: UUID) -> str:
""" """