Skip to content
Snippets Groups Projects
Commit fea77624 authored by Grzegorz Bizon's avatar Grzegorz Bizon
Browse files

Delegate methods to default CI entry if undefined

parent b0ae0d73
No related branches found
No related tags found
1 merge request!5087Move CI job config entries from legacy to new config
Pipeline #
Loading
Loading
@@ -14,6 +14,7 @@ module Gitlab
def initialize(config)
@config = config
@nodes = {}
@validator = self.class.validator.new(self)
@validator.validate
end
Loading
Loading
@@ -71,6 +72,10 @@ module Gitlab
true
end
 
def attributes
{ key: @key, parent: @parent, description: @description }
end
def self.default
end
 
Loading
Loading
Loading
Loading
@@ -5,8 +5,9 @@ module Gitlab
##
# This class represents an undefined entry node.
#
# It takes original entry class as configuration and returns default
# value of original entry as self value.
# It takes original entry class as configuration and creates an object
# if original entry has a default value. If there is default value
# some methods are delegated to it.
#
#
class Undefined < Entry
Loading
Loading
@@ -16,13 +17,35 @@ module Gitlab
validates :config, type: Class
end
 
def initialize(node)
super
unless node.default.nil?
@default = fabricate_default(node)
end
end
def value
@config.default
@default.value if @default
end
def valid?
@default ? @default.valid? : true
end
def errors
@default ? @default.errors : []
end
 
def defined?
false
end
private
def fabricate_default(node)
Node::Factory.fabricate(node, node.default, attributes)
end
end
end
end
Loading
Loading
Loading
Loading
@@ -9,11 +9,13 @@ describe Gitlab::Ci::Config::Node::Factory do
it 'fabricates entry with attributes set' do
fabricated = described_class
.fabricate(entry_class, ['ls'],
parent: factory, key: :test)
parent: true, key: :test)
 
expect(fabricated.parent).to be factory
expect(fabricated.parent).to be true
expect(fabricated.key).to eq :test
expect(fabricated.value).to eq ['ls']
expect(fabricated.attributes)
.to eq(parent: true, key: :test, description: nil)
end
end
 
Loading
Loading
Loading
Loading
@@ -2,33 +2,62 @@ require 'spec_helper'
 
describe Gitlab::Ci::Config::Node::Undefined do
let(:undefined) { described_class.new(entry) }
let(:entry) { Class.new }
let(:entry) { spy('Entry') }
 
describe '#leaf?' do
it 'is leaf node' do
expect(undefined).to be_leaf
context 'when entry does not have a default value' do
before { allow(entry).to receive(:default).and_return(nil) }
describe '#leaf?' do
it 'is leaf node' do
expect(undefined).to be_leaf
end
end
end
 
describe '#valid?' do
it 'is always valid' do
expect(undefined).to be_valid
describe '#valid?' do
it 'is always valid' do
expect(undefined).to be_valid
end
end
end
 
describe '#errors' do
it 'is does not contain errors' do
expect(undefined.errors).to be_empty
describe '#errors' do
it 'is does not contain errors' do
expect(undefined.errors).to be_empty
end
end
describe '#value' do
it 'returns nil' do
expect(undefined.value).to eq nil
end
end
end
 
describe '#value' do
context 'when entry has a default value' do
before do
allow(entry).to receive(:default).and_return('some value')
allow(entry).to receive(:value).and_return('some value')
end
 
it 'returns default value for entry' do
expect(undefined.value).to eq 'some value'
describe '#value' do
it 'returns default value for entry' do
expect(undefined.value).to eq 'some value'
end
end
describe '#errors' do
it 'delegates errors to default entry' do
expect(entry).to receive(:errors)
undefined.errors
end
end
describe '#valid?' do
it 'delegates valid? to default entry' do
expect(entry).to receive(:valid?)
undefined.valid?
end
end
end
 
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment