Commit a4603381 authored by Patrick Bajao's avatar Patrick Bajao

Refactor the API spec to be a bit DRYer

parent 187a0973
......@@ -8,7 +8,38 @@ describe API::MergeRequestApprovalRules do
set(:project) { create(:project, :public, :repository, creator: user, namespace: user.namespace) }
let(:merge_request) { create(:merge_request, author: user, source_project: project, target_project: project) }
shared_examples_for 'a protected API endpoint for merge request approval rule action' do
context 'disable_overriding_approvers_per_merge_request is set to true' do
before do
project.update!(disable_overriding_approvers_per_merge_request: true)
action
end
it 'responds with 403' do
expect(response).to have_gitlab_http_status(403)
end
end
context 'disable_overriding_approvers_per_merge_request is set to false' do
before do
project.update!(disable_overriding_approvers_per_merge_request: false)
action
end
context 'user cannot update merge request' do
let(:current_user) { other_user }
it 'responds with 403' do
expect(response).to have_gitlab_http_status(403)
end
end
end
end
describe 'GET /projects/:id/merge_requests/:merge_request_iid/approval_rules' do
let(:current_user) { other_user }
let(:url) { "/projects/#{project.id}/merge_requests/#{merge_request.iid}/approval_rules" }
context 'user cannot read merge request' do
......@@ -24,7 +55,6 @@ describe API::MergeRequestApprovalRules do
end
context 'use can read merge request' do
let(:current_user) { other_user }
let(:approver) { create(:user) }
let(:group) { create(:group) }
let(:source_rule) { nil }
......@@ -100,6 +130,7 @@ describe API::MergeRequestApprovalRules do
end
describe 'POST /projects/:id/merge_requests/:merge_request_iid/approval_rules' do
let(:current_user) { user }
let(:url) { "/projects/#{project.id}/merge_requests/#{merge_request.iid}/approval_rules" }
let(:approver) { create(:user) }
let(:group) { create(:group) }
......@@ -118,41 +149,19 @@ describe API::MergeRequestApprovalRules do
}
end
before do
project.add_developer(approver)
group.add_developer(approver)
end
context 'disable_overriding_approvers_per_merge_request is set to true' do
before do
project.update!(disable_overriding_approvers_per_merge_request: true)
let(:action) { post api(url, current_user), params: params }
post api(url, user), params: params
end
it 'responds with 403' do
expect(response).to have_gitlab_http_status(403)
end
end
it_behaves_like 'a protected API endpoint for merge request approval rule action'
context 'disable_overriding_approvers_per_merge_request is set to false' do
context 'when user can update merge request and approval rules can be overridden' do
before do
project.update!(disable_overriding_approvers_per_merge_request: false)
project.add_developer(approver)
group.add_developer(approver)
post api(url, current_user), params: params
end
context 'user cannot update merge request' do
let(:current_user) { other_user }
it 'responds with 403' do
expect(response).to have_gitlab_http_status(403)
end
action
end
context 'user can update merge request' do
let(:current_user) { user }
it 'matches the response schema' do
expect(response).to have_gitlab_http_status(201)
expect(response).to match_response_schema('public_api/v4/merge_request_approval_rule', dir: 'ee')
......@@ -192,9 +201,9 @@ describe API::MergeRequestApprovalRules do
end
end
end
end
describe 'PUT /projects/:id/merge_requests/:merge_request_iid/approval_rules/:approval_rule_id' do
let(:current_user) { user }
let(:existing_approver) { create(:user) }
let(:existing_group) { create(:group) }
......@@ -226,43 +235,21 @@ describe API::MergeRequestApprovalRules do
}
end
let(:action) { put api(url, current_user), params: params }
it_behaves_like 'a protected API endpoint for merge request approval rule action'
context 'when user can update merge request and approval rules can be overridden' do
before do
project.update!(disable_overriding_approvers_per_merge_request: false)
project.add_developer(existing_approver)
project.add_developer(new_approver)
existing_group.add_developer(existing_approver)
new_group.add_developer(new_approver)
end
context 'disable_overriding_approvers_per_merge_request is set to true' do
before do
project.update!(disable_overriding_approvers_per_merge_request: true)
put api(url, user), params: params
end
it 'responds with 403' do
expect(response).to have_gitlab_http_status(403)
end
end
context 'disable_overriding_approvers_per_merge_request is set to false' do
before do
project.update!(disable_overriding_approvers_per_merge_request: false)
put api(url, current_user), params: params
end
context 'user cannot update merge request' do
let(:current_user) { other_user }
it 'responds with 403' do
expect(response).to have_gitlab_http_status(403)
end
action
end
context 'user can update merge request' do
let(:current_user) { user }
it 'matches the response schema' do
expect(response).to have_gitlab_http_status(200)
expect(response).to match_response_schema('public_api/v4/merge_request_approval_rule', dir: 'ee')
......@@ -322,46 +309,25 @@ describe API::MergeRequestApprovalRules do
end
end
end
end
describe 'DELETE /projects/:id/merge_requests/:merge_request_iid/approval_rules/:approval_rule_id' do
let(:current_user) { user }
let(:approval_rule) { create(:approval_merge_request_rule, merge_request: merge_request) }
let(:url) { "/projects/#{project.id}/merge_requests/#{merge_request.iid}/approval_rules/#{approval_rule.id}" }
let(:action) { delete api(url, current_user) }
context 'disable_overriding_approvers_per_merge_request is set to true' do
before do
project.update!(disable_overriding_approvers_per_merge_request: true)
delete api(url, user)
end
it 'responds with 403' do
expect(response).to have_gitlab_http_status(403)
end
end
it_behaves_like 'a protected API endpoint for merge request approval rule action'
context 'disable_overriding_approvers_per_merge_request is set to false' do
context 'when user can update merge request and approval rules can be overridden' do
before do
project.update!(disable_overriding_approvers_per_merge_request: false)
delete api(url, current_user)
end
context 'user cannot update merge request' do
let(:current_user) { other_user }
it 'responds with 403' do
expect(response).to have_gitlab_http_status(403)
end
action
end
context 'user can update merge request' do
let(:current_user) { user }
it 'responds with 204' do
expect(response).to have_gitlab_http_status(204)
end
end
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment