Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit6035ca8

Browse files
authored
Merge pull request#1200 from robinson96/feature/project_merge_request_approval_rules
Feature/project merge request approval rules
2 parents348e860 +aff9bc7 commit6035ca8

File tree

3 files changed

+412
-11
lines changed

3 files changed

+412
-11
lines changed

‎docs/gl_objects/mr_approvals.rst‎

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ References
1818
+:class:`gitlab.v4.objects.ProjectMergeRequestApproval`
1919
+:class:`gitlab.v4.objects.ProjectMergeRequestApprovalManager`
2020
+:attr:`gitlab.v4.objects.ProjectMergeRequest.approvals`
21+
+:class:`gitlab.v4.objects.ProjectMergeRequestApprovalRule`
22+
+:class:`gitlab.v4.objects.ProjectMergeRequestApprovalRuleManager`
23+
+:attr:`gitlab.v4.objects.ProjectMergeRequest.approval_rules`
2124

2225
* GitLab API: https://docs.gitlab.com/ee/api/merge_request_approvals.html
2326

@@ -50,10 +53,33 @@ Change project-level or MR-level MR approvals settings::
5053

5154
mr_mras.set_approvers(approvals_required = 1)
5255

53-
Change project-levelor MR-levelMR allowed approvers::
56+
Change project-level MR allowed approvers::
5457

5558
project.approvals.set_approvers(approver_ids=[105],
56-
approver_group_ids=[653, 654])
59+
approver_group_ids=[653, 654])
60+
61+
Create a new MR-level approval rule or change an existing MR-level approval rule::
5762

5863
mr.approvals.set_approvers(approvals_required = 1, approver_ids=[105],
59-
approver_group_ids=[653, 654])
64+
approver_group_ids=[653, 654],
65+
approval_rule_name="my MR custom approval rule")
66+
67+
List MR-level MR approval rules::
68+
69+
mr.approval_rules.list()
70+
71+
Change MR-level MR approval rule::
72+
73+
mr_approvalrule.user_ids = [105]
74+
mr_approvalrule.approvals_required = 2
75+
mr_approvalrule.group_ids = [653, 654]
76+
mr_approvalrule.save()
77+
78+
Create a MR-level MR approval rule::
79+
mr.approval_rules.create({
80+
"name": "my MR custom approval rule",
81+
"approvals_required": 2,
82+
"rule_type": "regular",
83+
"user_ids": [105],
84+
"group_ids": [653, 654],
85+
})
Lines changed: 294 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,294 @@
1+
"""
2+
Gitlab API: https://docs.gitlab.com/ee/api/merge_request_approvals.html
3+
"""
4+
5+
importpytest
6+
importresponses
7+
importcopy
8+
9+
10+
approval_rule_id=1
11+
approval_rule_name="security"
12+
approvals_required=3
13+
user_ids= [5,50]
14+
group_ids= [5]
15+
16+
new_approval_rule_name="new approval rule"
17+
new_approval_rule_user_ids=user_ids
18+
new_approval_rule_approvals_required=2
19+
20+
updated_approval_rule_user_ids= [5]
21+
updated_approval_rule_approvals_required=1
22+
23+
24+
@pytest.fixture
25+
defresp_snippet():
26+
merge_request_content= [
27+
{
28+
"id":1,
29+
"iid":1,
30+
"project_id":1,
31+
"title":"test1",
32+
"description":"fixed login page css paddings",
33+
"state":"merged",
34+
"merged_by": {
35+
"id":87854,
36+
"name":"Douwe Maan",
37+
"username":"DouweM",
38+
"state":"active",
39+
"avatar_url":"https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
40+
"web_url":"https://gitlab.com/DouweM",
41+
},
42+
"merged_at":"2018-09-07T11:16:17.520Z",
43+
"closed_by":None,
44+
"closed_at":None,
45+
"created_at":"2017-04-29T08:46:00Z",
46+
"updated_at":"2017-04-29T08:46:00Z",
47+
"target_branch":"master",
48+
"source_branch":"test1",
49+
"upvotes":0,
50+
"downvotes":0,
51+
"author": {
52+
"id":1,
53+
"name":"Administrator",
54+
"username":"admin",
55+
"state":"active",
56+
"avatar_url":None,
57+
"web_url":"https://gitlab.example.com/admin",
58+
},
59+
"assignee": {
60+
"id":1,
61+
"name":"Administrator",
62+
"username":"admin",
63+
"state":"active",
64+
"avatar_url":None,
65+
"web_url":"https://gitlab.example.com/admin",
66+
},
67+
"assignees": [
68+
{
69+
"name":"Miss Monserrate Beier",
70+
"username":"axel.block",
71+
"id":12,
72+
"state":"active",
73+
"avatar_url":"http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
74+
"web_url":"https://gitlab.example.com/axel.block",
75+
}
76+
],
77+
"source_project_id":2,
78+
"target_project_id":3,
79+
"labels": ["Community contribution","Manage"],
80+
"work_in_progress":None,
81+
"milestone": {
82+
"id":5,
83+
"iid":1,
84+
"project_id":3,
85+
"title":"v2.0",
86+
"description":"Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
87+
"state":"closed",
88+
"created_at":"2015-02-02T19:49:26.013Z",
89+
"updated_at":"2015-02-02T19:49:26.013Z",
90+
"due_date":"2018-09-22",
91+
"start_date":"2018-08-08",
92+
"web_url":"https://gitlab.example.com/my-group/my-project/milestones/1",
93+
},
94+
"merge_when_pipeline_succeeds":None,
95+
"merge_status":"can_be_merged",
96+
"sha":"8888888888888888888888888888888888888888",
97+
"merge_commit_sha":None,
98+
"squash_commit_sha":None,
99+
"user_notes_count":1,
100+
"discussion_locked":None,
101+
"should_remove_source_branch":True,
102+
"force_remove_source_branch":False,
103+
"allow_collaboration":False,
104+
"allow_maintainer_to_push":False,
105+
"web_url":"http://gitlab.example.com/my-group/my-project/merge_requests/1",
106+
"references": {
107+
"short":"!1",
108+
"relative":"my-group/my-project!1",
109+
"full":"my-group/my-project!1",
110+
},
111+
"time_stats": {
112+
"time_estimate":0,
113+
"total_time_spent":0,
114+
"human_time_estimate":None,
115+
"human_total_time_spent":None,
116+
},
117+
"squash":False,
118+
"task_completion_status": {"count":0,"completed_count":0},
119+
}
120+
]
121+
mr_ars_content= [
122+
{
123+
"id":approval_rule_id,
124+
"name":approval_rule_name,
125+
"rule_type":"regular",
126+
"eligible_approvers": [
127+
{
128+
"id":user_ids[0],
129+
"name":"John Doe",
130+
"username":"jdoe",
131+
"state":"active",
132+
"avatar_url":"https://www.gravatar.com/avatar/0?s=80&d=identicon",
133+
"web_url":"http://localhost/jdoe",
134+
},
135+
{
136+
"id":user_ids[1],
137+
"name":"Group Member 1",
138+
"username":"group_member_1",
139+
"state":"active",
140+
"avatar_url":"https://www.gravatar.com/avatar/0?s=80&d=identicon",
141+
"web_url":"http://localhost/group_member_1",
142+
},
143+
],
144+
"approvals_required":approvals_required,
145+
"source_rule":None,
146+
"users": [
147+
{
148+
"id":5,
149+
"name":"John Doe",
150+
"username":"jdoe",
151+
"state":"active",
152+
"avatar_url":"https://www.gravatar.com/avatar/0?s=80&d=identicon",
153+
"web_url":"http://localhost/jdoe",
154+
}
155+
],
156+
"groups": [
157+
{
158+
"id":5,
159+
"name":"group1",
160+
"path":"group1",
161+
"description":"",
162+
"visibility":"public",
163+
"lfs_enabled":False,
164+
"avatar_url":None,
165+
"web_url":"http://localhost/groups/group1",
166+
"request_access_enabled":False,
167+
"full_name":"group1",
168+
"full_path":"group1",
169+
"parent_id":None,
170+
"ldap_cn":None,
171+
"ldap_access":None,
172+
}
173+
],
174+
"contains_hidden_groups":False,
175+
"overridden":False,
176+
}
177+
]
178+
179+
withresponses.RequestsMock(assert_all_requests_are_fired=False)asrsps:
180+
rsps.add(
181+
method=responses.GET,
182+
url="http://localhost/api/v4/projects/1/merge_requests",
183+
json=merge_request_content,
184+
content_type="application/json",
185+
status=200,
186+
)
187+
rsps.add(
188+
method=responses.GET,
189+
url="http://localhost/api/v4/projects/1/merge_requests/1",
190+
json=merge_request_content[0],
191+
content_type="application/json",
192+
status=200,
193+
)
194+
rsps.add(
195+
method=responses.GET,
196+
url="http://localhost/api/v4/projects/1/merge_requests/1/approval_rules",
197+
json=mr_ars_content,
198+
content_type="application/json",
199+
status=200,
200+
)
201+
202+
new_mr_ars_content=dict(mr_ars_content[0])
203+
new_mr_ars_content["name"]=new_approval_rule_name
204+
new_mr_ars_content["approvals_required"]=new_approval_rule_approvals_required
205+
206+
rsps.add(
207+
method=responses.POST,
208+
url="http://localhost/api/v4/projects/1/merge_requests/1/approval_rules",
209+
json=new_mr_ars_content,
210+
content_type="application/json",
211+
status=200,
212+
)
213+
214+
updated_mr_ars_content=copy.deepcopy(mr_ars_content[0])
215+
updated_mr_ars_content["eligible_approvers"]= [
216+
mr_ars_content[0]["eligible_approvers"][0]
217+
]
218+
219+
updated_mr_ars_content[
220+
"approvals_required"
221+
]=updated_approval_rule_approvals_required
222+
223+
rsps.add(
224+
method=responses.PUT,
225+
url="http://localhost/api/v4/projects/1/merge_requests/1/approval_rules/1",
226+
json=updated_mr_ars_content,
227+
content_type="application/json",
228+
status=200,
229+
)
230+
yieldrsps
231+
232+
233+
deftest_list_merge_request_approval_rules(project,resp_snippet):
234+
approval_rules=project.mergerequests.get(1).approval_rules.list()
235+
assertlen(approval_rules)==1
236+
assertapproval_rules[0].name==approval_rule_name
237+
assertapproval_rules[0].id==approval_rule_id
238+
239+
240+
deftest_update_merge_request_approvals_set_approvers(project,resp_snippet):
241+
approvals=project.mergerequests.get(1).approvals
242+
response=approvals.set_approvers(
243+
updated_approval_rule_approvals_required,
244+
approver_ids=updated_approval_rule_user_ids,
245+
approver_group_ids=group_ids,
246+
approval_rule_name=approval_rule_name,
247+
)
248+
249+
assertresponse.approvals_required==updated_approval_rule_approvals_required
250+
assertlen(response.eligible_approvers)==len(updated_approval_rule_user_ids)
251+
assertresponse.eligible_approvers[0]["id"]==updated_approval_rule_user_ids[0]
252+
assertresponse.name==approval_rule_name
253+
254+
255+
deftest_create_merge_request_approvals_set_approvers(project,resp_snippet):
256+
approvals=project.mergerequests.get(1).approvals
257+
response=approvals.set_approvers(
258+
new_approval_rule_approvals_required,
259+
approver_ids=new_approval_rule_user_ids,
260+
approver_group_ids=group_ids,
261+
approval_rule_name=new_approval_rule_name,
262+
)
263+
assertresponse.approvals_required==new_approval_rule_approvals_required
264+
assertlen(response.eligible_approvers)==len(new_approval_rule_user_ids)
265+
assertresponse.eligible_approvers[0]["id"]==new_approval_rule_user_ids[0]
266+
assertresponse.name==new_approval_rule_name
267+
268+
269+
deftest_create_merge_request_approval_rule(project,resp_snippet):
270+
approval_rules=project.mergerequests.get(1).approval_rules
271+
data= {
272+
"name":new_approval_rule_name,
273+
"approvals_required":new_approval_rule_approvals_required,
274+
"rule_type":"regular",
275+
"user_ids":new_approval_rule_user_ids,
276+
"group_ids":group_ids,
277+
}
278+
response=approval_rules.create(data)
279+
assertresponse.approvals_required==new_approval_rule_approvals_required
280+
assertlen(response.eligible_approvers)==len(new_approval_rule_user_ids)
281+
assertresponse.eligible_approvers[0]["id"]==new_approval_rule_user_ids[0]
282+
assertresponse.name==new_approval_rule_name
283+
284+
285+
deftest_update_merge_request_approval_rule(project,resp_snippet):
286+
approval_rules=project.mergerequests.get(1).approval_rules
287+
ar_1=approval_rules.list()[0]
288+
ar_1.user_ids=updated_approval_rule_user_ids
289+
ar_1.approvals_required=updated_approval_rule_approvals_required
290+
ar_1.save()
291+
292+
assertar_1.approvals_required==updated_approval_rule_approvals_required
293+
assertlen(ar_1.eligible_approvers)==len(updated_approval_rule_user_ids)
294+
assertar_1.eligible_approvers[0]["id"]==updated_approval_rule_user_ids[0]

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp