Commit 651d8a22 authored by Paul Slaughter's avatar Paul Slaughter Committed by Mark Chao

Expose props for source rule

Neded for client side validation
and needed to know if a MR rule should be editable or not.
parent ab32a054
......@@ -14,6 +14,7 @@ class ApprovalMergeRequestRule < ApplicationRecord
has_and_belongs_to_many :approved_approvers, class_name: 'User', join_table: :approval_merge_request_rules_approved_approvers
has_one :approval_merge_request_rule_source
has_one :approval_project_rule, through: :approval_merge_request_rule_source
alias_method :source_rule, :approval_project_rule
validate :validate_approvals_required
......
......@@ -18,4 +18,8 @@ class ApprovalProjectRule < ApplicationRecord
false
end
alias_method :code_owner?, :code_owner
def source_rule
nil
end
end
......@@ -8,7 +8,7 @@ class ApprovalWrappedRule
attr_reader :merge_request
attr_reader :approval_rule
def_delegators :@approval_rule, :id, :name, :users, :groups, :approvals_required, :code_owner
def_delegators :@approval_rule, :id, :name, :users, :groups, :approvals_required, :code_owner, :source_rule
def initialize(merge_request, approval_rule)
@merge_request = merge_request
......
......@@ -257,8 +257,13 @@ module EE
end
class MergeRequestApprovalRule < ApprovalRule
class SourceRule < Grape::Entity
expose :approvals_required
end
expose :approved_approvers, as: :approved_by, using: ::API::Entities::UserBasic
expose :code_owner
expose :source_rule, using: SourceRule
end
# Decorates ApprovalState
......
......@@ -499,6 +499,28 @@ describe "API::MergeRequestApprovals with approval_rule enabled" do
expect(rule_response['name']).to eq('foo')
expect(rule_response['approvers'][0]['username']).to eq(approver.username)
expect(rule_response['approved_by'][0]['username']).to eq(approver.username)
expect(rule_response['source_rule']).to eq(nil)
end
context 'when source rule is present' do
let!(:source_rule) { create(:approval_project_rule, project: project, approvals_required: 1, name: 'zoo') }
let!(:rule) { create(:approval_merge_request_rule, merge_request: merge_request, approvals_required: 2, name: 'foo') }
it 'returns source rule details' do
project.add_developer(approver)
merge_request.approvals.create(user: approver)
rule.users << approver
rule.create_approval_merge_request_rule_source!(approval_project_rule: source_rule)
get api("/projects/#{project.id}/merge_requests/#{merge_request.iid}/approval_settings", user)
expect(response).to have_gitlab_http_status(200)
expect(json_response['rules'].size).to eq(1)
rule_response = json_response['rules'].first
expect(rule_response['source_rule']['approvals_required']).to eq(source_rule.approvals_required)
end
end
it 'excludes private groups' do
......
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