diff --git a/spec/migrations/delete_inconsistent_internal_id_records_spec.rb b/spec/migrations/delete_inconsistent_internal_id_records_spec.rb index e2ce69a7bb1..58b8b4a16f0 100644 --- a/spec/migrations/delete_inconsistent_internal_id_records_spec.rb +++ b/spec/migrations/delete_inconsistent_internal_id_records_spec.rb @@ -1,25 +1,36 @@ # frozen_string_literal: true -# rubocop:disable RSpec/FactoriesInMigrationSpecs + require 'spec_helper' require Rails.root.join('db', 'post_migrate', '20180723130817_delete_inconsistent_internal_id_records.rb') describe DeleteInconsistentInternalIdRecords, :migration do - let!(:project1) { create(:project) } - let!(:project2) { create(:project) } - let!(:project3) { create(:project) } + let!(:namespace) { table(:namespaces).create!(name: 'test', path: 'test') } + let!(:project1) { table(:projects).create!(namespace_id: namespace.id) } + let!(:project2) { table(:projects).create!(namespace_id: namespace.id) } + let!(:project3) { table(:projects).create!(namespace_id: namespace.id) } - let(:internal_id_query) { ->(project) { InternalId.where(usage: InternalId.usages[scope.to_s.tableize], project: project) } } + let(:internal_ids) { table(:internal_ids) } + let(:internal_id_query) { ->(project) { InternalId.where(usage: InternalId.usages[scope.to_s.tableize], project_id: project.id) } } let(:create_models) do - 3.times { create(scope, project: project1) } - 3.times { create(scope, project: project2) } - 3.times { create(scope, project: project3) } + [project1, project2, project3].each do |project| + 3.times do |i| + attributes = required_attributes.merge(project_id: project.id, + iid: i.succ) + + table(scope.to_s.pluralize).create!(attributes) + end + end end shared_examples_for 'deleting inconsistent internal_id records' do before do create_models + [project1, project2, project3].each do |project| + internal_ids.create!(project_id: project.id, usage: InternalId.usages[scope.to_s.tableize], last_value: 3) + end + internal_id_query.call(project1).first.tap do |iid| iid.last_value = iid.last_value - 2 # This is an inconsistent record @@ -33,11 +44,11 @@ describe DeleteInconsistentInternalIdRecords, :migration do end end - it "deletes inconsistent issues" do + it "deletes inconsistent records" do expect { migrate! }.to change { internal_id_query.call(project1).size }.from(1).to(0) end - it "retains consistent issues" do + it "retains consistent records" do expect { migrate! }.not_to change { internal_id_query.call(project2).size } end @@ -48,6 +59,8 @@ describe DeleteInconsistentInternalIdRecords, :migration do context 'for issues' do let(:scope) { :issue } + let(:required_attributes) { {} } + it_behaves_like 'deleting inconsistent internal_id records' end @@ -55,9 +68,17 @@ describe DeleteInconsistentInternalIdRecords, :migration do let(:scope) { :merge_request } let(:create_models) do - 3.times { |i| create(scope, target_project: project1, source_project: project1, source_branch: i.to_s) } - 3.times { |i| create(scope, target_project: project2, source_project: project2, source_branch: i.to_s) } - 3.times { |i| create(scope, target_project: project3, source_project: project3, source_branch: i.to_s) } + [project1, project2, project3].each do |project| + 3.times do |i| + table(:merge_requests).create!( + target_project_id: project.id, + source_project_id: project.id, + target_branch: 'master', + source_branch: j.to_s, + iid: i.succ + ) + end + end end it_behaves_like 'deleting inconsistent internal_id records' @@ -66,13 +87,6 @@ describe DeleteInconsistentInternalIdRecords, :migration do context 'for deployments' do let(:scope) { :deployment } let(:deployments) { table(:deployments) } - let(:internal_ids) { table(:internal_ids) } - - before do - internal_ids.create!(project_id: project1.id, usage: 2, last_value: 2) - internal_ids.create!(project_id: project2.id, usage: 2, last_value: 2) - internal_ids.create!(project_id: project3.id, usage: 2, last_value: 2) - end let(:create_models) do 3.times { |i| deployments.create!(project_id: project1.id, iid: i, environment_id: 1, ref: 'master', sha: 'a', tag: false) } @@ -85,17 +99,14 @@ describe DeleteInconsistentInternalIdRecords, :migration do context 'for milestones (by project)' do let(:scope) { :milestone } + let(:required_attributes) { { title: 'test' } } + it_behaves_like 'deleting inconsistent internal_id records' end context 'for ci_pipelines' do let(:scope) { :ci_pipeline } - - let(:create_models) do - create_list(:ci_empty_pipeline, 3, project: project1) - create_list(:ci_empty_pipeline, 3, project: project2) - create_list(:ci_empty_pipeline, 3, project: project3) - end + let(:required_attributes) { { ref: 'test' } } it_behaves_like 'deleting inconsistent internal_id records' end @@ -107,12 +118,20 @@ describe DeleteInconsistentInternalIdRecords, :migration do let(:group2) { groups.create(name: 'Group 2', type: 'Group', path: 'group_2') } let(:group3) { groups.create(name: 'Group 2', type: 'Group', path: 'group_3') } - let(:internal_id_query) { ->(group) { InternalId.where(usage: InternalId.usages['milestones'], namespace: group) } } + let(:internal_id_query) { ->(group) { InternalId.where(usage: InternalId.usages['milestones'], namespace_id: group.id) } } before do - 3.times { create(:milestone, group_id: group1.id) } - 3.times { create(:milestone, group_id: group2.id) } - 3.times { create(:milestone, group_id: group3.id) } + [group1, group2, group3].each do |group| + 3.times do |i| + table(:milestones).create!( + group_id: group.id, + title: 'test', + iid: i.succ + ) + end + + internal_ids.create!(namespace_id: group.id, usage: InternalId.usages['milestones'], last_value: 3) + end internal_id_query.call(group1).first.tap do |iid| iid.last_value = iid.last_value - 2 @@ -127,11 +146,11 @@ describe DeleteInconsistentInternalIdRecords, :migration do end end - it "deletes inconsistent issues" do + it "deletes inconsistent records" do expect { migrate! }.to change { internal_id_query.call(group1).size }.from(1).to(0) end - it "retains consistent issues" do + it "retains consistent records" do expect { migrate! }.not_to change { internal_id_query.call(group2).size } end