debian-mirror-gitlab/spec/lib/gitlab/background_migration/legacy_uploads_migrator_spec.rb
2021-02-22 17:27:13 +05:30

72 lines
2.5 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
# rubocop: disable RSpec/FactoriesInMigrationSpecs
RSpec.describe Gitlab::BackgroundMigration::LegacyUploadsMigrator do
let(:test_dir) { FileUploader.options['storage_path'] }
let!(:hashed_project) { create(:project) }
let!(:legacy_project) { create(:project, :legacy_storage) }
let!(:issue) { create(:issue, project: hashed_project) }
let!(:issue_legacy) { create(:issue, project: legacy_project) }
let!(:note1) { create(:note, project: hashed_project, noteable: issue) }
let!(:note2) { create(:note, project: hashed_project, noteable: issue) }
let!(:note_legacy) { create(:note, project: legacy_project, noteable: issue_legacy) }
def create_upload(model, with_file = true)
filename = 'image.png'
params = {
path: "uploads/-/system/note/attachment/#{model.id}/#{filename}",
model: model,
store: ObjectStorage::Store::LOCAL
}
if with_file
upload = create(:upload, :with_file, :attachment_upload, params)
model.update!(attachment: upload.retrieve_uploader)
model.attachment.upload
else
create(:upload, :attachment_upload, params)
end
end
let!(:legacy_upload) { create_upload(note1) }
let!(:legacy_upload_no_file) { create_upload(note2, false) }
let!(:legacy_upload_legacy_project) { create_upload(note_legacy) }
let!(:appearance) { create(:appearance, :with_logo) }
let(:start_id) { 1 }
let(:end_id) { 10000 }
subject { described_class.new.perform(start_id, end_id) }
it 'removes all legacy files' do
expect(File.exist?(legacy_upload.absolute_path)).to be_truthy
expect(File.exist?(legacy_upload_no_file.absolute_path)).to be_falsey
expect(File.exist?(legacy_upload_legacy_project.absolute_path)).to be_truthy
subject
expect(File.exist?(legacy_upload.absolute_path)).to be_falsey
expect(File.exist?(legacy_upload_no_file.absolute_path)).to be_falsey
expect(File.exist?(legacy_upload_legacy_project.absolute_path)).to be_falsey
end
it 'removes all Note AttachmentUploader records' do
expect { subject }.to change { Upload.where(uploader: 'AttachmentUploader').count }.from(4).to(1)
end
it 'creates new uploads for successfully migrated records' do
expect { subject }.to change { Upload.where(uploader: 'FileUploader').count }.from(0).to(2)
end
it 'does not remove appearance uploads' do
subject
expect(appearance.logo.file).to exist
end
end
# rubocop: enable RSpec/FactoriesInMigrationSpecs