test(functional): update to GitLab 18.6 and resolve issues found · python-gitlab/python-gitlab@c7c139b

@@ -9,6 +9,7 @@

99

import gitlab

1010

import gitlab.base

1111

import gitlab.exceptions

12+

import gitlab.v4.objects

12131314

SLEEP_INTERVAL = 0.5

1415

TIMEOUT = 60 # seconds before timeout will occur

@@ -37,6 +38,11 @@ def safe_delete(object: gitlab.base.RESTObject) -> None:

3738

object = manager.get(object.get_id()) # type: ignore[attr-defined]

3839

except gitlab.exceptions.GitlabGetError:

3940

return

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

40464147

if index:

4248

logging.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

5359

return

5460

elif 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()

5964

else:

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

6368

object.delete()

6469

except 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()}")

71717272

time.sleep(SLEEP_INTERVAL)

7373

pytest.fail(f"{object!r} was not deleted")