Skip to content

Commit 85a734f

Browse files
nejchJohnVillalovos
authored andcommitted
feat(merge_request_approvals): add support for deleting MR approval rules
1 parent 0eb4f7f commit 85a734f

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

docs/gl_objects/merge_request_approvals.rst

+8
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,14 @@ List MR-level MR approval rules::
7575

7676
mr.approval_rules.list()
7777

78+
Delete MR-level MR approval rule::
79+
80+
rules = mr.approval_rules.list()
81+
rules[0].delete()
82+
83+
# or
84+
mr.approval_rules.delete(approval_id)
85+
7886
Change MR-level MR approval rule::
7987

8088
mr_approvalrule.user_ids = [105]

gitlab/v4/objects/merge_request_approvals.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ def set_approvers(
163163
return approval_rules.create(data=data)
164164

165165

166-
class ProjectMergeRequestApprovalRule(SaveMixin, RESTObject):
166+
class ProjectMergeRequestApprovalRule(SaveMixin, ObjectDeleteMixin, RESTObject):
167167
_id_attr = "approval_rule_id"
168168
_short_print_attr = "approval_rule"
169169
id: int
@@ -192,7 +192,7 @@ def save(self, **kwargs: Any) -> None:
192192

193193

194194
class ProjectMergeRequestApprovalRuleManager(
195-
ListMixin, UpdateMixin, CreateMixin, RESTManager
195+
ListMixin, UpdateMixin, CreateMixin, DeleteMixin, RESTManager
196196
):
197197
_path = "/projects/{project_id}/merge_requests/{mr_iid}/approval_rules"
198198
_obj_cls = ProjectMergeRequestApprovalRule

tests/unit/objects/test_project_merge_request_approvals.py

+18
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,19 @@ def resp_mr_approval_rules():
139139
yield rsps
140140

141141

142+
@pytest.fixture
143+
def resp_delete_mr_approval_rule(no_content):
144+
with responses.RequestsMock() as rsps:
145+
rsps.add(
146+
method=responses.DELETE,
147+
url="http://localhost/api/v4/projects/1/merge_requests/1/approval_rules/1",
148+
json=no_content,
149+
content_type="application/json",
150+
status=204,
151+
)
152+
yield rsps
153+
154+
142155
def test_project_approval_manager_update_uses_post(project):
143156
"""Ensure the
144157
gitlab.v4.objects.merge_request_approvals.ProjectApprovalManager object has
@@ -157,6 +170,11 @@ def test_list_merge_request_approval_rules(project, resp_mr_approval_rules):
157170
assert approval_rules[0].id == approval_rule_id
158171

159172

173+
def test_delete_merge_request_approval_rule(project, resp_delete_mr_approval_rule):
174+
merge_request = project.mergerequests.get(1, lazy=True)
175+
merge_request.approval_rules.delete(approval_rule_id)
176+
177+
160178
def test_update_merge_request_approvals_set_approvers(project, resp_mr_approval_rules):
161179
approvals = project.mergerequests.get(1, lazy=True).approvals
162180
assert isinstance(

0 commit comments

Comments
 (0)