gitlab-org--gitlab-foss/spec/presenters/packages/helm/index_presenter_spec.rb

80 lines
2.7 KiB
Ruby

# 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