Commit fea77624 authored by Grzegorz Bizon's avatar Grzegorz Bizon

Delegate methods to default CI entry if undefined

parent b0ae0d73
......@@ -14,6 +14,7 @@ module Gitlab
def initialize(config)
@config = config
@nodes = {}
@validator = self.class.validator.new(self)
@validator.validate
end
......@@ -71,6 +72,10 @@ module Gitlab
true
end
def attributes
{ key: @key, parent: @parent, description: @description }
end
def self.default
end
......
......@@ -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
......@@ -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
......
......@@ -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
......
......@@ -2,7 +2,10 @@ require 'spec_helper'
describe Gitlab::Ci::Config::Node::Undefined do
let(:undefined) { described_class.new(entry) }
let(:entry) { Class.new }
let(:entry) { spy('Entry') }
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
......@@ -23,15 +26,41 @@ describe Gitlab::Ci::Config::Node::Undefined do
end
describe '#value' do
it 'returns nil' do
expect(undefined.value).to eq nil
end
end
end
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
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
describe '#undefined?' do
it 'is not a defined entry' do
expect(undefined.defined?).to be false
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment