Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/workers/packages/cleanup_package_file_worker_spec.rb')
-rw-r--r--spec/workers/packages/cleanup_package_file_worker_spec.rb60
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