| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 5a1678f commit f41b093
4 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -21,6 +21,9 @@ References | |||
| 21 | 21 | + :class:`gitlab.v4.objects.ProjectMergeRequestApprovalRule` | |
| 22 | 22 | + :class:`gitlab.v4.objects.ProjectMergeRequestApprovalRuleManager` | |
| 23 | 23 | + :attr:`gitlab.v4.objects.ProjectMergeRequest.approval_rules` | |
| 24 | + + :class:`gitlab.v4.objects.ProjectMergeRequestApprovalState` | ||
| 25 | + + :class:`gitlab.v4.objects.ProjectMergeRequestApprovalStateManager` | ||
| 26 | + + :attr:`gitlab.v4.objects.ProjectMergeRequest.approval_state` | ||
| 24 | 27 | ||
| 25 | 28 | * GitLab API: https://docs.gitlab.com/ee/api/merge_request_approvals.html | |
| 26 | 29 | ||
@@ -46,6 +49,10 @@ Get project-level or MR-level MR approvals settings:: | |||
| 46 | 49 | ||
| 47 | 50 | mr_mras = mr.approvals.get() | |
| 48 | 51 | ||
| 52 | + Get MR-level approval state:: | ||
| 53 | + | ||
| 54 | + mr_approval_state = mr.approval_state.get() | ||
| 55 | + | ||
| 49 | 56 | Change project-level or MR-level MR approvals settings:: | |
| 50 | 57 | ||
| 51 | 58 | p_mras.approvals_before_merge = 2 | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -19,6 +19,8 @@ | |||
| 19 | 19 | "ProjectMergeRequestApprovalManager", | |
| 20 | 20 | "ProjectMergeRequestApprovalRule", | |
| 21 | 21 | "ProjectMergeRequestApprovalRuleManager", | |
| 22 | + "ProjectMergeRequestApprovalState", | ||
| 23 | + "ProjectMergeRequestApprovalStateManager", | ||
| 22 | 24 | ] | |
| 23 | 25 | ||
| 24 | 26 | ||
@@ -204,3 +206,13 @@ def create(self, data, **kwargs): | |||
| 204 | 206 | new_data["id"] = self._from_parent_attrs["project_id"] | |
| 205 | 207 | new_data["merge_request_iid"] = self._from_parent_attrs["mr_iid"] | |
| 206 | 208 | return CreateMixin.create(self, new_data, **kwargs) | |
| 209 | + | ||
| 210 | + | ||
| 211 | + class ProjectMergeRequestApprovalState(RESTObject): | ||
| 212 | + pass | ||
| 213 | + | ||
| 214 | + | ||
| 215 | + class ProjectMergeRequestApprovalStateManager(GetWithoutIdMixin, RESTManager): | ||
| 216 | + _path = "/projects/%(project_id)s/merge_requests/%(mr_iid)s/approval_state" | ||
| 217 | + _obj_cls = ProjectMergeRequestApprovalState | ||
| 218 | + _from_parent_attrs = {"project_id": "project_id", "mr_iid": "iid"} | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -26,6 +26,7 @@ | |||
| 26 | 26 | from .merge_request_approvals import ( # noqa: F401 | |
| 27 | 27 | ProjectMergeRequestApprovalManager, | |
| 28 | 28 | ProjectMergeRequestApprovalRuleManager, | |
| 29 | + ProjectMergeRequestApprovalStateManager, | ||
| 29 | 30 | ) | |
| 30 | 31 | from .notes import ProjectMergeRequestNoteManager # noqa: F401 | |
| 31 | 32 | from .pipelines import ProjectMergeRequestPipelineManager # noqa: F401 | |
@@ -140,6 +141,7 @@ class ProjectMergeRequest( | |||
| 140 | 141 | _id_attr = "iid" | |
| 141 | 142 | ||
| 142 | 143 | approval_rules: ProjectMergeRequestApprovalRuleManager | |
| 144 | + approval_state: ProjectMergeRequestApprovalStateManager | ||
| 143 | 145 | approvals: ProjectMergeRequestApprovalManager | |
| 144 | 146 | awardemojis: ProjectMergeRequestAwardEmojiManager | |
| 145 | 147 | diffs: "ProjectMergeRequestDiffManager" | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -178,6 +178,15 @@ def resp_snippet(): | |||
| 178 | 178 | } | |
| 179 | 179 | ] | |
| 180 | 180 | ||
| 181 | + approval_state_rules = copy.deepcopy(mr_ars_content) | ||
| 182 | + approval_state_rules[0]["approved"] = False | ||
| 183 | + approval_state_rules[0]["approved_by"] = [] | ||
| 184 | + | ||
| 185 | + mr_approval_state_content = { | ||
| 186 | + "approval_rules_overwritten": False, | ||
| 187 | + "rules": approval_state_rules, | ||
| 188 | + } | ||
| 189 | + | ||
| 181 | 190 | with responses.RequestsMock(assert_all_requests_are_fired=False) as rsps: | |
| 182 | 191 | rsps.add( | |
| 183 | 192 | method=responses.GET, | |
@@ -200,6 +209,13 @@ def resp_snippet(): | |||
| 200 | 209 | content_type="application/json", | |
| 201 | 210 | status=200, | |
| 202 | 211 | ) | |
| 212 | + rsps.add( | ||
| 213 | + method=responses.GET, | ||
| 214 | + url="http://localhost/api/v4/projects/1/merge_requests/1/approval_state", | ||
| 215 | + json=mr_approval_state_content, | ||
| 216 | + content_type="application/json", | ||
| 217 | + status=200, | ||
| 218 | + ) | ||
| 203 | 219 | ||
| 204 | 220 | new_mr_ars_content = dict(mr_ars_content[0]) | |
| 205 | 221 | new_mr_ars_content["name"] = new_approval_rule_name | |
@@ -315,3 +331,18 @@ def test_update_merge_request_approval_rule(project, resp_snippet): | |||
| 315 | 331 | assert ar_1.approvals_required == updated_approval_rule_approvals_required | |
| 316 | 332 | assert len(ar_1.eligible_approvers) == len(updated_approval_rule_user_ids) | |
| 317 | 333 | assert ar_1.eligible_approvers[0]["id"] == updated_approval_rule_user_ids[0] | |
| 334 | + | ||
| 335 | + | ||
| 336 | + def test_get_merge_request_approval_state(project, resp_snippet): | ||
| 337 | + merge_request = project.mergerequests.get(1) | ||
| 338 | + approval_state = merge_request.approval_state.get() | ||
| 339 | + assert isinstance( | ||
| 340 | + approval_state, | ||
| 341 | + gitlab.v4.objects.merge_request_approvals.ProjectMergeRequestApprovalState, | ||
| 342 | + ) | ||
| 343 | + assert not approval_state.approval_rules_overwritten | ||
| 344 | + assert len(approval_state.rules) == 1 | ||
| 345 | + assert approval_state.rules[0]["name"] == approval_rule_name | ||
| 346 | + assert approval_state.rules[0]["id"] == approval_rule_id | ||
| 347 | + assert not approval_state.rules[0]["approved"] | ||
| 348 | + assert approval_state.rules[0]["approved_by"] == [] | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments