diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-09-14 15:10:35 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-09-14 15:10:35 +0300 |
commit | d378fdaa60adb7217e3fc798580ad206127728d5 (patch) | |
tree | 9cb715513dd4d4197f76b2908458551940b0a094 /spec/presenters/packages | |
parent | 7b69070a7468c4a9b6fe0ed7fbf1b3f2b58434e0 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/presenters/packages')
-rw-r--r-- | spec/presenters/packages/helm/index_presenter_spec.rb | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/spec/presenters/packages/helm/index_presenter_spec.rb b/spec/presenters/packages/helm/index_presenter_spec.rb new file mode 100644 index 00000000000..38e1dc17f49 --- /dev/null +++ b/spec/presenters/packages/helm/index_presenter_spec.rb @@ -0,0 +1,80 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Packages::Helm::IndexPresenter do + include_context 'with expected presenters dependency groups' + + let_it_be(:project) { create(:project) } + let_it_be(:packages) { create_list(:helm_package, 5, project: project) } + let_it_be(:package_files3_1) { create(:helm_package_file, package: packages[2], file_sha256: '3_1', file_name: 'file3_1') } + let_it_be(:package_files3_2) { create(:helm_package_file, package: packages[2], file_sha256: '3_2', file_name: 'file3_2') } + let_it_be(:package_files4_1) { create(:helm_package_file, package: packages[3], file_sha256: '4_1', file_name: 'file4_1') } + let_it_be(:package_files4_2) { create(:helm_package_file, package: packages[3], file_sha256: '4_2', file_name: 'file4_2') } + let_it_be(:package_files4_3) { create(:helm_package_file, package: packages[3], file_sha256: '4_3', file_name: 'file4_3') } + + let(:project_id_param) { project.id } + let(:channel) { 'stable' } + let(:presenter) { described_class.new(project_id_param, channel, ::Packages::Package.id_in(packages.map(&:id))) } + + describe('#entries') do + subject { presenter.entries } + + it 'returns the correct hash' do + expect(subject.size).to eq(5) + expect(subject.keys).to eq(packages.map(&:name)) + subject.values.zip(packages) do |raws, pkg| + expect(raws.size).to eq(1) + + file = pkg.package_files.recent.first + raw = raws.first + expect(raw['name']).to eq(pkg.name) + expect(raw['version']).to eq(pkg.version) + expect(raw['apiVersion']).to eq("v2") + expect(raw['created']).to eq(file.created_at.utc.strftime('%Y-%m-%dT%H:%M:%S.%NZ')) + expect(raw['digest']).to eq(file.file_sha256) + expect(raw['urls']).to eq(["charts/#{file.file_name}"]) + end + end + + context 'with an unknown channel' do + let(:channel) { 'unknown' } + + it { is_expected.to be_empty } + end + + context 'with a nil channel' do + let(:channel) { nil } + + it { is_expected.to be_empty } + end + end + + describe('#api_version') do + subject { presenter.api_version } + + it { is_expected.to eq(described_class::API_VERSION) } + end + + describe('#generated') do + subject { presenter.generated } + + it 'returns the expected format' do + freeze_time do + expect(subject).to eq(Time.zone.now.utc.strftime('%Y-%m-%dT%H:%M:%S.%NZ')) + end + end + end + + describe('#server_info') do + subject { presenter.server_info } + + it { is_expected.to eq({ 'contextPath' => "/api/v4/projects/#{project.id}/packages/helm" }) } + + context 'with url encoded project id param' do + let_it_be(:project_id_param) { 'foo/bar' } + + it { is_expected.to eq({ 'contextPath' => '/api/v4/projects/foo%2Fbar/packages/helm' }) } + end + end +end |