Skip to content

Commit

Permalink
Merge pull request #2110 from python-gitlab/jlvillal/mr_approval_rules
Browse files Browse the repository at this point in the history
feat(api): add support for `get` for a MR approval rule
  • Loading branch information
nejch committed Jun 28, 2022
2 parents 6486566 + 89c18c6 commit 389e1e6
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 4 deletions.
5 changes: 5 additions & 0 deletions docs/gl_objects/merge_request_approvals.rst
Expand Up @@ -78,6 +78,11 @@ List MR-level MR approval rules::

mr.approval_rules.list()

Get a single MR approval rule::

approval_rule_id = 123
mr_approvalrule = mr.approval_rules.get(approval_rule_id)

Delete MR-level MR approval rule::

rules = mr.approval_rules.list()
Expand Down
14 changes: 10 additions & 4 deletions gitlab/v4/objects/merge_request_approvals.py
@@ -1,9 +1,10 @@
from typing import Any, cast, Dict, List, Optional, TYPE_CHECKING
from typing import Any, cast, Dict, List, Optional, TYPE_CHECKING, Union

from gitlab import exceptions as exc
from gitlab.base import RESTManager, RESTObject
from gitlab.mixins import (
CreateMixin,
CRUDMixin,
DeleteMixin,
GetWithoutIdMixin,
ListMixin,
Expand Down Expand Up @@ -189,9 +190,7 @@ def save(self, **kwargs: Any) -> None:
SaveMixin.save(self, **kwargs)


class ProjectMergeRequestApprovalRuleManager(
ListMixin, UpdateMixin, CreateMixin, DeleteMixin, RESTManager
):
class ProjectMergeRequestApprovalRuleManager(CRUDMixin, RESTManager):
_path = "/projects/{project_id}/merge_requests/{mr_iid}/approval_rules"
_obj_cls = ProjectMergeRequestApprovalRule
_from_parent_attrs = {"project_id": "project_id", "mr_iid": "iid"}
Expand All @@ -214,6 +213,13 @@ class ProjectMergeRequestApprovalRuleManager(
optional=("approval_project_rule_id", "user_ids", "group_ids"),
)

def get(
self, id: Union[str, int], lazy: bool = False, **kwargs: Any
) -> ProjectMergeRequestApprovalRule:
return cast(
ProjectMergeRequestApprovalRule, super().get(id=id, lazy=lazy, **kwargs)
)

def create(
self, data: Optional[Dict[str, Any]] = None, **kwargs: Any
) -> RESTObject:
Expand Down
18 changes: 18 additions & 0 deletions tests/unit/objects/test_project_merge_request_approvals.py
Expand Up @@ -100,6 +100,13 @@ def resp_mr_approval_rules():
content_type="application/json",
status=200,
)
rsps.add(
method=responses.GET,
url="http://localhost/api/v4/projects/1/merge_requests/1/approval_rules/1",
json=mr_ars_content[0],
content_type="application/json",
status=200,
)
rsps.add(
method=responses.GET,
url="http://localhost/api/v4/projects/1/merge_requests/1/approval_state",
Expand Down Expand Up @@ -243,6 +250,17 @@ def test_update_merge_request_approval_rule(project, resp_mr_approval_rules):
assert ar_1.eligible_approvers[0]["id"] == updated_approval_rule_user_ids[0]


def test_get_merge_request_approval_rule(project, resp_mr_approval_rules):
merge_request = project.mergerequests.get(1, lazy=True)
approval_rule = merge_request.approval_rules.get(approval_rule_id)
assert isinstance(
approval_rule,
gitlab.v4.objects.merge_request_approvals.ProjectMergeRequestApprovalRule,
)
assert approval_rule.name == approval_rule_name
assert approval_rule.id == approval_rule_id


def test_get_merge_request_approval_state(project, resp_mr_approval_rules):
merge_request = project.mergerequests.get(1, lazy=True)
approval_state = merge_request.approval_state.get()
Expand Down

0 comments on commit 389e1e6

Please sign in to comment.