This way we reduce the hypothetical problems we could find if executing the task several times.
76 lines
2.6 KiB
Ruby
76 lines
2.6 KiB
Ruby
require "rails_helper"
|
|
|
|
describe "active storage tasks" do
|
|
describe "migrate_from_paperclip" do
|
|
let(:run_rake_task) do
|
|
Rake::Task["active_storage:migrate_from_paperclip"].reenable
|
|
Rake.application.invoke_task("active_storage:migrate_from_paperclip")
|
|
end
|
|
|
|
let(:storage_root) { ActiveStorage::Blob.service.root }
|
|
before { FileUtils.rm_rf storage_root }
|
|
|
|
it "migrates records and attachments" do
|
|
document = create(:document,
|
|
attachment: nil,
|
|
paperclip_attachment: File.new("spec/fixtures/files/clippy.pdf"))
|
|
|
|
expect(ActiveStorage::Attachment.count).to eq 0
|
|
expect(ActiveStorage::Blob.count).to eq 0
|
|
expect(test_storage_file_paths.count).to eq 0
|
|
|
|
run_rake_task
|
|
document.reload
|
|
|
|
expect(ActiveStorage::Attachment.count).to eq 1
|
|
expect(ActiveStorage::Blob.count).to eq 1
|
|
expect(document.storage_attachment.filename).to eq "clippy.pdf"
|
|
expect(test_storage_file_paths.count).to eq 1
|
|
expect(storage_file_path(document)).to eq test_storage_file_paths.first
|
|
end
|
|
|
|
it "migrates records with deleted files ignoring the files" do
|
|
document = create(:document,
|
|
attachment: nil,
|
|
paperclip_attachment: File.new("spec/fixtures/files/clippy.pdf"))
|
|
FileUtils.rm(document.attachment.path)
|
|
|
|
run_rake_task
|
|
document.reload
|
|
|
|
expect(ActiveStorage::Attachment.count).to eq 1
|
|
expect(ActiveStorage::Blob.count).to eq 1
|
|
expect(document.storage_attachment.filename).to eq "clippy.pdf"
|
|
expect(test_storage_file_paths.count).to eq 0
|
|
end
|
|
|
|
it "does not migrate already migrated records" do
|
|
document = create(:document, attachment: File.new("spec/fixtures/files/clippy.pdf"))
|
|
|
|
migrated_file = test_storage_file_paths.first
|
|
attachment_id = document.storage_attachment.attachment.id
|
|
blob_id = document.storage_attachment.blob.id
|
|
|
|
run_rake_task
|
|
document.reload
|
|
|
|
expect(ActiveStorage::Attachment.count).to eq 1
|
|
expect(ActiveStorage::Blob.count).to eq 1
|
|
expect(document.storage_attachment.attachment.id).to eq attachment_id
|
|
expect(document.storage_attachment.blob.id).to eq blob_id
|
|
|
|
expect(test_storage_file_paths.count).to eq 1
|
|
expect(storage_file_path(document)).to eq migrated_file
|
|
expect(test_storage_file_paths.first).to eq migrated_file
|
|
end
|
|
|
|
def test_storage_file_paths
|
|
Dir.glob("#{storage_root}/**/*").select { |file_or_folder| File.file?(file_or_folder) }
|
|
end
|
|
|
|
def storage_file_path(record)
|
|
ActiveStorage::Blob.service.path_for(record.storage_attachment.blob.key)
|
|
end
|
|
end
|
|
end
|