@@ -192,24 +192,89 @@ 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+ # Arrange
196+ previous_owner = empty_group .owner
197+ new_owner = simple_user
198+ user = empty_group .get_member_of_role (UserTestRoles .Owner )
195199 # Act
196- result = await client .patch (
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 )
209+ group_users_result = await client .get (
210+ f"v1/groups/{ empty_group .id } /users" ,
211+ headers = {"Authorization" : f"Bearer { user .token } " },
212+ )
205213 # Assert
206- assert result .json () == {
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+ assert group_users_result .status_code == 200
222+ assert group_users_result .json ()["items" ] == [
223+ {
224+ "id" : previous_owner .id ,
225+ "username" : previous_owner .username ,
226+ "role" : UserTestRoles .Guest ,
227+ },
228+ ]
229+
230+
231+ async def test_owner_change_group_owner_with_existing_role (
232+ client : AsyncClient ,
233+ empty_group : MockGroup ,
234+ simple_user : MockUser ,
235+ role_maintainer_or_below : UserTestRoles ,
236+ ):
237+ # Arrange
238+ previous_owner = empty_group .owner
239+ new_owner = simple_user
240+ user = empty_group .get_member_of_role (UserTestRoles .Owner )
241+ # Act
242+ await client .post (
243+ f"v1/groups/{ empty_group .id } /users/{ new_owner .id } " ,
244+ headers = {"Authorization" : f"Bearer { user .token } " },
245+ json = {
246+ "role" : role_maintainer_or_below ,
247+ },
248+ )
249+ patch_result = await client .patch (
250+ f"v1/groups/{ empty_group .id } " ,
251+ headers = {"Authorization" : f"Bearer { user .token } " },
252+ json = {
253+ "name" : empty_group .name ,
254+ "owner_id" : new_owner .id ,
255+ "description" : empty_group .description ,
256+ },
257+ )
258+ group_users_result = await client .get (
259+ f"v1/groups/{ empty_group .id } /users" ,
260+ headers = {"Authorization" : f"Bearer { user .token } " },
261+ )
262+ # Assert
263+ assert patch_result .status_code == 200
264+ assert patch_result .json () == {
265+ "id" : empty_group .id ,
266+ "name" : empty_group .name ,
267+ "owner_id" : new_owner .id ,
268+ "description" : empty_group .description ,
269+ }
270+ assert group_users_result .status_code == 200
271+ assert group_users_result .json ()["items" ] == [
272+ {
273+ "id" : previous_owner .id ,
274+ "username" : previous_owner .username ,
275+ "role" : UserTestRoles .Guest ,
276+ },
277+ ]
213278
214279
215280async def test_maintainer_or_below_cannot_change_group_owner (
0 commit comments