diff options
author | Peter B. Robinson <robinson96@llnl.gov> | 2020-10-14 15:49:45 -0700 |
---|---|---|
committer | Peter B. Robinson <robinson96@llnl.gov> | 2020-10-14 15:49:45 -0700 |
commit | 9f6335f7b79f52927d5c5734e47f4b8d35cd6c4a (patch) | |
tree | 9b149de36349d83a6dc04a4cb71adb3b5a1ea9b4 | |
parent | 449fc26ffa98ef5703d019154f37a4959816f607 (diff) | |
download | gitlab-9f6335f7b79f52927d5c5734e47f4b8d35cd6c4a.tar.gz |
test: add test_project_merge_request_approvals.py
-rw-r--r-- | gitlab/tests/objects/test_project_merge_request_approvals.py | 294 | ||||
-rw-r--r-- | gitlab/v4/objects/__init__.py | 4 |
2 files changed, 296 insertions, 2 deletions
diff --git a/gitlab/tests/objects/test_project_merge_request_approvals.py b/gitlab/tests/objects/test_project_merge_request_approvals.py new file mode 100644 index 0000000..5e9244f --- /dev/null +++ b/gitlab/tests/objects/test_project_merge_request_approvals.py @@ -0,0 +1,294 @@ +""" +Gitlab API: https://docs.gitlab.com/ee/api/merge_request_approvals.html +""" + +import pytest +import responses +import copy + + +approval_rule_id = 1 +approval_rule_name = "security" +approvals_required = 3 +user_ids = [5, 50] +group_ids = [5] + +new_approval_rule_name = "new approval rule" +new_approval_rule_user_ids = user_ids +new_approval_rule_approvals_required = 2 + +updated_approval_rule_user_ids = [5] +updated_approval_rule_approvals_required = 1 + + +@pytest.fixture +def resp_snippet(): + merge_request_content = [ + { + "id": 1, + "iid": 1, + "project_id": 1, + "title": "test1", + "description": "fixed login page css paddings", + "state": "merged", + "merged_by": { + "id": 87854, + "name": "Douwe Maan", + "username": "DouweM", + "state": "active", + "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png", + "web_url": "https://gitlab.com/DouweM", + }, + "merged_at": "2018-09-07T11:16:17.520Z", + "closed_by": None, + "closed_at": None, + "created_at": "2017-04-29T08:46:00Z", + "updated_at": "2017-04-29T08:46:00Z", + "target_branch": "master", + "source_branch": "test1", + "upvotes": 0, + "downvotes": 0, + "author": { + "id": 1, + "name": "Administrator", + "username": "admin", + "state": "active", + "avatar_url": None, + "web_url": "https://gitlab.example.com/admin", + }, + "assignee": { + "id": 1, + "name": "Administrator", + "username": "admin", + "state": "active", + "avatar_url": None, + "web_url": "https://gitlab.example.com/admin", + }, + "assignees": [ + { + "name": "Miss Monserrate Beier", + "username": "axel.block", + "id": 12, + "state": "active", + "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon", + "web_url": "https://gitlab.example.com/axel.block", + } + ], + "source_project_id": 2, + "target_project_id": 3, + "labels": ["Community contribution", "Manage"], + "work_in_progress": None, + "milestone": { + "id": 5, + "iid": 1, + "project_id": 3, + "title": "v2.0", + "description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.", + "state": "closed", + "created_at": "2015-02-02T19:49:26.013Z", + "updated_at": "2015-02-02T19:49:26.013Z", + "due_date": "2018-09-22", + "start_date": "2018-08-08", + "web_url": "https://gitlab.example.com/my-group/my-project/milestones/1", + }, + "merge_when_pipeline_succeeds": None, + "merge_status": "can_be_merged", + "sha": "8888888888888888888888888888888888888888", + "merge_commit_sha": None, + "squash_commit_sha": None, + "user_notes_count": 1, + "discussion_locked": None, + "should_remove_source_branch": True, + "force_remove_source_branch": False, + "allow_collaboration": False, + "allow_maintainer_to_push": False, + "web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1", + "references": { + "short": "!1", + "relative": "my-group/my-project!1", + "full": "my-group/my-project!1", + }, + "time_stats": { + "time_estimate": 0, + "total_time_spent": 0, + "human_time_estimate": None, + "human_total_time_spent": None, + }, + "squash": False, + "task_completion_status": {"count": 0, "completed_count": 0}, + } + ] + mr_ars_content = [ + { + "id": approval_rule_id, + "name": approval_rule_name, + "rule_type": "regular", + "eligible_approvers": [ + { + "id": user_ids[0], + "name": "John Doe", + "username": "jdoe", + "state": "active", + "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon", + "web_url": "http://localhost/jdoe", + }, + { + "id": user_ids[1], + "name": "Group Member 1", + "username": "group_member_1", + "state": "active", + "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon", + "web_url": "http://localhost/group_member_1", + }, + ], + "approvals_required": approvals_required, + "source_rule": None, + "users": [ + { + "id": 5, + "name": "John Doe", + "username": "jdoe", + "state": "active", + "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon", + "web_url": "http://localhost/jdoe", + } + ], + "groups": [ + { + "id": 5, + "name": "group1", + "path": "group1", + "description": "", + "visibility": "public", + "lfs_enabled": False, + "avatar_url": None, + "web_url": "http://localhost/groups/group1", + "request_access_enabled": False, + "full_name": "group1", + "full_path": "group1", + "parent_id": None, + "ldap_cn": None, + "ldap_access": None, + } + ], + "contains_hidden_groups": False, + "overridden": False, + } + ] + + with responses.RequestsMock(assert_all_requests_are_fired=False) as rsps: + rsps.add( + method=responses.GET, + url="http://localhost/api/v4/projects/1/merge_requests", + json=merge_request_content, + content_type="application/json", + status=200, + ) + rsps.add( + method=responses.GET, + url="http://localhost/api/v4/projects/1/merge_requests/1", + json=merge_request_content[0], + content_type="application/json", + status=200, + ) + rsps.add( + method=responses.GET, + url="http://localhost/api/v4/projects/1/merge_requests/1/approval_rules", + json=mr_ars_content, + content_type="application/json", + status=200, + ) + + new_mr_ars_content = dict(mr_ars_content[0]) + new_mr_ars_content["name"] = new_approval_rule_name + new_mr_ars_content["approvals_required"] = new_approval_rule_approvals_required + + rsps.add( + method=responses.POST, + url="http://localhost/api/v4/projects/1/merge_requests/1/approval_rules", + json=new_mr_ars_content, + content_type="application/json", + status=200, + ) + + updated_mr_ars_content = copy.deepcopy(mr_ars_content[0]) + updated_mr_ars_content["eligible_approvers"] = [ + mr_ars_content[0]["eligible_approvers"][0] + ] + + updated_mr_ars_content[ + "approvals_required" + ] = updated_approval_rule_approvals_required + + rsps.add( + method=responses.PUT, + url="http://localhost/api/v4/projects/1/merge_requests/1/approval_rules/1", + json=updated_mr_ars_content, + content_type="application/json", + status=200, + ) + yield rsps + + +def test_list_merge_request_approval_rules(project, resp_snippet): + approval_rules = project.mergerequests.get(1).approval_rules.list() + assert len(approval_rules) == 1 + assert approval_rules[0].name == approval_rule_name + assert approval_rules[0].id == approval_rule_id + + +def test_update_merge_request_approvals_set_approvers(project, resp_snippet): + approvals = project.mergerequests.get(1).approvals + response = approvals.set_approvers( + updated_approval_rule_approvals_required, + approver_ids=updated_approval_rule_user_ids, + approver_group_ids=group_ids, + approval_rule_name=approval_rule_name, + ) + + assert response.approvals_required == updated_approval_rule_approvals_required + assert len(response.eligible_approvers) == len(updated_approval_rule_user_ids) + assert response.eligible_approvers[0]["id"] == updated_approval_rule_user_ids[0] + assert response.name == approval_rule_name + + +def test_create_merge_request_approvals_set_approvers(project, resp_snippet): + approvals = project.mergerequests.get(1).approvals + response = approvals.set_approvers( + new_approval_rule_approvals_required, + approver_ids=new_approval_rule_user_ids, + approver_group_ids=group_ids, + approval_rule_name=new_approval_rule_name, + ) + assert response.approvals_required == new_approval_rule_approvals_required + assert len(response.eligible_approvers) == len(new_approval_rule_user_ids) + assert response.eligible_approvers[0]["id"] == new_approval_rule_user_ids[0] + assert response.name == new_approval_rule_name + + +def test_create_merge_request_approval_rule(project, resp_snippet): + approval_rules = project.mergerequests.get(1).approval_rules + data = { + "name": new_approval_rule_name, + "approvals_required": new_approval_rule_approvals_required, + "rule_type": "regular", + "user_ids": new_approval_rule_user_ids, + "group_ids": group_ids, + } + response = approval_rules.create(data) + assert response.approvals_required == new_approval_rule_approvals_required + assert len(response.eligible_approvers) == len(new_approval_rule_user_ids) + assert response.eligible_approvers[0]["id"] == new_approval_rule_user_ids[0] + assert response.name == new_approval_rule_name + + +def test_update_merge_request_approval_rule(project, resp_snippet): + approval_rules = project.mergerequests.get(1).approval_rules + ar_1 = approval_rules.list()[0] + ar_1.user_ids = updated_approval_rule_user_ids + ar_1.approvals_required = updated_approval_rule_approvals_required + ar_1.save() + + assert ar_1.approvals_required == updated_approval_rule_approvals_required + assert len(ar_1.eligible_approvers) == len(updated_approval_rule_user_ids) + assert ar_1.eligible_approvers[0]["id"] == updated_approval_rule_user_ids[0] diff --git a/gitlab/v4/objects/__init__.py b/gitlab/v4/objects/__init__.py index c90d18a..80b3c21 100644 --- a/gitlab/v4/objects/__init__.py +++ b/gitlab/v4/objects/__init__.py @@ -3033,9 +3033,9 @@ class ProjectMergeRequestApprovalManager(GetWithoutIdMixin, UpdateMixin, RESTMan ar.approvals_required = data["approvals_required"] ar.group_ids = data["group_ids"] ar.save() - return + return ar """ if there was no rule matching the rule name, create a new one""" - approval_rules.create(data=data) + return approval_rules.create(data=data) class ProjectMergeRequestApprovalRule(SaveMixin, RESTObject): |