Commit 7abd6894 authored by Mark Chao's avatar Mark Chao

Allow MR rule to store its source project rule

This is to enable MR override rule's `approvals_required` is never
less than the project rule's.
parent 9f062ceb
......@@ -219,6 +219,13 @@ ActiveRecord::Schema.define(version: 20190103140724) do
t.index ["usage_stats_set_by_user_id"], name: "index_application_settings_on_usage_stats_set_by_user_id", using: :btree
end
create_table "approval_merge_request_rule_sources", id: :bigserial, force: :cascade do |t|
t.bigint "approval_merge_request_rule_id", null: false
t.bigint "approval_project_rule_id", null: false
t.index ["approval_merge_request_rule_id"], name: "index_approval_merge_request_rule_sources_1", unique: true, using: :btree
t.index ["approval_project_rule_id"], name: "index_approval_merge_request_rule_sources_2", using: :btree
end
create_table "approval_merge_request_rules", id: :bigserial, force: :cascade do |t|
t.datetime_with_timezone "created_at", null: false
t.datetime_with_timezone "updated_at", null: false
......@@ -3217,6 +3224,8 @@ ActiveRecord::Schema.define(version: 20190103140724) do
add_foreign_key "application_settings", "namespaces", column: "custom_project_templates_group_id", on_delete: :nullify
add_foreign_key "application_settings", "projects", column: "file_template_project_id", name: "fk_ec757bd087", on_delete: :nullify
add_foreign_key "application_settings", "users", column: "usage_stats_set_by_user_id", name: "fk_964370041d", on_delete: :nullify
add_foreign_key "approval_merge_request_rule_sources", "approval_merge_request_rules", on_delete: :cascade
add_foreign_key "approval_merge_request_rule_sources", "approval_project_rules", on_delete: :cascade
add_foreign_key "approval_merge_request_rules", "merge_requests", on_delete: :cascade
add_foreign_key "approval_merge_request_rules_approvals", "approval_merge_request_rules", on_delete: :cascade
add_foreign_key "approval_merge_request_rules_approvals", "approvals", on_delete: :cascade
......
......@@ -10,6 +10,8 @@ class ApprovalMergeRequestRule < ApplicationRecord
has_and_belongs_to_many :approvals # This is only populated after merge request is merged
has_many :approved_approvers, through: :approvals, source: :user
has_one :approval_merge_request_rule_source
has_one :approval_project_rule, through: :approval_merge_request_rule_source
def project
merge_request.target_project
......
# frozen_string_literal: true
# Allow MR rule to lookup its project rule source
class ApprovalMergeRequestRuleSource < ApplicationRecord
belongs_to :approval_merge_request_rule
belongs_to :approval_project_rule
end
# frozen_string_literal: true
class CreateApprovalMergeRequestRulesApprovalProjectRules < ActiveRecord::Migration[5.0]
include Gitlab::Database::MigrationHelpers
DOWNTIME = false
def change
create_table(:approval_merge_request_rule_sources, id: :bigserial) do |t|
t.references(
:approval_merge_request_rule,
type: :bigint,
null: false,
foreign_key: { on_delete: :cascade },
index: { name: 'index_approval_merge_request_rule_sources_1', unique: true }
)
t.references(
:approval_project_rule,
type: :bigint,
null: false,
foreign_key: { on_delete: :cascade },
index: { name: 'index_approval_merge_request_rule_sources_2' }
)
end
end
end
......@@ -49,15 +49,14 @@ describe MergeRequest do
let!(:approval2) { create(:approval, merge_request: subject, user: member3) }
let!(:approval3) { create(:approval, merge_request: subject, user: group1_member) }
let!(:approval4) { create(:approval, merge_request: subject, user: group2_member) }
let!(:project_rule) { create(:approval_project_rule, project: project, name: 'foo', approvals_required: 12) }
before do
group1.add_guest(group1_member)
group2.add_guest(group2_member)
rule = create(:approval_project_rule, project: project, name: 'foo', approvals_required: 12)
rule.users = [member1, member2]
rule.groups << group1
project_rule.users = [member1, member2]
project_rule.groups << group1
end
shared_examples 'skipping when unmerged' 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