diff options
Diffstat (limited to 'spec/presenters/packages/nuget/packages_metadata_presenter_spec.rb')
-rw-r--r-- | spec/presenters/packages/nuget/packages_metadata_presenter_spec.rb | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/spec/presenters/packages/nuget/packages_metadata_presenter_spec.rb b/spec/presenters/packages/nuget/packages_metadata_presenter_spec.rb new file mode 100644 index 00000000000..b2bcdf8f03d --- /dev/null +++ b/spec/presenters/packages/nuget/packages_metadata_presenter_spec.rb @@ -0,0 +1,66 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Packages::Nuget::PackagesMetadataPresenter do + include_context 'with expected presenters dependency groups' + + let_it_be(:project) { create(:project) } + let_it_be(:packages) { create_list(:nuget_package, 5, :with_metadatum, name: 'Dummy.Package', project: project) } + let_it_be(:presenter) { described_class.new(packages) } + + describe '#count' do + subject { presenter.count } + + it {is_expected.to eq 1} + end + + describe '#items' do + let(:tag_names) { %w(tag1 tag2) } + + subject { presenter.items } + + before do + packages.each do |pkg| + tag_names.each { |tag| create(:packages_tag, package: pkg, name: tag) } + + create_dependencies_for(pkg) + end + end + + it 'returns an array' do + items = subject + + expect(items).to be_a Array + expect(items.size).to eq 1 + end + + it 'returns a summary structure' do + item = subject.first + + expect(item).to be_a Hash + %i[json_url lower_version upper_version].each { |field| expect(item[field]).not_to be_blank } + expect(item[:packages_count]).to eq packages.count + expect(item[:packages]).to be_a Array + expect(item[:packages].size).to eq packages.count + end + + it 'returns the catalog entries' do + item = subject.first + + item[:packages].each do |pkg| + expect(pkg).to be_a Hash + %i[json_url archive_url catalog_entry].each { |field| expect(pkg[field]).not_to be_blank } + catalog_entry = pkg[:catalog_entry] + %i[json_url archive_url package_name package_version].each { |field| expect(catalog_entry[field]).not_to be_blank } + %i[authors summary].each { |field| expect(catalog_entry[field]).to be_blank } + expect(catalog_entry[:dependency_groups]).to eq(expected_dependency_groups(project.id, catalog_entry[:package_name], catalog_entry[:package_version])) + expect(catalog_entry[:tags].split(::Packages::Tag::NUGET_TAGS_SEPARATOR)).to contain_exactly('tag1', 'tag2') + + %i[project_url license_url icon_url].each do |field| + expect(catalog_entry.dig(:metadatum, field)).not_to be_blank + end + end + end + end +end |