summaryrefslogtreecommitdiff
path: root/spec/migrations/20200526231421_update_index_approval_rule_name_for_code_owners_rule_type_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/migrations/20200526231421_update_index_approval_rule_name_for_code_owners_rule_type_spec.rb')
-rw-r--r--spec/migrations/20200526231421_update_index_approval_rule_name_for_code_owners_rule_type_spec.rb175
1 files changed, 0 insertions, 175 deletions
diff --git a/spec/migrations/20200526231421_update_index_approval_rule_name_for_code_owners_rule_type_spec.rb b/spec/migrations/20200526231421_update_index_approval_rule_name_for_code_owners_rule_type_spec.rb
deleted file mode 100644
index 9b72559234e..00000000000
--- a/spec/migrations/20200526231421_update_index_approval_rule_name_for_code_owners_rule_type_spec.rb
+++ /dev/null
@@ -1,175 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('update_index_approval_rule_name_for_code_owners_rule_type')
-
-RSpec.describe UpdateIndexApprovalRuleNameForCodeOwnersRuleType do
- let(:migration) { described_class.new }
-
- let(:approval_rules) { table(:approval_merge_request_rules) }
- let(:namespace) { table(:namespaces).create!(name: 'gitlab', path: 'gitlab') }
-
- let(:project) do
- table(:projects).create!(
- namespace_id: namespace.id,
- name: 'gitlab',
- path: 'gitlab'
- )
- end
-
- let(:merge_request) do
- table(:merge_requests).create!(
- target_project_id: project.id,
- source_project_id: project.id,
- target_branch: 'feature',
- source_branch: 'master'
- )
- end
-
- let(:index_names) do
- ActiveRecord::Base.connection
- .indexes(:approval_merge_request_rules)
- .collect(&:name)
- end
-
- def create_sectional_approval_rules
- approval_rules.create!(
- merge_request_id: merge_request.id,
- name: "*.rb",
- code_owner: true,
- rule_type: 2,
- section: "First Section"
- )
-
- approval_rules.create!(
- merge_request_id: merge_request.id,
- name: "*.rb",
- code_owner: true,
- rule_type: 2,
- section: "Second Section"
- )
- end
-
- def create_two_matching_nil_section_approval_rules
- 2.times do
- approval_rules.create!(
- merge_request_id: merge_request.id,
- name: "nil_section",
- code_owner: true,
- rule_type: 2
- )
- end
- end
-
- before do
- approval_rules.delete_all
- end
-
- describe "#up" do
- it "creates the new index and removes the 'legacy' indices" do
- # Confirm that existing legacy indices prevent duplicate entries
- #
- expect { create_sectional_approval_rules }
- .to raise_exception(ActiveRecord::RecordNotUnique)
- expect { create_two_matching_nil_section_approval_rules }
- .to raise_exception(ActiveRecord::RecordNotUnique)
-
- approval_rules.delete_all
-
- disable_migrations_output { migrate! }
-
- # After running the migration, expect `section == nil` rules to still be
- # blocked by the legacy indices, but sectional rules are allowed.
- #
- expect { create_sectional_approval_rules }
- .to change { approval_rules.count }.by(2)
- expect { create_two_matching_nil_section_approval_rules }
- .to raise_exception(ActiveRecord::RecordNotUnique)
-
- # Attempt to rerun the creation of sectional rules, and see that sectional
- # rules are unique by section
- #
- expect { create_sectional_approval_rules }
- .to raise_exception(ActiveRecord::RecordNotUnique)
-
- expect(index_names).to include(
- described_class::SECTIONAL_INDEX_NAME,
- described_class::LEGACY_INDEX_NAME_RULE_TYPE,
- described_class::LEGACY_INDEX_NAME_CODE_OWNERS
- )
- end
- end
-
- describe "#down" do
- context "run as FOSS" do
- before do
- expect(Gitlab).to receive(:ee?).twice.and_return(false)
- end
-
- it "recreates legacy indices, but does not invoke EE-specific code" do
- disable_migrations_output { migrate! }
-
- expect(index_names).to include(
- described_class::SECTIONAL_INDEX_NAME,
- described_class::LEGACY_INDEX_NAME_RULE_TYPE,
- described_class::LEGACY_INDEX_NAME_CODE_OWNERS
- )
-
- # Since ApprovalMergeRequestRules are EE-specific, we expect none to be
- # deleted during the migration.
- #
- expect { disable_migrations_output { migration.down } }
- .not_to change { approval_rules.count }
-
- index_names = ActiveRecord::Base.connection
- .indexes(:approval_merge_request_rules)
- .collect(&:name)
-
- expect(index_names).not_to include(described_class::SECTIONAL_INDEX_NAME)
- expect(index_names).to include(
- described_class::LEGACY_INDEX_NAME_RULE_TYPE,
- described_class::LEGACY_INDEX_NAME_CODE_OWNERS
- )
- end
- end
-
- context "EE" do
- it "recreates 'legacy' indices and removes duplicate code owner approval rules" do
- skip("This test is skipped under FOSS") unless Gitlab.ee?
-
- disable_migrations_output { migrate! }
-
- expect { create_sectional_approval_rules }
- .to change { approval_rules.count }.by(2)
- expect { create_two_matching_nil_section_approval_rules }
- .to raise_exception(ActiveRecord::RecordNotUnique)
-
- expect(MergeRequests::SyncCodeOwnerApprovalRules)
- .to receive(:new).with(MergeRequest.find(merge_request.id)).once.and_call_original
-
- # Run the down migration. This will remove the 3 approval rules we create
- # above, and call MergeRequests::SyncCodeOwnerApprovalRules to recreate
- # new ones. However, as there is no CODEOWNERS file in this test
- # context, no approval rules will be created, so we can expect
- # approval_rules.count to be changed by -3.
- #
- expect { disable_migrations_output { migration.down } }
- .to change { approval_rules.count }.by(-3)
-
- # Test that the index does not allow us to create the same rules as the
- # previous sectional index.
- #
- expect { create_sectional_approval_rules }
- .to raise_exception(ActiveRecord::RecordNotUnique)
- expect { create_two_matching_nil_section_approval_rules }
- .to raise_exception(ActiveRecord::RecordNotUnique)
-
- expect(index_names).not_to include(described_class::SECTIONAL_INDEX_NAME)
- expect(index_names).to include(
- described_class::LEGACY_INDEX_NAME_RULE_TYPE,
- described_class::LEGACY_INDEX_NAME_CODE_OWNERS
- )
- end
- end
- end
-end