diff options
Diffstat (limited to 'spec/lib/gitlab/background_migration/add_modified_to_approval_merge_request_rule_spec.rb')
-rw-r--r-- | spec/lib/gitlab/background_migration/add_modified_to_approval_merge_request_rule_spec.rb | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/spec/lib/gitlab/background_migration/add_modified_to_approval_merge_request_rule_spec.rb b/spec/lib/gitlab/background_migration/add_modified_to_approval_merge_request_rule_spec.rb new file mode 100644 index 00000000000..81b8b5dde08 --- /dev/null +++ b/spec/lib/gitlab/background_migration/add_modified_to_approval_merge_request_rule_spec.rb @@ -0,0 +1,61 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::BackgroundMigration::AddModifiedToApprovalMergeRequestRule, schema: 20200817195628 do + let(:determine_if_rules_are_modified) { described_class.new } + + let(:namespace) { table(:namespaces).create!(name: 'gitlab', path: 'gitlab') } + let(:projects) { table(:projects) } + let(:normal_project) { projects.create!(namespace_id: namespace.id) } + let(:overridden_project) { projects.create!(namespace_id: namespace.id) } + let(:rules) { table(:approval_merge_request_rules) } + let(:project_rules) { table(:approval_project_rules) } + let(:sources) { table(:approval_merge_request_rule_sources) } + let(:merge_requests) { table(:merge_requests) } + let(:groups) { table(:namespaces) } + let(:mr_groups) { table(:approval_merge_request_rules_groups) } + let(:project_groups) { table(:approval_project_rules_groups) } + + before do + project_rule = project_rules.create!(project_id: normal_project.id, approvals_required: 3, name: 'test rule') + overridden_project_rule = project_rules.create!(project_id: overridden_project.id, approvals_required: 5, name: 'other test rule') + overridden_project_rule_two = project_rules.create!(project_id: overridden_project.id, approvals_required: 7, name: 'super cool rule') + + merge_request = merge_requests.create!(target_branch: 'feature', source_branch: 'default', source_project_id: normal_project.id, target_project_id: normal_project.id) + overridden_merge_request = merge_requests.create!(target_branch: 'feature-2', source_branch: 'default', source_project_id: overridden_project.id, target_project_id: overridden_project.id) + + merge_rule = rules.create!(merge_request_id: merge_request.id, approvals_required: 3, name: 'test rule') + overridden_merge_rule = rules.create!(merge_request_id: overridden_merge_request.id, approvals_required: 6, name: 'other test rule') + overridden_merge_rule_two = rules.create!(merge_request_id: overridden_merge_request.id, approvals_required: 7, name: 'super cool rule') + + sources.create!(approval_project_rule_id: project_rule.id, approval_merge_request_rule_id: merge_rule.id) + sources.create!(approval_project_rule_id: overridden_project_rule.id, approval_merge_request_rule_id: overridden_merge_rule.id) + sources.create!(approval_project_rule_id: overridden_project_rule_two.id, approval_merge_request_rule_id: overridden_merge_rule_two.id) + + group1 = groups.create!(name: "group1", path: "test_group1", type: 'Group') + group2 = groups.create!(name: "group2", path: "test_group2", type: 'Group') + group3 = groups.create!(name: "group3", path: "test_group3", type: 'Group') + + project_groups.create!(approval_project_rule_id: overridden_project_rule_two.id, group_id: group1.id) + project_groups.create!(approval_project_rule_id: overridden_project_rule_two.id, group_id: group2.id) + project_groups.create!(approval_project_rule_id: overridden_project_rule_two.id, group_id: group3.id) + + mr_groups.create!(approval_merge_request_rule_id: overridden_merge_rule.id, group_id: group1.id) + mr_groups.create!(approval_merge_request_rule_id: overridden_merge_rule_two.id, group_id: group2.id) + end + + describe '#perform' do + it 'changes the correct rules' do + original_count = rules.all.count + + determine_if_rules_are_modified.perform(rules.minimum(:id), rules.maximum(:id)) + + results = rules.where(modified_from_project_rule: true) + + expect(results.count).to eq 2 + expect(results.collect(&:name)).to eq(['other test rule', 'super cool rule']) + expect(rules.count).to eq original_count + end + end +end |