@@ -192,24 +192,93 @@ async def test_validation_on_update_group(
192192
193193
194194async def test_owner_change_group_owner (client : AsyncClient , empty_group : MockGroup , simple_user : MockUser ):
195- # Act
196- result = await client .patch (
195+ previous_owner = empty_group .owner
196+ new_owner = simple_user
197+ user = empty_group .get_member_of_role (UserTestRoles .Owner )
198+
199+ # Change a group owner
200+ patch_result = await client .patch (
197201 f"v1/groups/{ empty_group .id } " ,
198- headers = {"Authorization" : f"Bearer { empty_group . get_member_of_role ( UserTestRoles . Owner ) .token } " },
202+ headers = {"Authorization" : f"Bearer { user .token } " },
199203 json = {
200204 "name" : empty_group .name ,
201- "owner_id" : simple_user .id ,
205+ "owner_id" : new_owner .id ,
202206 "description" : empty_group .description ,
203207 },
204208 )
205- # Assert
206- assert result .json () == {
209+ group_users_result = await client .get (
210+ f"v1/groups/{ empty_group .id } /users" ,
211+ headers = {"Authorization" : f"Bearer { user .token } " },
212+ )
213+
214+ assert patch_result .status_code == 200
215+ assert patch_result .json () == {
207216 "id" : empty_group .id ,
208217 "name" : empty_group .name ,
209- "owner_id" : simple_user .id ,
218+ "owner_id" : new_owner .id ,
210219 "description" : empty_group .description ,
211220 }
212- assert result .status_code == 200
221+ # Make sure previous owner became a guest in group
222+ assert group_users_result .status_code == 200
223+ assert group_users_result .json ()["items" ] == [
224+ {
225+ "id" : previous_owner .id ,
226+ "username" : previous_owner .username ,
227+ "role" : UserTestRoles .Guest ,
228+ },
229+ ]
230+
231+
232+ async def test_owner_change_group_owner_with_existing_role (
233+ client : AsyncClient ,
234+ empty_group : MockGroup ,
235+ simple_user : MockUser ,
236+ role_maintainer_or_below : UserTestRoles ,
237+ ):
238+ previous_owner = empty_group .owner
239+ new_owner = simple_user
240+ user = empty_group .get_member_of_role (UserTestRoles .Owner )
241+
242+ # Make user a group member
243+ await client .post (
244+ f"v1/groups/{ empty_group .id } /users/{ new_owner .id } " ,
245+ headers = {"Authorization" : f"Bearer { user .token } " },
246+ json = {
247+ "role" : role_maintainer_or_below ,
248+ },
249+ )
250+ # Upgrade user to a group owner
251+ patch_result = await client .patch (
252+ f"v1/groups/{ empty_group .id } " ,
253+ headers = {"Authorization" : f"Bearer { user .token } " },
254+ json = {
255+ "name" : empty_group .name ,
256+ "owner_id" : new_owner .id ,
257+ "description" : empty_group .description ,
258+ },
259+ )
260+ group_users_result = await client .get (
261+ f"v1/groups/{ empty_group .id } /users" ,
262+ headers = {"Authorization" : f"Bearer { user .token } " },
263+ )
264+
265+ assert patch_result .status_code == 200
266+ assert patch_result .json () == {
267+ "id" : empty_group .id ,
268+ "name" : empty_group .name ,
269+ "owner_id" : new_owner .id ,
270+ "description" : empty_group .description ,
271+ }
272+ # Make sure previous owner became a guest in group
273+ # As well as upgraded owner is no longer considered a group member
274+ assert group_users_result .status_code == 200
275+ assert group_users_result .json ()["items" ] == [
276+ {
277+ "id" : previous_owner .id ,
278+ "username" : previous_owner .username ,
279+ "role" : UserTestRoles .Guest ,
280+ },
281+ ]
213282
214283
215284async def test_maintainer_or_below_cannot_change_group_owner (
0 commit comments