diff --git a/app/finders/packages/group_or_project_package_finder.rb b/app/finders/packages/group_or_project_package_finder.rb index 470502ef58e1697cbfbec2958cc37fcfe1e5a53a..d1a8dfd923181f9468acc391b9317865ede0d1af 100644 --- a/app/finders/packages/group_or_project_package_finder.rb +++ b/app/finders/packages/group_or_project_package_finder.rb @@ -51,7 +51,7 @@ def group_packages end def packages_class - @params.fetch(:packages_class, ::Packages::Package) + ::Packages::Package end end end diff --git a/app/finders/packages/pypi/package_finder.rb b/app/finders/packages/pypi/package_finder.rb index 4026622171d2ce05fc36cb7eab43bc8f8949a9d4..37a01c8d1453af70b4eadf61c791e1a135039dc3 100644 --- a/app/finders/packages/pypi/package_finder.rb +++ b/app/finders/packages/pypi/package_finder.rb @@ -5,14 +5,6 @@ module Pypi class PackageFinder < ::Packages::GroupOrProjectPackageFinder extend ::Gitlab::Utils::Override - def initialize(current_user, project_or_group, params = {}) - if Feature.enabled?(:pypi_extract_pypi_package_model, Feature.current_request) - params[:packages_class] = ::Packages::Pypi::Package - end - - super - end - def execute packages.by_file_name_and_sha256(@params[:filename], @params[:sha256]) end @@ -20,11 +12,7 @@ def execute private def packages - if Feature.enabled?(:pypi_extract_pypi_package_model, Feature.current_request) - base.has_version - else - base.pypi.has_version - end + base.has_version end override :group_packages @@ -37,6 +25,11 @@ def group_packages @project_or_group.all_projects.select(:id) ).installable end + + override :packages_class + def packages_class + ::Packages::Pypi::Package + end end end end diff --git a/app/finders/packages/pypi/packages_finder.rb b/app/finders/packages/pypi/packages_finder.rb index 2ba7eda72f100cfb2e99ff904ff26c0e9da2e78c..c2ca93a5844b3aedbcb5bcd94af2a8a4deaa9d69 100644 --- a/app/finders/packages/pypi/packages_finder.rb +++ b/app/finders/packages/pypi/packages_finder.rb @@ -5,14 +5,6 @@ module Pypi class PackagesFinder < ::Packages::GroupOrProjectPackageFinder extend ::Gitlab::Utils::Override - def initialize(current_user, project_or_group, params = {}) - if Feature.enabled?(:pypi_extract_pypi_package_model, Feature.current_request) - params[:packages_class] = ::Packages::Pypi::Package - end - - super - end - def execute return packages unless @params[:package_name] @@ -22,11 +14,7 @@ def execute private def packages - if Feature.enabled?(:pypi_extract_pypi_package_model, Feature.current_request) - base.has_version - else - base.pypi.has_version - end + base.has_version end override :group_packages @@ -37,6 +25,11 @@ def group_packages with_package_registry_enabled: true ) end + + override :packages_class + def packages_class + ::Packages::Pypi::Package + end end end end diff --git a/app/models/packages/package.rb b/app/models/packages/package.rb index 3908fed3a94c6b5c47b5b6e9eb0830a171bdcb8f..94168c9cff6d3a337d86036e8e3aa447353fb734 100644 --- a/app/models/packages/package.rb +++ b/app/models/packages/package.rb @@ -44,10 +44,6 @@ class Packages::Package < ApplicationRecord has_many :dependency_links, inverse_of: :package, class_name: 'Packages::DependencyLink' has_many :tags, inverse_of: :package, class_name: 'Packages::Tag' - # TODO: Remove with the rollout of the FF pypi_extract_pypi_package_model - # https://gitlab.com/gitlab-org/gitlab/-/issues/480692 - has_one :pypi_metadatum, inverse_of: :package, class_name: 'Packages::Pypi::Metadatum' - has_one :maven_metadatum, inverse_of: :package, class_name: 'Packages::Maven::Metadatum' has_one :nuget_metadatum, inverse_of: :package, class_name: 'Packages::Nuget::Metadatum' has_many :nuget_symbols, inverse_of: :package, class_name: 'Packages::Nuget::Symbol' @@ -79,10 +75,6 @@ class Packages::Package < ApplicationRecord validates :version, format: { with: Gitlab::Regex.nuget_version_regex }, if: :nuget? validates :version, format: { with: Gitlab::Regex.maven_version_regex }, if: -> { version? && maven? } - # TODO: Remove with the rollout of the FF pypi_extract_pypi_package_model - # https://gitlab.com/gitlab-org/gitlab/-/issues/480692 - validates :version, format: { with: Gitlab::Regex.pypi_version_regex }, if: :pypi? - validates :version, format: { with: Gitlab::Regex.semver_regex, message: Gitlab::Regex.semver_regex_message }, if: -> { npm? || terraform_module? } @@ -90,16 +82,6 @@ class Packages::Package < ApplicationRecord scope :with_name, ->(name) { where(name: name) } scope :with_name_like, ->(name) { where(arel_table[:name].matches(name)) } - # TODO: Remove with the rollout of the FF pypi_extract_pypi_package_model - # https://gitlab.com/gitlab-org/gitlab/-/issues/480692 - scope :with_normalized_pypi_name, ->(name) do - where( - "LOWER(regexp_replace(name, ?, '-', 'g')) = ?", - Gitlab::Regex::Packages::PYPI_NORMALIZED_NAME_REGEX_STRING, - name.downcase - ) - end - scope :with_case_insensitive_version, ->(version) do where('LOWER(version) = ?', version.downcase) end @@ -135,10 +117,6 @@ class Packages::Package < ApplicationRecord scope :preload_npm_metadatum, -> { preload(:npm_metadatum) } scope :preload_nuget_metadatum, -> { preload(:nuget_metadatum) } - # TODO: Remove with the rollout of the FF pypi_extract_pypi_package_model - # https://gitlab.com/gitlab-org/gitlab/-/issues/480692 - scope :preload_pypi_metadatum, -> { preload(:pypi_metadatum) } - scope :with_npm_scope, ->(scope) do npm.where("position('/' in packages_packages.name) > 0 AND split_part(packages_packages.name, '/', 1) = :package_scope", package_scope: "@#{sanitize_sql_like(scope)}") end @@ -189,7 +167,7 @@ class Packages::Package < ApplicationRecord def self.inheritance_column = 'package_type' def self.inheritance_column_to_class_map - hash = { + { ml_model: 'Packages::MlModel::Package', golang: 'Packages::Go::Package', rubygems: 'Packages::Rubygems::Package', @@ -198,14 +176,9 @@ def self.inheritance_column_to_class_map debian: 'Packages::Debian::Package', composer: 'Packages::Composer::Package', helm: 'Packages::Helm::Package', - generic: 'Packages::Generic::Package' - } - - if Feature.enabled?(:pypi_extract_pypi_package_model, Feature.current_request) - hash[:pypi] = 'Packages::Pypi::Package' - end - - hash + generic: 'Packages::Generic::Package', + pypi: 'Packages::Pypi::Package' + }.freeze end def self.only_maven_packages_with_path(path, use_cte: false) @@ -329,16 +302,6 @@ def mark_package_files_for_destruction ::Packages::MarkPackageFilesForDestructionWorker.perform_async(id) end - # TODO: Remove with the rollout of the FF pypi_extract_pypi_package_model - # https://gitlab.com/gitlab-org/gitlab/-/issues/480692 - # - # As defined in PEP 503 https://peps.python.org/pep-0503/#normalized-names - def normalized_pypi_name - return name unless pypi? - - name.gsub(/#{Gitlab::Regex::Packages::PYPI_NORMALIZED_NAME_REGEX_STRING}/o, '-').downcase - end - def normalized_nuget_version return unless nuget? diff --git a/app/models/packages/pypi/metadatum.rb b/app/models/packages/pypi/metadatum.rb index f251db30dc89fc99120e5e64bd4196c929b790cd..76410eddd07d49a40fc6c27737413dc33b779e18 100644 --- a/app/models/packages/pypi/metadatum.rb +++ b/app/models/packages/pypi/metadatum.rb @@ -15,17 +15,7 @@ class Packages::Pypi::Metadatum < ApplicationRecord belongs_to :package, class_name: 'Packages::Pypi::Package', inverse_of: :pypi_metadatum - # TODO: Remove with the rollout of the FF pypi_extract_pypi_package_model - # https://gitlab.com/gitlab-org/gitlab/-/issues/480692 - belongs_to :legacy_package, -> { - where(package_type: :pypi) - }, inverse_of: :pypi_metadatum, class_name: 'Packages::Package', foreign_key: :package_id - - validates :package, presence: true, if: -> { pypi_extract_pypi_package_model_enabled? } - - # TODO: Remove with the rollout of the FF pypi_extract_pypi_package_model - # https://gitlab.com/gitlab-org/gitlab/-/issues/480692 - validates :legacy_package, presence: true, unless: -> { pypi_extract_pypi_package_model_enabled? } + validates :package, presence: true with_options allow_nil: true do validates :keywords, length: { maximum: MAX_KEYWORDS_LENGTH } @@ -36,19 +26,4 @@ class Packages::Pypi::Metadatum < ApplicationRecord validates :description_content_type, length: { maximum: MAX_DESCRIPTION_CONTENT_TYPE_LENGTH } end validates :required_python, length: { maximum: MAX_REQUIRED_PYTHON_LENGTH }, allow_nil: false - - validate :pypi_package_type, unless: -> { pypi_extract_pypi_package_model_enabled? } - - private - - def pypi_package_type - unless legacy_package&.pypi? - errors.add(:base, _('Package type must be PyPi')) - end - end - - def pypi_extract_pypi_package_model_enabled? - Feature.enabled?(:pypi_extract_pypi_package_model, Feature.current_request) - end - strong_memoize_attr :pypi_extract_pypi_package_model_enabled? end diff --git a/app/services/packages/pypi/create_package_service.rb b/app/services/packages/pypi/create_package_service.rb index 61333674161b00cb0f9998522c1f7b6612d1dbdf..2c943fa7d4e13b7136dba9852255f31c62746ead 100644 --- a/app/services/packages/pypi/create_package_service.rb +++ b/app/services/packages/pypi/create_package_service.rb @@ -8,6 +8,7 @@ class CreatePackageService < ::Packages::CreatePackageService def execute ::Packages::Package.transaction do meta = Packages::Pypi::Metadatum.new( + package: created_package, required_python: params[:requires_python] || '', metadata_version: params[:metadata_version], author_email: params[:author_email], @@ -17,12 +18,6 @@ def execute keywords: params[:keywords] ) - if Feature.enabled?(:pypi_extract_pypi_package_model, Feature.current_request) - meta.package = created_package - else - meta.legacy_package = created_package - end - truncate_fields(meta) raise ActiveRecord::RecordInvalid, meta unless meta.valid? diff --git a/config/feature_flags/gitlab_com_derisk/pypi_extract_pypi_package_model.yml b/config/feature_flags/gitlab_com_derisk/pypi_extract_pypi_package_model.yml deleted file mode 100644 index eec05654aee4de4af64f82591c78554019226f3e..0000000000000000000000000000000000000000 --- a/config/feature_flags/gitlab_com_derisk/pypi_extract_pypi_package_model.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -name: pypi_extract_pypi_package_model -feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/435827 -introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/165694 -rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/480692 -milestone: '17.5' -group: group::package registry -type: gitlab_com_derisk -default_enabled: false diff --git a/locale/gitlab.pot b/locale/gitlab.pot index e6918631ebc5e0eba9ea520a723a4a22d82f5f87..86d7bb02195e638407279c2bf96ba42647a4b705 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -38629,9 +38629,6 @@ msgstr "" msgid "Package type must be NuGet" msgstr "" -msgid "Package type must be PyPi" -msgstr "" - msgid "Package type must be Terraform Module" msgstr "" diff --git a/spec/factories/packages/packages.rb b/spec/factories/packages/packages.rb index 53337e75ff3fa0628eb6c643b6260d9ad599c173..37ffa429ddf80db3839492e27cf1e2f969bb9022 100644 --- a/spec/factories/packages/packages.rb +++ b/spec/factories/packages/packages.rb @@ -121,26 +121,6 @@ end end - # TODO: Remove with the rollout of the FF pypi_extract_pypi_package_model - # https://gitlab.com/gitlab-org/gitlab/-/issues/480692 - factory :pypi_package_legacy do - sequence(:name) { |n| "pypi-package-#{n}" } - sequence(:version) { |n| "1.0.#{n}" } - package_type { :pypi } - - transient do - without_loaded_metadatum { false } - end - - after :create do |package, evaluator| - create :package_file, :pypi, package: package, file_name: "#{package.name}-#{package.version}.tar.gz" - - unless evaluator.without_loaded_metadatum - create :pypi_metadatum, legacy_package: package, package: nil - end - end - end - factory :ml_model_package, class: 'Packages::MlModel::Package' do sequence(:name) { |n| "mlmodel-package-#{n}" } sequence(:version) { |n| "1.0.#{n}" } diff --git a/spec/finders/packages/pypi/package_finder_spec.rb b/spec/finders/packages/pypi/package_finder_spec.rb index 0b0098884c441fbb0a33732fb7c14ea4104e5c16..5d331d69e774940bb7233aa6cb264265331b1ae1 100644 --- a/spec/finders/packages/pypi/package_finder_spec.rb +++ b/spec/finders/packages/pypi/package_finder_spec.rb @@ -33,27 +33,5 @@ it { is_expected.to eq(package2) } end - - context 'when pypi_extract_package_model is disabled' do - before do - stub_feature_flags(pypi_extract_pypi_package_model: false) - end - - context 'within a project' do - let(:scope) { project } - - # rubocop:disable Cop/AvoidBecomes -- implementing inheritance for PyPi packages https://gitlab.com/gitlab-org/gitlab/-/issues/435827 - it { is_expected.to eq(package2.becomes(::Packages::Package)) } - # rubocop:enable Cop/AvoidBecomes - end - - context 'within a group' do - let(:scope) { group } - - # rubocop:disable Cop/AvoidBecomes -- implementing inheritance for PyPi packages https://gitlab.com/gitlab-org/gitlab/-/issues/435827 - it { is_expected.to eq(package2.becomes(::Packages::Package)) } - # rubocop:enable Cop/AvoidBecomes - end - end end end diff --git a/spec/finders/packages/pypi/packages_finder_spec.rb b/spec/finders/packages/pypi/packages_finder_spec.rb index 73d5f7554cfad1157258a0c6a0e9c6a97c51e9b3..1823ce532ededf761f6afc50c22c705220cedbb1 100644 --- a/spec/finders/packages/pypi/packages_finder_spec.rb +++ b/spec/finders/packages/pypi/packages_finder_spec.rb @@ -39,19 +39,6 @@ it { is_expected.to contain_exactly(package2, package3) } - context 'when pypi_extract_package_model is disabled' do - before do - stub_feature_flags(pypi_extract_pypi_package_model: false) - end - - # rubocop:disable Cop/AvoidBecomes -- implementing inheritance for PyPi packages https://gitlab.com/gitlab-org/gitlab/-/issues/435827 - it do - is_expected - .to contain_exactly(package2.becomes(::Packages::Package), package3.becomes(::Packages::Package)) - end - # rubocop:enable Cop/AvoidBecomes - end - it_behaves_like 'when no package is found' it_behaves_like 'when package_name param is a non-normalized name' end @@ -68,16 +55,6 @@ it { is_expected.to contain_exactly(package4) } - context 'when pypi_extract_package_model is disabled' do - before do - stub_feature_flags(pypi_extract_pypi_package_model: false) - end - - # rubocop:disable Cop/AvoidBecomes -- implementing inheritance for PyPi packages https://gitlab.com/gitlab-org/gitlab/-/issues/435827 - it { is_expected.to contain_exactly(package4.becomes(::Packages::Package)) } - # rubocop:enable Cop/AvoidBecomes - end - it_behaves_like 'when no package is found' it_behaves_like 'when package_name param is a non-normalized name' diff --git a/spec/models/packages/package_spec.rb b/spec/models/packages/package_spec.rb index ee3f55fcc2e0df3cdebc55a58fd01f2c80a8cb16..cc806e77be3fc249d2bbcffa69fa410e99d1cfa0 100644 --- a/spec/models/packages/package_spec.rb +++ b/spec/models/packages/package_spec.rb @@ -182,75 +182,6 @@ it { is_expected.not_to allow_value('%2e%2e%2f1.2.3').for(:version) } end - # TODO: Remove with the rollout of the FF pypi_extract_pypi_package_model - # https://gitlab.com/gitlab-org/gitlab/-/issues/480692 - context 'pypi package' do - subject { create(:pypi_package_legacy) } - - it { is_expected.to allow_value('0.1').for(:version) } - it { is_expected.to allow_value('2.0').for(:version) } - it { is_expected.to allow_value('1.2.0').for(:version) } - it { is_expected.to allow_value('0100!0.0').for(:version) } - it { is_expected.to allow_value('00!1.2').for(:version) } - it { is_expected.to allow_value('1.0a').for(:version) } - it { is_expected.to allow_value('1.0-a').for(:version) } - it { is_expected.to allow_value('1.0.a1').for(:version) } - it { is_expected.to allow_value('1.0a1').for(:version) } - it { is_expected.to allow_value('1.0-a1').for(:version) } - it { is_expected.to allow_value('1.0alpha1').for(:version) } - it { is_expected.to allow_value('1.0b1').for(:version) } - it { is_expected.to allow_value('1.0beta1').for(:version) } - it { is_expected.to allow_value('1.0rc1').for(:version) } - it { is_expected.to allow_value('1.0pre1').for(:version) } - it { is_expected.to allow_value('1.0preview1').for(:version) } - it { is_expected.to allow_value('1.0.dev1').for(:version) } - it { is_expected.to allow_value('1.0.DEV1').for(:version) } - it { is_expected.to allow_value('1.0.post1').for(:version) } - it { is_expected.to allow_value('1.0.rev1').for(:version) } - it { is_expected.to allow_value('1.0.r1').for(:version) } - it { is_expected.to allow_value('1.0c2').for(:version) } - it { is_expected.to allow_value('2012.15').for(:version) } - it { is_expected.to allow_value('1.0+5').for(:version) } - it { is_expected.to allow_value('1.0+abc.5').for(:version) } - it { is_expected.to allow_value('1!1.1').for(:version) } - it { is_expected.to allow_value('1.0c3').for(:version) } - it { is_expected.to allow_value('1.0rc2').for(:version) } - it { is_expected.to allow_value('1.0c1').for(:version) } - it { is_expected.to allow_value('1.0b2-346').for(:version) } - it { is_expected.to allow_value('1.0b2.post345').for(:version) } - it { is_expected.to allow_value('1.0b2.post345.dev456').for(:version) } - it { is_expected.to allow_value('1.2.rev33+123456').for(:version) } - it { is_expected.to allow_value('1.1.dev1').for(:version) } - it { is_expected.to allow_value('1.0b1.dev456').for(:version) } - it { is_expected.to allow_value('1.0a12.dev456').for(:version) } - it { is_expected.to allow_value('1.0b2').for(:version) } - it { is_expected.to allow_value('1.0.dev456').for(:version) } - it { is_expected.to allow_value('1.0c1.dev456').for(:version) } - it { is_expected.to allow_value('1.0.post456').for(:version) } - it { is_expected.to allow_value('1.0.post456.dev34').for(:version) } - it { is_expected.to allow_value('1.2+123abc').for(:version) } - it { is_expected.to allow_value('1.2+abc').for(:version) } - it { is_expected.to allow_value('1.2+abc123').for(:version) } - it { is_expected.to allow_value('1.2+abc123def').for(:version) } - it { is_expected.to allow_value('1.2+1234.abc').for(:version) } - it { is_expected.to allow_value('1.2+123456').for(:version) } - it { is_expected.to allow_value('1.2.r32+123456').for(:version) } - it { is_expected.to allow_value('1!1.2.rev33+123456').for(:version) } - it { is_expected.to allow_value('1.0a12').for(:version) } - it { is_expected.to allow_value('1.2.3-45+abcdefgh').for(:version) } - it { is_expected.to allow_value('v1.2.3').for(:version) } - it { is_expected.not_to allow_value('1.2.3-45-abcdefgh').for(:version) } - it { is_expected.not_to allow_value('..1.2.3').for(:version) } - it { is_expected.not_to allow_value(' 1.2.3').for(:version) } - it { is_expected.not_to allow_value("1.2.3 \r\t").for(:version) } - it { is_expected.not_to allow_value("\r\t 1.2.3").for(:version) } - it { is_expected.not_to allow_value('1./2.3').for(:version) } - it { is_expected.not_to allow_value('1.2.3-4/../../').for(:version) } - it { is_expected.not_to allow_value('1.2.3-4%2e%2e%').for(:version) } - it { is_expected.not_to allow_value('../../../../../1.2.3').for(:version) } - it { is_expected.not_to allow_value('%2e%2e%2f1.2.3').for(:version) } - end - it_behaves_like 'validating version to be SemVer compliant for', :npm_package it_behaves_like 'validating version to be SemVer compliant for', :terraform_module_package @@ -644,16 +575,6 @@ it { is_expected.to match_array([package1, package2]) } end - # TODO: Remove with the rollout of the FF pypi_extract_pypi_package_model - # https://gitlab.com/gitlab-org/gitlab/-/issues/480692 - describe '.with_normalized_pypi_name' do - let_it_be(:pypi_package) { create(:pypi_package, name: 'Foo.bAr---BAZ_buz') } - - subject { described_class.with_normalized_pypi_name('foo-bar-baz-buz') } - - it { is_expected.to match_array([pypi_package]) } - end - describe '.with_case_insensitive_version' do let_it_be(:nuget_package) { create(:nuget_package, version: '1.0.0-ABC') } @@ -1105,28 +1026,6 @@ end end - # TODO: Remove with the rollout of the FF pypi_extract_pypi_package_model - # https://gitlab.com/gitlab-org/gitlab/-/issues/480692 - describe '#normalized_pypi_name' do - let_it_be(:package) { create(:pypi_package) } - - subject { package.normalized_pypi_name } - - where(:package_name, :normalized_name) do - 'ASDF' | 'asdf' - 'a.B_c-d' | 'a-b-c-d' - 'a-------b....c___d' | 'a-b-c-d' - end - - with_them do - before do - package.update_column(:name, package_name) - end - - it { is_expected.to eq(normalized_name) } - end - end - describe '#normalized_nuget_version' do let_it_be(:package) { create(:nuget_package, :with_metadatum, version: '1.0') } let(:normalized_version) { '1.0.0' } diff --git a/spec/models/packages/pypi/metadatum_spec.rb b/spec/models/packages/pypi/metadatum_spec.rb index c556c482b5ecfd5fce647fafd17e47b441136df1..cf56e97dd89ca3b13b102e720da2c265b9f68538 100644 --- a/spec/models/packages/pypi/metadatum_spec.rb +++ b/spec/models/packages/pypi/metadatum_spec.rb @@ -5,31 +5,11 @@ RSpec.describe Packages::Pypi::Metadatum, type: :model, feature_category: :package_registry do describe 'relationships' do it { is_expected.to belong_to(:package) } - - # TODO: Remove with the rollout of the FF pypi_extract_pypi_package_model - # https://gitlab.com/gitlab-org/gitlab/-/issues/480692 - it do - is_expected.to belong_to(:legacy_package).conditions(package_type: :pypi).class_name('Packages::Package') - .inverse_of(:pypi_metadatum).with_foreign_key(:package_id) - end end describe 'validations' do it { is_expected.to validate_presence_of(:package) } - # TODO: Remove with the rollout of the FF pypi_extract_pypi_package_model - # https://gitlab.com/gitlab-org/gitlab/-/issues/480692 - it { is_expected.not_to validate_presence_of(:legacy_package) } - - context 'when pypi_extract_package_model is disabled' do - before do - stub_feature_flags(pypi_extract_pypi_package_model: false) - end - - it { is_expected.to validate_presence_of(:legacy_package) } - it { is_expected.not_to validate_presence_of(:package) } - end - it { is_expected.to allow_value('').for(:required_python) } it { is_expected.to validate_length_of(:required_python).is_at_most(described_class::MAX_REQUIRED_PYTHON_LENGTH) } it { is_expected.to allow_value('').for(:keywords) } @@ -55,7 +35,7 @@ .is_at_most(described_class::MAX_DESCRIPTION_CONTENT_TYPE_LENGTH) } - describe '#pypi_package_type', :aggregate_failures do + describe '#package_type', :aggregate_failures do subject(:pypi_metadatum) { build(:pypi_metadatum) } it 'builds a valid metadatum' do @@ -69,19 +49,6 @@ it 'raises the error' do expect { build(:pypi_metadatum, package: package) }.to raise_error(ActiveRecord::AssociationTypeMismatch) end - - context 'when pypi_extract_package_model is disabled' do - before do - stub_feature_flags(pypi_extract_pypi_package_model: false) - end - - it 'adds the validation error' do - pypi_metadatum = build(:pypi_metadatum, legacy_package: package, package: nil) - - expect(pypi_metadatum).not_to be_valid - expect(pypi_metadatum.errors.to_a).to include('Package type must be PyPi') - end - end end end end diff --git a/spec/presenters/packages/pypi/simple_index_presenter_spec.rb b/spec/presenters/packages/pypi/simple_index_presenter_spec.rb index f7ea970656b1bf395b5f28e8c3e6f24f2e498444..eb167d673985a48c1dabe67a949b189d0b32bcc5 100644 --- a/spec/presenters/packages/pypi/simple_index_presenter_spec.rb +++ b/spec/presenters/packages/pypi/simple_index_presenter_spec.rb @@ -11,7 +11,7 @@ let_it_be(:package1) { create(:pypi_package, project: project, name: package_name, version: '1.0.0') } let_it_be(:package2) { create(:pypi_package, project: project, name: package_name, version: '2.0.0') } - let(:packages) { project.packages } + let(:packages) { Packages::Pypi::Package.for_projects(project) } describe '#body' do subject(:presenter) { described_class.new(packages, project_or_group).body } @@ -44,12 +44,12 @@ it 'avoids n+1 database queries', :use_sql_query_cache do control = ActiveRecord::QueryRecorder.new(skip_cached: false) do - described_class.new(project.packages.reload, project_or_group).body + described_class.new(Packages::Pypi::Package.for_projects(project).reload, project_or_group).body end create_list(:pypi_package, 5, project: project) - expect { described_class.new(project.packages.reload, project_or_group).body } + expect { described_class.new(Packages::Pypi::Package.for_projects(project).reload, project_or_group).body } .to issue_same_number_of_queries_as(control) end end diff --git a/spec/presenters/packages/pypi/simple_package_versions_presenter_spec.rb b/spec/presenters/packages/pypi/simple_package_versions_presenter_spec.rb index 50a5cb631f94f11081d4487a7fe9378e5b502ac3..9ad2699943776d2dfc26aa0356322f49ff735ba6 100644 --- a/spec/presenters/packages/pypi/simple_package_versions_presenter_spec.rb +++ b/spec/presenters/packages/pypi/simple_package_versions_presenter_spec.rb @@ -13,7 +13,7 @@ let(:file) { package.package_files.first } let(:filename) { file.file_name } - let(:packages) { project.packages } + let(:packages) { Packages::Pypi::Package.for_projects(project) } describe '#body' do subject(:presenter) { described_class.new(packages, project_or_group).body } @@ -42,7 +42,8 @@ create(:pypi_package, project: project, name: package_name) - expect { described_class.new(project.packages, project_or_group).body }.not_to exceed_query_limit(control) + expect { described_class.new(Packages::Pypi::Package.for_projects(project), project_or_group).body } + .not_to exceed_query_limit(control) end end diff --git a/spec/requests/api/pypi_packages_spec.rb b/spec/requests/api/pypi_packages_spec.rb index 34d4410f9ac1118002f808771738c78e6cd77e7b..10a5885e98a0a6a2c94517c9fa567f38a8c36ecf 100644 --- a/spec/requests/api/pypi_packages_spec.rb +++ b/spec/requests/api/pypi_packages_spec.rb @@ -328,7 +328,7 @@ def snowplow_context(user_role: :developer) end it 'returns 422 and does not create a package' do - expect { subject }.not_to change { project.packages.pypi.count } + expect { subject }.not_to change { Packages::Pypi::Package.for_projects(project).count } expect(response).to have_gitlab_http_status(:unprocessable_entity) end @@ -424,7 +424,7 @@ def snowplow_context(user_role: :developer) it 'does not create a new package', :aggregate_failures do expect { subject } - .to change { project.packages.pypi.count }.by(0) + .to change { Packages::Pypi::Package.for_projects(project).count }.by(0) .and change { Packages::PackageFile.count }.by(1) .and change { Packages::Pypi::Metadatum.count }.by(0) expect(response).to have_gitlab_http_status(:created) @@ -434,7 +434,7 @@ def snowplow_context(user_role: :developer) it 'does create a new package', :aggregate_failures do existing_package.pending_destruction! expect { subject } - .to change { project.packages.pypi.count }.by(1) + .to change { Packages::Pypi::Package.for_projects(project).count }.by(1) .and change { Packages::PackageFile.count }.by(1) .and change { Packages::Pypi::Metadatum.count }.by(1) expect(response).to have_gitlab_http_status(:created) diff --git a/spec/services/packages/pypi/create_package_service_spec.rb b/spec/services/packages/pypi/create_package_service_spec.rb index 70f623d840209ff8ffcb1eb29a64674f96ac03c5..3d9b5d443454e29fe8eb43a16b46aa4127c0b351 100644 --- a/spec/services/packages/pypi/create_package_service_spec.rb +++ b/spec/services/packages/pypi/create_package_service_spec.rb @@ -42,16 +42,6 @@ expect(created_package.package_files.first.file_sha256).to eq sha256 expect(created_package.package_files.first.file_md5).to eq md5 end - - context 'when pypi_extract_package_model is disabled' do - before do - stub_feature_flags(pypi_extract_pypi_package_model: false) - end - - it 'creates the package' do - expect { execute_service }.to change { Packages::Package.pypi.count }.by(1) - end - end end context 'with FIPS mode', :fips_mode do diff --git a/spec/support/shared_examples/requests/api/pypi_packages_shared_examples.rb b/spec/support/shared_examples/requests/api/pypi_packages_shared_examples.rb index 9bd430c3b4f206fc5bd8a180574f0c67d2393282..6201e21ae98434fa37a29aee74fd6292c6843f10 100644 --- a/spec/support/shared_examples/requests/api/pypi_packages_shared_examples.rb +++ b/spec/support/shared_examples/requests/api/pypi_packages_shared_examples.rb @@ -4,7 +4,7 @@ RSpec.shared_examples 'creating pypi package files' do it 'creates package files' do expect { subject } - .to change { project.packages.pypi.count }.by(1) + .to change { Packages::Pypi::Package.for_projects(project).count }.by(1) .and change { Packages::PackageFile.count }.by(1) .and change { Packages::Pypi::Metadatum.count }.by(1) expect(response).to have_gitlab_http_status(status) @@ -37,7 +37,7 @@ create(:package_file, :pypi, package: existing_package, file_name: params[:content].original_filename) expect { subject } - .to change { project.packages.pypi.count }.by(0) + .to change { Packages::Pypi::Package.for_projects(project).count }.by(0) .and change { Packages::PackageFile.count }.by(0) .and change { Packages::Pypi::Metadatum.count }.by(0)