diff options
Diffstat (limited to 'spec/presenters/packages')
6 files changed, 98 insertions, 13 deletions
diff --git a/spec/presenters/packages/conan/package_presenter_spec.rb b/spec/presenters/packages/conan/package_presenter_spec.rb index 6d82c5ef547..27ecf32b6f2 100644 --- a/spec/presenters/packages/conan/package_presenter_spec.rb +++ b/spec/presenters/packages/conan/package_presenter_spec.rb @@ -9,6 +9,7 @@ RSpec.describe ::Packages::Conan::PackagePresenter do let_it_be(:conan_package_reference) { '123456789'} let(:params) { { package_scope: :instance } } + let(:presenter) { described_class.new(package, user, project, params) } shared_examples 'no existing package' do context 'when package does not exist' do @@ -21,7 +22,7 @@ RSpec.describe ::Packages::Conan::PackagePresenter do shared_examples 'conan_file_metadatum is not found' do context 'when no conan_file_metadatum exists' do before do - package.package_files.each do |file| + package.installable_package_files.each do |file| file.conan_file_metadatum.delete file.reload end @@ -32,7 +33,7 @@ RSpec.describe ::Packages::Conan::PackagePresenter do end describe '#recipe_urls' do - subject { described_class.new(package, user, project, params).recipe_urls } + subject { presenter.recipe_urls } it_behaves_like 'no existing package' it_behaves_like 'conan_file_metadatum is not found' @@ -71,7 +72,9 @@ RSpec.describe ::Packages::Conan::PackagePresenter do end describe '#recipe_snapshot' do - subject { described_class.new(package, user, project).recipe_snapshot } + let(:params) { {} } + + subject { presenter.recipe_snapshot } it_behaves_like 'no existing package' it_behaves_like 'conan_file_metadatum is not found' @@ -180,12 +183,9 @@ RSpec.describe ::Packages::Conan::PackagePresenter do describe '#package_snapshot' do let(:reference) { conan_package_reference } + let(:params) { { conan_package_reference: reference } } - subject do - described_class.new( - package, user, project, conan_package_reference: reference - ).package_snapshot - end + subject { presenter.package_snapshot } it_behaves_like 'no existing package' it_behaves_like 'conan_file_metadatum is not found' @@ -208,4 +208,22 @@ RSpec.describe ::Packages::Conan::PackagePresenter do end end end + + # TODO when cleaning up packages_installable_package_files, consider removing this context and + # add a dummy package file pending destruction on L8 + context 'with package files pending destruction' do + let_it_be(:package_file_pending_destruction) { create(:package_file, :pending_destruction, package: package) } + + subject { presenter.send(:package_files).to_a } + + it { is_expected.not_to include(package_file_pending_destruction) } + + context 'with packages_installable_package_files disabled' do + before do + stub_feature_flags(packages_installable_package_files: false) + end + + it { is_expected.to include(package_file_pending_destruction) } + end + end end diff --git a/spec/presenters/packages/detail/package_presenter_spec.rb b/spec/presenters/packages/detail/package_presenter_spec.rb index 3009f2bd56d..4e2645b27ff 100644 --- a/spec/presenters/packages/detail/package_presenter_spec.rb +++ b/spec/presenters/packages/detail/package_presenter_spec.rb @@ -6,12 +6,12 @@ RSpec.describe ::Packages::Detail::PackagePresenter do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project, creator: user) } let_it_be(:package) { create(:npm_package, :with_build, project: project) } - let(:presenter) { described_class.new(package) } - let_it_be(:user_info) { { name: user.name, avatar_url: user.avatar_url } } + let(:presenter) { described_class.new(package) } + let!(:expected_package_files) do - package.package_files.map do |file| + package.installable_package_files.map do |file| { created_at: file.created_at, download_path: file.download_path, @@ -154,5 +154,21 @@ RSpec.describe ::Packages::Detail::PackagePresenter do expect(presenter.detail_view).to eq expected_package_details end end + + context 'with package files pending destruction' do + let_it_be(:package_file_pending_destruction) { create(:package_file, :pending_destruction, package: package) } + + subject { presenter.detail_view[:package_files].map { |e| e[:id] } } + + it { is_expected.not_to include(package_file_pending_destruction.id) } + + context 'with packages_installable_package_files disabled' do + before do + stub_feature_flags(packages_installable_package_files: false) + end + + it { is_expected.to include(package_file_pending_destruction.id) } + end + end end end diff --git a/spec/presenters/packages/npm/package_presenter_spec.rb b/spec/presenters/packages/npm/package_presenter_spec.rb index 3b6dfcd20b8..2308f928c92 100644 --- a/spec/presenters/packages/npm/package_presenter_spec.rb +++ b/spec/presenters/packages/npm/package_presenter_spec.rb @@ -95,6 +95,27 @@ RSpec.describe ::Packages::Npm::PackagePresenter do end end end + + context 'with package files pending destruction' do + let_it_be(:package_file_pending_destruction) { create(:package_file, :pending_destruction, package: package2, file_sha1: 'pending_destruction_sha1') } + + let(:shasums) { subject.values.map { |v| v.dig(:dist, :shasum) } } + + it 'does not return them' do + expect(shasums).not_to include(package_file_pending_destruction.file_sha1) + end + + context 'with packages_installable_package_files disabled' do + before do + stub_feature_flags(packages_installable_package_files: false) + package2.package_files.id_not_in(package_file_pending_destruction.id).delete_all + end + + it 'returns them' do + expect(shasums).to include(package_file_pending_destruction.file_sha1) + end + end + end end describe '#dist_tags' do diff --git a/spec/presenters/packages/nuget/package_metadata_presenter_spec.rb b/spec/presenters/packages/nuget/package_metadata_presenter_spec.rb index 8bb0694f39c..6e99b6bafec 100644 --- a/spec/presenters/packages/nuget/package_metadata_presenter_spec.rb +++ b/spec/presenters/packages/nuget/package_metadata_presenter_spec.rb @@ -24,6 +24,20 @@ RSpec.describe Packages::Nuget::PackageMetadataPresenter do subject { presenter.archive_url } it { is_expected.to end_with(expected_suffix) } + + context 'with package files pending destruction' do + let_it_be(:package_file_pending_destruction) { create(:package_file, :pending_destruction, package: package, file_name: 'pending_destruction.nupkg') } + + it { is_expected.not_to include('pending_destruction.nupkg') } + + context 'with packages_installable_package_files disabled' do + before do + stub_feature_flags(packages_installable_package_files: false) + end + + it { is_expected.to include('pending_destruction.nupkg') } + end + end end describe '#catalog_entry' do diff --git a/spec/presenters/packages/nuget/search_results_presenter_spec.rb b/spec/presenters/packages/nuget/search_results_presenter_spec.rb index 39ec7251dfd..745914c6c43 100644 --- a/spec/presenters/packages/nuget/search_results_presenter_spec.rb +++ b/spec/presenters/packages/nuget/search_results_presenter_spec.rb @@ -9,9 +9,9 @@ RSpec.describe Packages::Nuget::SearchResultsPresenter do let_it_be(:tag2) { create(:packages_tag, package: package_a, name: 'tag2') } let_it_be(:packages_b) { create_list(:nuget_package, 5, project: project, name: 'DummyPackageB') } let_it_be(:packages_c) { create_list(:nuget_package, 5, project: project, name: 'DummyPackageC') } - let_it_be(:search_results) { OpenStruct.new(total_count: 3, results: [package_a, packages_b, packages_c].flatten) } - let_it_be(:presenter) { described_class.new(search_results) } + let(:search_results) { double('search_results', total_count: 3, results: [package_a, packages_b, packages_c].flatten) } + let(:presenter) { described_class.new(search_results) } let(:total_count) { presenter.total_count } let(:data) { presenter.data } diff --git a/spec/presenters/packages/pypi/package_presenter_spec.rb b/spec/presenters/packages/pypi/package_presenter_spec.rb index 25aa5c31034..8a23c0ec3cb 100644 --- a/spec/presenters/packages/pypi/package_presenter_spec.rb +++ b/spec/presenters/packages/pypi/package_presenter_spec.rb @@ -52,5 +52,21 @@ RSpec.describe ::Packages::Pypi::PackagePresenter do it_behaves_like 'pypi package presenter' end + + context 'with package files pending destruction' do + let_it_be(:package_file_pending_destruction) { create(:package_file, :pending_destruction, package: package1, file_name: "package_file_pending_destruction") } + + let(:project_or_group) { project } + + it { is_expected.not_to include(package_file_pending_destruction.file_name)} + + context 'with packages_installable_package_files disabled' do + before do + stub_feature_flags(packages_installable_package_files: false) + end + + it { is_expected.to include(package_file_pending_destruction.file_name)} + end + end end end |