summaryrefslogtreecommitdiff
path: root/spec/presenters/packages/nuget/packages_metadata_presenter_spec.rb
blob: 39682a3311c568d7ce5be7acdb677e5725b66536 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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