diff options
Diffstat (limited to 'spec/workers/packages')
-rw-r--r-- | spec/workers/packages/cleanup_package_file_worker_spec.rb | 60 |
1 files changed, 48 insertions, 12 deletions
diff --git a/spec/workers/packages/cleanup_package_file_worker_spec.rb b/spec/workers/packages/cleanup_package_file_worker_spec.rb index 33f89826312..380e8916d13 100644 --- a/spec/workers/packages/cleanup_package_file_worker_spec.rb +++ b/spec/workers/packages/cleanup_package_file_worker_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' RSpec.describe Packages::CleanupPackageFileWorker do - let_it_be(:package) { create(:package) } + let_it_be_with_reload(:package) { create(:package) } let(:worker) { described_class.new } @@ -23,24 +23,60 @@ RSpec.describe Packages::CleanupPackageFileWorker do expect(worker).to receive(:log_extra_metadata_on_done).twice expect { subject }.to change { Packages::PackageFile.count }.by(-1) - .and not_change { Packages::Package.count } + .and not_change { Packages::Package.count } + expect { package_file2.reload }.to raise_error(ActiveRecord::RecordNotFound) + end + + context 'with a duplicated PyPI package file' do + let_it_be_with_reload(:duplicated_package_file) { create(:package_file, package: package) } + + before do + package.update!(package_type: :pypi, version: '1.2.3') + duplicated_package_file.update_column(:file_name, package_file2.file_name) + end + + it 'deletes one of the duplicates' do + expect { subject }.to change { Packages::PackageFile.count }.by(-1) + .and not_change { Packages::Package.count } + expect { package_file2.reload }.to raise_error(ActiveRecord::RecordNotFound) + end end end - context 'with an error during the destroy' do + context 'with a package file to destroy' do let_it_be(:package_file) { create(:package_file, :pending_destruction) } - before do - expect(worker).to receive(:log_metadata).and_raise('Error!') + context 'with an error during the destroy' do + before do + allow(worker).to receive(:log_metadata).and_raise('Error!') + end + + it 'handles the error' do + expect { subject }.to change { Packages::PackageFile.error.count }.from(0).to(1) + expect(package_file.reload).to be_error + end end - it 'handles the error' do - expect { subject }.to change { Packages::PackageFile.error.count }.from(0).to(1) - expect(package_file.reload).to be_error + context 'when trying to destroy a destroyed record' do + before do + allow_next_found_instance_of(Packages::PackageFile) do |package_file| + destroy_method = package_file.method(:destroy!) + + allow(package_file).to receive(:destroy!) do + destroy_method.call + + raise 'Error!' + end + end + end + + it 'handles the error' do + expect { subject }.to change { Packages::PackageFile.count }.by(-1) + end end end - context 'removing the last package file' do + describe 'removing the last package file' do let_it_be(:package_file) { create(:package_file, :pending_destruction, package: package) } it 'deletes the package file and the package' do @@ -65,12 +101,12 @@ RSpec.describe Packages::CleanupPackageFileWorker do end describe '#remaining_work_count' do - before(:context) do - create_list(:package_file, 3, :pending_destruction, package: package) + before_all do + create_list(:package_file, 2, :pending_destruction, package: package) end subject { worker.remaining_work_count } - it { is_expected.to eq(3) } + it { is_expected.to eq(2) } end end |