|
24 | 24 | updated_approval_rule_approvals_required=1
|
25 | 25 |
|
26 | 26 |
|
| 27 | +@pytest.fixture |
| 28 | +defresp_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 | +withresponses.RequestsMock(assert_all_requests_are_fired=False)asrsps: |
| 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 | +yieldrsps |
| 154 | + |
| 155 | + |
27 | 156 | @pytest.fixture
|
28 | 157 | defresp_mr_approval_rules():
|
29 | 158 | mr_ars_content= [
|
@@ -169,6 +298,17 @@ def test_project_approval_manager_update_method_post(project):
|
169 | 298 | assertapprovals._update_methodisUpdateMethod.POST
|
170 | 299 |
|
171 | 300 |
|
| 301 | +deftest_list_project_approval_rules(project,resp_prj_approval_rules): |
| 302 | +approval_rules=project.approvalrules.list() |
| 303 | +assertlen(approval_rules)==1 |
| 304 | +assertapproval_rules[0].name==approval_rule_name |
| 305 | +assertapproval_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 | + |
172 | 312 | deftest_list_merge_request_approval_rules(project,resp_mr_approval_rules):
|
173 | 313 | approval_rules=project.mergerequests.get(3,lazy=True).approval_rules.list()
|
174 | 314 | assertlen(approval_rules)==1
|
|