diff options
author | Nejc Habjan <hab.nejc@gmail.com> | 2021-10-31 13:26:36 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-31 13:26:36 +0100 |
commit | 5ce3b17f52d9501fea68dee8818e726addb327ac (patch) | |
tree | 5006e9b5a2b108dc86aa47190ad3f1a596ec6c08 | |
parent | 0b53c0a260ab2ec2c5ddb12ca08bfd21a24f7a69 (diff) | |
parent | f0685209f88d1199873c1f27d27f478706908fd3 (diff) | |
download | gitlab-5ce3b17f52d9501fea68dee8818e726addb327ac.tar.gz |
Merge pull request #1655 from StingRayZA/add-milestone-promote
feat(api): add project milestone promotion
-rw-r--r-- | docs/gl_objects/milestones.rst | 4 | ||||
-rw-r--r-- | gitlab/v4/objects/milestones.py | 5 | ||||
-rw-r--r-- | tests/functional/api/test_projects.py | 21 |
3 files changed, 28 insertions, 2 deletions
diff --git a/docs/gl_objects/milestones.rst b/docs/gl_objects/milestones.rst index 3830f81..c6b4447 100644 --- a/docs/gl_objects/milestones.rst +++ b/docs/gl_objects/milestones.rst @@ -66,6 +66,10 @@ Change the state of a milestone (activate / close):: milestone.state_event = 'activate' milestone.save() +Promote a project milestone:: + + milestone.promote() + List the issues related to a milestone:: issues = milestone.issues() diff --git a/gitlab/v4/objects/milestones.py b/gitlab/v4/objects/milestones.py index 0a53e1b..0d6962d 100644 --- a/gitlab/v4/objects/milestones.py +++ b/gitlab/v4/objects/milestones.py @@ -2,7 +2,7 @@ from gitlab import cli from gitlab import exceptions as exc from gitlab import types from gitlab.base import RequiredOptional, RESTManager, RESTObject, RESTObjectList -from gitlab.mixins import CRUDMixin, ObjectDeleteMixin, SaveMixin +from gitlab.mixins import CRUDMixin, ObjectDeleteMixin, PromoteMixin, SaveMixin from .issues import GroupIssue, GroupIssueManager, ProjectIssue, ProjectIssueManager from .merge_requests import ( @@ -90,8 +90,9 @@ class GroupMilestoneManager(CRUDMixin, RESTManager): _types = {"iids": types.ListAttribute} -class ProjectMilestone(SaveMixin, ObjectDeleteMixin, RESTObject): +class ProjectMilestone(PromoteMixin, SaveMixin, ObjectDeleteMixin, RESTObject): _short_print_attr = "title" + _update_uses_post = True @cli.register_custom_action("ProjectMilestone") @exc.on_http_error(exc.GitlabListError) diff --git a/tests/functional/api/test_projects.py b/tests/functional/api/test_projects.py index 3da9d2b..0572276 100644 --- a/tests/functional/api/test_projects.py +++ b/tests/functional/api/test_projects.py @@ -199,6 +199,27 @@ def test_project_milestones(project): assert len(milestone.merge_requests()) == 0 +def test_project_milestone_promotion(gl, group): + """ + Milestone promotion requires the project to be a child of a group (not in a user namespace) + + """ + _id = uuid.uuid4().hex + data = { + "name": f"test-project-{_id}", + "namespace_id": group.id, + } + project = gl.projects.create(data) + + milestone_title = "promoteme" + promoted_milestone = project.milestones.create({"title": milestone_title}) + promoted_milestone.promote() + + assert any( + milestone.title == milestone_title for milestone in group.milestones.list() + ) + + def test_project_pages_domains(gl, project): domain = project.pagesdomains.create({"domain": "foo.domain.com"}) assert len(project.pagesdomains.list()) == 1 |