feat(teams): grant each participant their game's divider role
Reuse the existing CS2/LoL divider roles as participant tags: sync_team_role now also adds the divider role for the member's team's game, and strips any other configured divider role (switched game / dropped out). Matched by ID against config.TEAM_DIVIDERS, so only the divider roles are ever touched. - TeamSyncResult gains divider_added / divider_removed; summary tallies both - /teamsync report and log line surface divider_assigned / divider_removed - tests: grants the game divider, swaps it on a game switch Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XPRsW4tazVtYi2jNzVQkre
This commit is contained in:
@@ -13,6 +13,7 @@ from pathlib import Path
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent))
|
||||
|
||||
import config # noqa: E402
|
||||
from core import member_sync, sheets # noqa: E402
|
||||
from tests.conftest import run # noqa: E402
|
||||
|
||||
@@ -253,6 +254,9 @@ class FakeGuild:
|
||||
self.created.append(name)
|
||||
return role
|
||||
|
||||
def get_role(self, rid):
|
||||
return next((r for r in self.roles if r.id == rid), None)
|
||||
|
||||
|
||||
def test_sync_creates_missing_team_role_and_removes_old_one(monkeypatch):
|
||||
old_team = FakeRole(1, "OldTeam")
|
||||
@@ -292,6 +296,43 @@ def test_sync_uses_existing_team_role(monkeypatch):
|
||||
assert genesis in member.roles
|
||||
|
||||
|
||||
def test_sync_grants_game_divider_role(monkeypatch):
|
||||
genesis = FakeRole(3, "GENESIS")
|
||||
cs2_div = FakeRole(100, "====== CS2 2026 ======")
|
||||
member = FakeMember(1, "kapa", roles=[])
|
||||
guild = FakeGuild([genesis, cs2_div])
|
||||
|
||||
monkeypatch.setattr(sheets, "get_team_for_username", lambda n: "GENESIS")
|
||||
monkeypatch.setattr(sheets, "all_team_names", lambda: {"GENESIS"})
|
||||
monkeypatch.setattr(sheets, "get_team_dividers", lambda: {"GENESIS": 100})
|
||||
monkeypatch.setattr(config, "TEAM_DIVIDERS", {"cs2_2026": 100, "lol_2026": 200})
|
||||
|
||||
result = run(member_sync.sync_team_role(member, guild))
|
||||
|
||||
assert result.divider_added == "====== CS2 2026 ======"
|
||||
assert cs2_div in member.roles
|
||||
|
||||
|
||||
def test_sync_swaps_divider_role_on_game_switch(monkeypatch):
|
||||
genesis = FakeRole(3, "GENESIS")
|
||||
cs2_div = FakeRole(100, "CS2")
|
||||
lol_div = FakeRole(200, "LoL")
|
||||
member = FakeMember(1, "kapa", roles=[lol_div]) # was LoL, now on a CS2 team
|
||||
guild = FakeGuild([genesis, cs2_div, lol_div])
|
||||
|
||||
monkeypatch.setattr(sheets, "get_team_for_username", lambda n: "GENESIS")
|
||||
monkeypatch.setattr(sheets, "all_team_names", lambda: {"GENESIS"})
|
||||
monkeypatch.setattr(sheets, "get_team_dividers", lambda: {"GENESIS": 100})
|
||||
monkeypatch.setattr(config, "TEAM_DIVIDERS", {"cs2_2026": 100, "lol_2026": 200})
|
||||
|
||||
result = run(member_sync.sync_team_role(member, guild))
|
||||
|
||||
assert result.divider_added == "CS2"
|
||||
assert result.divider_removed == ["LoL"]
|
||||
ids = {r.id for r in member.roles}
|
||||
assert 100 in ids and 200 not in ids
|
||||
|
||||
|
||||
def test_sync_strips_team_role_when_not_registered(monkeypatch):
|
||||
old_team = FakeRole(1, "OldTeam")
|
||||
member = FakeMember(1, "ghost", roles=[old_team])
|
||||
|
||||
Reference in New Issue
Block a user