test(functional): update to GitLab 18.6 and resolve issues found · python-gitlab/python-gitlab@c7c139b
@@ -9,6 +9,7 @@
99import gitlab
1010import gitlab.base
1111import gitlab.exceptions
12+import gitlab.v4.objects
12131314SLEEP_INTERVAL = 0.5
1415TIMEOUT = 60 # seconds before timeout will occur
@@ -37,6 +38,11 @@ def safe_delete(object: gitlab.base.RESTObject) -> None:
3738object = manager.get(object.get_id()) # type: ignore[attr-defined]
3839except gitlab.exceptions.GitlabGetError:
3940return
41+# If object is already marked for deletion we have succeeded
42+if getattr(object, "marked_for_deletion_on", None) is not None:
43+# 'Group' and 'Project' objects have a 'marked_for_deletion_on' attribute
44+logging.info(f"{object!r} is marked for deletion.")
45+return
40464147if index:
4248logging.info(f"Attempt {index + 1} to delete {object!r}.")
@@ -52,22 +58,16 @@ def safe_delete(object: gitlab.base.RESTObject) -> None:
5258# we shouldn't cause test to fail if it still exists
5359return
5460elif isinstance(object, gitlab.v4.objects.Project):
55-# Immediately delete rather than waiting for at least 1day
56-# https://docs.gitlab.com/ee/api/projects.html#delete-project
57-object.delete(permanently_remove=True)
58-pass
61+# Starting in GitLab 18, projects can't be immediately deleted.
62+# So this will mark it for deletion.
63+object.delete()
5964else:
6065# We only attempt to delete parent groups to prevent dangling sub-groups
61-# However parent groups can only be deleted on a delay in Gl 16
66+# However parent groups can only be deleted on a delay in GitLab 16
6267# https://docs.gitlab.com/ee/api/groups.html#remove-group
6368object.delete()
6469except gitlab.exceptions.GitlabDeleteError:
65-logging.info(f"{object!r} already deleted or scheduled for deletion.")
66-if isinstance(object, gitlab.v4.objects.Group):
67-# Parent groups can never be immediately deleted in GL 16,
68-# so don't cause test to fail if it still exists
69-return
70-pass
70+logging.exception(f"Error attempting to delete: {object.pformat()}")
71717272time.sleep(SLEEP_INTERVAL)
7373pytest.fail(f"{object!r} was not deleted")