# 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