@@ -191,6 +191,33 @@ def _wait(timeout=30, step=0.5):
191191return _wait
192192
193193
194+ def wait_for_deleted (
195+ * ,
196+ pg_manager :gitlab .base .RESTManager ,
197+ object_id :int ,
198+ description :str ,
199+ hard_delete :bool = False ,
200+ )-> None :
201+ """Ensure the object specified can not be retrieved. If object still exists after
202+ timeout period, fail the test"""
203+ max_iterations = int (TIMEOUT / SLEEP_INTERVAL )
204+
205+ for _ in range (max_iterations ):
206+ try :
207+ object = pg_manager .get (object_id )
208+ except gitlab .exceptions .GitlabGetError :
209+ return
210+ try :
211+ if hard_delete :
212+ object .delete (hard_delete = True )
213+ else :
214+ object .delete ()
215+ except gitlab .exceptions .GitlabDeleteError :
216+ pass
217+ time .sleep (SLEEP_INTERVAL )
218+ pytest .fail (f"{ description } { object_id } was not deleted" )
219+
220+
194221@pytest .fixture (scope = "session" )
195222def gitlab_config (check_is_alive ,docker_ip ,docker_services ,temp_dir ,fixture_dir ):
196223config_file = temp_dir / "python-gitlab.cfg"
@@ -277,6 +304,7 @@ def group(gl):
277304"path" :f"group-{ _id } " ,
278305 }
279306group = gl .groups .create (data )
307+ group_id = group .id
280308
281309yield group
282310
@@ -285,6 +313,8 @@ def group(gl):
285313except gitlab .exceptions .GitlabDeleteError as e :
286314print (f"Group already deleted:{ e } " )
287315
316+ wait_for_deleted (pg_manager = gl .groups ,object_id = group_id ,description = "Group" )
317+
288318
289319@pytest .fixture (scope = "module" )
290320def project (gl ):
@@ -293,6 +323,7 @@ def project(gl):
293323name = f"test-project-{ _id } "
294324
295325project = gl .projects .create (name = name )
326+ project_id = project .id
296327
297328yield project
298329
@@ -301,6 +332,10 @@ def project(gl):
301332except gitlab .exceptions .GitlabDeleteError as e :
302333print (f"Project already deleted:{ e } " )
303334
335+ wait_for_deleted (
336+ pg_manager = gl .projects ,object_id = project_id ,description = "Project"
337+ )
338+
304339
305340@pytest .fixture (scope = "function" )
306341def merge_request (project ,wait_for_sidekiq ):
@@ -372,6 +407,18 @@ def _merge_request(*, source_branch: str):
372407# Ignore if branch was already deleted
373408pass
374409
410+ for mr_iid ,source_branch in to_delete :
411+ wait_for_deleted (
412+ pg_manager = project .mergerequests ,
413+ object_id = mr_iid ,
414+ description = "Project mergerequest" ,
415+ )
416+ wait_for_deleted (
417+ pg_manager = project .branches ,
418+ object_id = source_branch ,
419+ description = "Project branch" ,
420+ )
421+
375422
376423@pytest .fixture (scope = "module" )
377424def project_file (project ):
@@ -431,6 +478,7 @@ def user(gl):
431478password = "fakepassword"
432479
433480user = gl .users .create (email = email ,username = username ,name = name ,password = password )
481+ user_id = user .id
434482
435483yield user
436484
@@ -440,6 +488,10 @@ def user(gl):
440488except gitlab .exceptions .GitlabDeleteError as e :
441489print (f"User already deleted:{ e } " )
442490
491+ wait_for_deleted (
492+ pg_manager = gl .users ,object_id = user_id ,description = "User" ,hard_delete = True
493+ )
494+
443495
444496@pytest .fixture (scope = "module" )
445497def issue (project ):