8000 fix(api): set _repr_attr for project approval rules to name attr (#3011) · python-gitlab/python-gitlab@1a68f1c · GitHub
[go: up one dir, main page]

Skip to content

Commit 1a68f1c

Browse files
holysolesPatrick Evans
andauthored
fix(api): set _repr_attr for project approval rules to name attr (#3011)
Co-authored-by: Patrick Evans <patrick.evans@gehealthcare.com>
1 parent 9734ad4 commit 1a68f1c

File tree

2 files changed

+141
-0
lines changed

2 files changed

+141
-0
lines changed

gitlab/v4/objects/merge_request_approvals.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ def get(self, **kwargs: Any) -> ProjectApproval:
5454

5555
class ProjectApprovalRule(SaveMixin, ObjectDeleteMixin, RESTObject):
5656
_id_attr = "id"
57+
_repr_attr = "name"
5758

5859

5960
class ProjectApprovalRuleManager(

tests/unit/objects/test_project_merge_request_approvals.py

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,135 @@
2424
updated_approval_rule_approvals_required = 1
2525

2626

27+
@pytest.fixture
28+
def resp_prj_approval_rules():
29+
prj_ars_content = [
30+
{
31+
"id": approval_rule_id,
32+
"name": approval_rule_name,
33+
"rule_type": "regular",
34+
"report_type": None,
35+
"eligible_approvers": [
36+
{
37+
"id": user_ids[0],
38+
"name": "John Doe",
39+
"username": "jdoe",
40+
"state": "active",
41+
"avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
42+
"web_url": "http://localhost/jdoe",
43+
},
44+
{
45+
"id": user_ids[1],
46+
"name": "Group Member 1",
47+
"username": "group_member_1",
48+
"state": "active",
49+
"avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
50+
"web_url": "http://localhost/group_member_1",
51+
},
52+
],
53+
"approvals_required": approvals_required,
54+
"users": [
55+
{
56+
"id": 5,
57+
"name": "John Doe",
58+
"username": "jdoe",
59+
"state": "active",
60+
"avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
61+
"web_url": "http://localhost/jdoe",
62+
}
63+
],
64+
"groups": [
65+
{
66+
"id": 5,
67+
"name": "group1",
68+
"path": "group1",
69+
"description": "",
70+
"visibility": "public",
71+
"lfs_enabled": False,
72+
"avatar_url": None,
73+
"web_url": "http://localhost/groups/group1",
74+
"request_access_enabled": False,
75+
"full_name": "group1",
76+
"full_path": "group1",
77+
"parent_id": None,
78+
"ldap_cn": None,
79+
"ldap_access": None,
80+
}
81+
],
82+
"applies_to_all_protected_branches": False,
83+
"protected_branches": [
84+
{
85+
"id": 1,
86+
"name": "main",
87+
"push_access_levels": [
88+
{
89+
"access_level": 30,
90+
"access_level_description": "Developers + Maintainers",
91+
}
92+
],
93+
"merge_access_levels": [
94+
{
95+
"access_level": 30,
96+
"access_level_description": "Developers + Maintainers",
97+
}
98+
],
99+
"unprotect_access_levels": [
100+
{"access_level": 40, "access_level_description": "Maintainers"}
101+
],
102+
"code_owner_approval_required": "false",
103+
}
104+
],
105+
"contains_hidden_groups": False,
106+
}
107+
]
108+
109+
with responses.RequestsMock(assert_all_requests_are_fired=False) as rsps:
110+
rsps.add(
111+
method=responses.GET,
112+
url="http://localhost/api/v4/projects/1/approval_rules",
113+
json=prj_ars_content,
114+
content_type="application/json",
115+
status=200,
116+
)
117+
rsps.add(
118+
method=responses.GET,
119+
url="http://localhost/api/v4/projects/1/approval_rules/7",
120+
json=prj_ars_content[0],
121+
content_type="application/json",
122+
status=200,
123+
)
124+
125+
new_prj_ars_content = dict(prj_ars_content[0])
126+
new_prj_ars_content["name"] = new_approval_rule_name
127+
new_prj_ars_content["approvals_required"] = new_approval_rule_approvals_required
128+
129+
rsps.add(
130+
method=responses.POST,
131+
url="http://localhost/api/v4/projects/1/approval_rules",
132+
json=new_prj_ars_content,
133+
content_type="application/json",
134+
status=200,
135+
)
136+
137+
updated_mr_ars_content = copy.deepcopy(prj_ars_content[0])
138+
updated_mr_ars_content["eligible_approvers"] = [
139+
prj_ars_content[0]["eligible_approvers"][0]
140+
]
141+
142+
updated_mr_ars_content["approvals_required"] = (
143+
updated_approval_rule_approvals_required
144+
)
145+
146+
rsps.add(
147+
method=responses.PUT,
148+
url="http://localhost/api/v4/projects/1/approval_rules/7",
149+
json=updated_mr_ars_content,
150+
content_type="application/json",
151+
status=200,
152+
)
153+
yield rsps
154+
155+
27156
@pytest.fixture
28157
def resp_mr_approval_rules():
29158
mr_ars_content = [
@@ -169,6 +298,17 @@ def test_project_approval_manager_update_method_post(project):
169298
assert approvals._update_method is UpdateMethod.POST
170299

171300

301+
def test_list_project_approval_rules(project, resp_prj_approval_rules):
302+
approval_rules = project.approvalrules.list()
303+
assert len(approval_rules) == 1
304+
assert approval_rules[0].name == approval_rule_name
305+
assert approval_rules[0].id == approval_rule_id
306+
assert (
307+
repr(approval_rules[0])
308+
== f"<ProjectApprovalRule id:{approval_rule_id} name:{approval_rule_name}>"
309+
)
310+
311+
172312
def test_list_merge_request_approval_rules(project, resp_mr_approval_rules):
173313
approval_rules = project.mergerequests.get(3, lazy=True).approval_rules.list()
174314
assert len(approval_rules) == 1

0 commit comments

Comments
 (0)
0