diff options
author | Stan Hu <stanhu@gmail.com> | 2018-09-07 07:38:44 -0700 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2018-09-07 07:38:44 -0700 |
commit | 48e993af9bd7e05c95a52e242e2a0bedf628d49a (patch) | |
tree | c6830c76fcc6bf0cb32d6fe25b2041807e6a5d12 /spec | |
parent | 272281e4729c9e2193acea84394a191cfe2496af (diff) | |
download | gitlab-ce-48e993af9bd7e05c95a52e242e2a0bedf628d49a.tar.gz |
Remove orphaned label links
On GitLab.com, there are over 2 million orphaned label links out of
a total of 13 million. These orphaned label links can cause
quiet failures, such as unexpected nil values in ExportCsvWorker.
Closes gitlab-org/gitlab-ee#7482
Diffstat (limited to 'spec')
-rw-r--r-- | spec/migrations/remove_orphaned_label_links_spec.rb | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/spec/migrations/remove_orphaned_label_links_spec.rb b/spec/migrations/remove_orphaned_label_links_spec.rb new file mode 100644 index 00000000000..13b8919343e --- /dev/null +++ b/spec/migrations/remove_orphaned_label_links_spec.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +require 'spec_helper' +require Rails.root.join('db', 'post_migrate', '20180906051323_remove_orphaned_label_links.rb') + +describe RemoveOrphanedLabelLinks, :migration do + let(:label_links) { table(:label_links) } + let(:labels) { table(:labels) } + + let(:project) { create(:project) } # rubocop:disable RSpec/FactoriesInMigrationSpecs + let(:label) { create_label } + + context 'add foreign key on label_id' do + let!(:label_link_with_label) { create_label_link(label_id: label.id) } + let!(:label_link_without_label) { create_label_link(label_id: nil) } + + it 'removes orphaned labels without corresponding label' do + expect { migrate! }.to change { LabelLink.count }.from(2).to(1) + end + + it 'does not remove entries with valid label_id' do + expect { migrate! }.not_to change { label_link_with_label.reload } + end + end + + def create_label(**opts) + labels.create!( + project_id: project.id, + **opts + ) + end + + def create_label_link(**opts) + label_links.create!( + target_id: 1, + target_type: 'Issue', + **opts + ) + end +end |