Skip to content

Commit ec2653b

Browse files
author
Anatoly Rugalev
authored
Add assign_roles support (#85)
1 parent ff575cb commit ec2653b

File tree

5 files changed

+66
-8
lines changed

5 files changed

+66
-8
lines changed

stream_chat/async_chat/channel.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,16 +147,28 @@ async def truncate(self):
147147
"""
148148
return await self.client.post(f"{self.url}/truncate")
149149

150-
async def add_members(self, user_ids, message=None):
150+
async def add_members(self, members, message=None):
151151
"""
152152
Adds members to the channel
153153
154-
:param user_ids: user IDs to add as members
154+
:param members: member objects to add
155155
:param message: An optional to show
156156
:return:
157157
"""
158158
return await self.client.post(
159-
self.url, data={"add_members": user_ids, "message": message}
159+
self.url, data={"add_members": members, "message": message}
160+
)
161+
162+
async def assign_roles(self, members, message=None):
163+
"""
164+
Assigns new roles to specified channel members
165+
166+
:param members: member objects with role information
167+
:param message: An optional to show
168+
:return:
169+
"""
170+
return await self.client.post(
171+
self.url, data={"assign_roles": members, "message": message}
160172
)
161173

162174
async def invite_members(self, user_ids, message=None):

stream_chat/base/channel.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,11 +148,22 @@ def truncate(self):
148148
pass
149149

150150
@abc.abstractmethod
151-
def add_members(self, user_ids, message=None):
151+
def add_members(self, members, message=None):
152152
"""
153153
Adds members to the channel
154154
155-
:param user_ids: user IDs to add as members
155+
:param members: member objects to add
156+
:param message: An optional to show
157+
:return:
158+
"""
159+
pass
160+
161+
@abc.abstractmethod
162+
def assign_roles(self, members, message=None):
163+
"""
164+
Assigns new roles to specified channel members
165+
166+
:param members: member objects with role information
156167
:param message: An optional to show
157168
:return:
158169
"""

stream_chat/channel.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,16 +145,28 @@ def truncate(self):
145145
"""
146146
return self.client.post(f"{self.url}/truncate")
147147

148-
def add_members(self, user_ids, message=None):
148+
def add_members(self, members, message=None):
149149
"""
150150
Adds members to the channel
151151
152-
:param user_ids: user IDs to add as members
152+
:param members: member objects to add
153153
:param message: An optional to show
154154
:return:
155155
"""
156156
return self.client.post(
157-
self.url, data={"add_members": user_ids, "message": message}
157+
self.url, data={"add_members": members, "message": message}
158+
)
159+
160+
def assign_roles(self, members, message=None):
161+
"""
162+
Assigns new roles to specified channel members
163+
164+
:param members: member objects with role information
165+
:param message: An optional to show
166+
:return:
167+
"""
168+
return self.client.post(
169+
self.url, data={"assign_roles": members, "message": message}
158170
)
159171

160172
def invite_members(self, user_ids, message=None):

stream_chat/tests/async_chat/test_channel.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,18 @@ async def test_add_moderators(self, event_loop, channel, random_user):
121121
response = await channel.demote_moderators([random_user["id"]])
122122
assert not response["members"][0].get("is_moderator", False)
123123

124+
@pytest.mark.asyncio
125+
async def test_assign_roles_moderators(self, event_loop, channel, random_user):
126+
member = {"user_id": random_user["id"], "channel_role": "channel_moderator"}
127+
response = await channel.add_members([member])
128+
assert len(response["members"]) == 1
129+
assert response["members"][0]["channel_role"] == "channel_moderator"
130+
131+
member["channel_role"] = "channel_member"
132+
response = await channel.assign_roles([member])
133+
assert len(response["members"]) == 1
134+
assert response["members"][0]["channel_role"] == "channel_member"
135+
124136
@pytest.mark.asyncio
125137
async def test_mark_read(self, event_loop, channel, random_user):
126138
response = await channel.mark_read(random_user["id"])

stream_chat/tests/test_channel.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,17 @@ def test_add_moderators(self, channel, random_user):
105105
response = channel.demote_moderators([random_user["id"]])
106106
assert not response["members"][0].get("is_moderator", False)
107107

108+
def test_assign_roles_moderators(self, channel, random_user):
109+
member = {"user_id": random_user["id"], "channel_role": "channel_moderator"}
110+
response = channel.add_members([member])
111+
assert len(response["members"]) == 1
112+
assert response["members"][0]["channel_role"] == "channel_moderator"
113+
114+
member["channel_role"] = "channel_member"
115+
response = channel.assign_roles([member])
116+
assert len(response["members"]) == 1
117+
assert response["members"][0]["channel_role"] == "channel_member"
118+
108119
def test_mark_read(self, channel, random_user):
109120
response = channel.mark_read(random_user["id"])
110121
assert "event" in response

0 commit comments

Comments
 (0)