summaryrefslogtreecommitdiff
path: root/spec/presenters/packages/detail/package_presenter_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/presenters/packages/detail/package_presenter_spec.rb')
-rw-r--r--spec/presenters/packages/detail/package_presenter_spec.rb98
1 files changed, 98 insertions, 0 deletions
diff --git a/spec/presenters/packages/detail/package_presenter_spec.rb b/spec/presenters/packages/detail/package_presenter_spec.rb
new file mode 100644
index 00000000000..34582957364
--- /dev/null
+++ b/spec/presenters/packages/detail/package_presenter_spec.rb
@@ -0,0 +1,98 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+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!(:expected_package_files) do
+ npm_file = package.package_files.first
+ [{
+ created_at: npm_file.created_at,
+ download_path: npm_file.download_path,
+ file_name: npm_file.file_name,
+ size: npm_file.size
+ }]
+ end
+ let(:pipeline_info) do
+ pipeline = package.build_info.pipeline
+ {
+ created_at: pipeline.created_at,
+ id: pipeline.id,
+ sha: pipeline.sha,
+ ref: pipeline.ref,
+ git_commit_message: pipeline.git_commit_message,
+ user: user_info,
+ project: {
+ name: pipeline.project.name,
+ web_url: pipeline.project.web_url
+ }
+ }
+ end
+ let!(:dependency_links) { [] }
+ let!(:expected_package_details) do
+ {
+ id: package.id,
+ created_at: package.created_at,
+ name: package.name,
+ package_files: expected_package_files,
+ package_type: package.package_type,
+ project_id: package.project_id,
+ tags: package.tags.as_json,
+ updated_at: package.updated_at,
+ version: package.version,
+ dependency_links: dependency_links
+ }
+ end
+
+ context 'detail_view' do
+ context 'with build_info' do
+ let_it_be(:package) { create(:npm_package, :with_build, project: project) }
+ let(:expected_package_details) { super().merge(pipeline: pipeline_info) }
+
+ it 'returns details with pipeline' do
+ expect(presenter.detail_view).to eq expected_package_details
+ end
+ end
+
+ context 'without build info' do
+ let_it_be(:package) { create(:npm_package, project: project) }
+
+ it 'returns details without pipeline' do
+ expect(presenter.detail_view).to eq expected_package_details
+ end
+ end
+
+ context 'with nuget_metadatum' do
+ let_it_be(:package) { create(:nuget_package, project: project) }
+ let_it_be(:nuget_metadatum) { create(:nuget_metadatum, package: package) }
+ let(:expected_package_details) { super().merge(nuget_metadatum: nuget_metadatum) }
+
+ it 'returns nuget_metadatum' do
+ expect(presenter.detail_view).to eq expected_package_details
+ end
+ end
+
+ context 'with dependency_links' do
+ let_it_be(:package) { create(:nuget_package, project: project) }
+ let_it_be(:dependency_link) { create(:packages_dependency_link, package: package) }
+ let_it_be(:nuget_dependency) { create(:nuget_dependency_link_metadatum, dependency_link: dependency_link) }
+ let_it_be(:expected_link) do
+ {
+ name: dependency_link.dependency.name,
+ version_pattern: dependency_link.dependency.version_pattern,
+ target_framework: nuget_dependency.target_framework
+ }
+ end
+ let_it_be(:dependency_links) { [expected_link] }
+
+ it 'returns the correct dependency link' do
+ expect(presenter.detail_view).to eq expected_package_details
+ end
+ end
+ end
+end