debian-mirror-gitlab/spec/lib/gitlab/ci/interpolation/access_spec.rb
2023-05-27 22:25:52 +05:30

49 lines
1.2 KiB
Ruby

# frozen_string_literal: true
require 'fast_spec_helper'
RSpec.describe Gitlab::Ci::Interpolation::Access, feature_category: :pipeline_composition do
subject { described_class.new(access, ctx) }
let(:access) do
'inputs.data'
end
let(:ctx) do
{ inputs: { data: 'abcd' }, env: { 'ENV' => 'dev' } }
end
it 'properly evaluates the access pattern' do
expect(subject.value).to eq 'abcd'
end
context 'when there are too many objects in the access path' do
let(:access) { 'a.b.c.d.e.f.g.h' }
it 'only support MAX_ACCESS_OBJECTS steps' do
expect(subject.objects.count).to eq 5
end
end
context 'when access expression size is too large' do
before do
stub_const("#{described_class}::MAX_ACCESS_BYTESIZE", 10)
end
it 'returns an error' do
expect(subject).not_to be_valid
expect(subject.errors.first)
.to eq 'maximum interpolation expression size exceeded'
end
end
context 'when there are not enough objects in the access path' do
let(:access) { 'abc[123]' }
it 'returns an error when there are no objects found' do
expect(subject).not_to be_valid
expect(subject.errors.first)
.to eq 'invalid interpolation access pattern'
end
end
end