81 lines
1.6 KiB
Ruby
81 lines
1.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe Gitlab::Ci::Config::Entry::Imageable do
|
|
let(:node_class) do
|
|
Class.new(::Gitlab::Config::Entry::Node) do
|
|
include ::Gitlab::Ci::Config::Entry::Imageable
|
|
|
|
validations do
|
|
validates :config, allowed_keys: ::Gitlab::Ci::Config::Entry::Imageable::IMAGEABLE_ALLOWED_KEYS
|
|
end
|
|
|
|
def self.name
|
|
'node'
|
|
end
|
|
|
|
def value
|
|
if string?
|
|
{ name: @config }
|
|
elsif hash?
|
|
{
|
|
name: @config[:name]
|
|
}.compact
|
|
else
|
|
{}
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
subject(:entry) { node_class.new(config) }
|
|
|
|
before do
|
|
entry.compose!
|
|
end
|
|
|
|
context 'when entry value is correct' do
|
|
let(:config) { 'image:1.0' }
|
|
|
|
describe '#valid?' do
|
|
it 'is valid' do
|
|
expect(entry).to be_valid
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'when entry value is not correct' do
|
|
let(:config) { ['image:1.0'] }
|
|
|
|
describe '#errors' do
|
|
it 'saves errors' do
|
|
expect(entry.errors.first)
|
|
.to match /config should be a hash or a string/
|
|
end
|
|
end
|
|
|
|
describe '#valid?' do
|
|
it 'is not valid' do
|
|
expect(entry).not_to be_valid
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'when unexpected key is specified' do
|
|
let(:config) { { name: 'image:1.0', non_existing: 'test' } }
|
|
|
|
describe '#errors' do
|
|
it 'saves errors' do
|
|
expect(entry.errors.first)
|
|
.to match /config contains unknown keys: non_existing/
|
|
end
|
|
end
|
|
|
|
describe '#valid?' do
|
|
it 'is not valid' do
|
|
expect(entry).not_to be_valid
|
|
end
|
|
end
|
|
end
|
|
end
|