239fdc78b1
It gathers list of file paths to delete before destroying the parent object. Then after the parent_object is destroyed these paths are scheduled for deletion asynchronously. Carrierwave needed associated model for deleting upload file. To avoid this requirement, simple Fog/File layer is used directly for file deletion, this allows us to use just a simple list of paths.
45 lines
1.1 KiB
Ruby
45 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
describe Uploads::Local do
|
|
let(:data_store) { described_class.new }
|
|
|
|
before do
|
|
stub_uploads_object_storage(FileUploader)
|
|
end
|
|
|
|
context 'model with uploads' do
|
|
let(:project) { create(:project) }
|
|
let(:relation) { project.uploads }
|
|
|
|
describe '#keys' do
|
|
let!(:uploads) { create_list(:upload, 2, uploader: FileUploader, model: project) }
|
|
subject { data_store.keys(relation) }
|
|
|
|
it 'returns keys' do
|
|
is_expected.to match_array(relation.map(&:absolute_path))
|
|
end
|
|
end
|
|
|
|
describe '#delete_keys' do
|
|
let(:keys) { data_store.keys(relation) }
|
|
let!(:uploads) { create_list(:upload, 2, :with_file, :issuable_upload, model: project) }
|
|
subject { data_store.delete_keys(keys) }
|
|
|
|
it 'deletes multiple data' do
|
|
paths = relation.map(&:absolute_path)
|
|
|
|
paths.each do |path|
|
|
expect(File.exist?(path)).to be_truthy
|
|
end
|
|
|
|
subject
|
|
|
|
paths.each do |path|
|
|
expect(File.exist?(path)).to be_falsey
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|