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
@@ -14,6 +14,7 @@ module Gitlab
Loading
@@ -14,6 +14,7 @@ module Gitlab
def initialize(config) def initialize(config)
@config = config @config = config
@nodes = {} @nodes = {}
@validator = self.class.validator.new(self) @validator = self.class.validator.new(self)
@validator.validate @validator.validate
end end
Loading
@@ -71,6 +72,10 @@ module Gitlab
Loading
@@ -71,6 +72,10 @@ module Gitlab
true true
end end
   
def attributes
{ key: @key, parent: @parent, description: @description }
end
def self.default def self.default
end end
   
Loading
Loading
Loading
@@ -5,8 +5,9 @@ module Gitlab
Loading
@@ -5,8 +5,9 @@ module Gitlab
## ##
# This class represents an undefined entry node. # This class represents an undefined entry node.
# #
# It takes original entry class as configuration and returns default # It takes original entry class as configuration and creates an object
# value of original entry as self value. # if original entry has a default value. If there is default value
# some methods are delegated to it.
# #
# #
class Undefined < Entry class Undefined < Entry
Loading
@@ -16,13 +17,35 @@ module Gitlab
Loading
@@ -16,13 +17,35 @@ module Gitlab
validates :config, type: Class validates :config, type: Class
end end
   
def initialize(node)
super
unless node.default.nil?
@default = fabricate_default(node)
end
end
def value def value
@config.default @default.value if @default
end
def valid?
@default ? @default.valid? : true
end
def errors
@default ? @default.errors : []
end end
   
def defined? def defined?
false false
end end
private
def fabricate_default(node)
Node::Factory.fabricate(node, node.default, attributes)
end
end end
end end
end end
Loading
Loading
Loading
@@ -9,11 +9,13 @@ describe Gitlab::Ci::Config::Node::Factory do
Loading
@@ -9,11 +9,13 @@ describe Gitlab::Ci::Config::Node::Factory do
it 'fabricates entry with attributes set' do it 'fabricates entry with attributes set' do
fabricated = described_class fabricated = described_class
.fabricate(entry_class, ['ls'], .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.key).to eq :test
expect(fabricated.value).to eq ['ls'] expect(fabricated.value).to eq ['ls']
expect(fabricated.attributes)
.to eq(parent: true, key: :test, description: nil)
end end
end end
   
Loading
Loading
Loading
@@ -2,33 +2,62 @@ require 'spec_helper'
Loading
@@ -2,33 +2,62 @@ require 'spec_helper'
   
describe Gitlab::Ci::Config::Node::Undefined do describe Gitlab::Ci::Config::Node::Undefined do
let(:undefined) { described_class.new(entry) } let(:undefined) { described_class.new(entry) }
let(:entry) { Class.new } let(:entry) { spy('Entry') }
   
describe '#leaf?' do context 'when entry does not have a default value' do
it 'is leaf node' do before { allow(entry).to receive(:default).and_return(nil) }
expect(undefined).to be_leaf
describe '#leaf?' do
it 'is leaf node' do
expect(undefined).to be_leaf
end
end end
end
   
describe '#valid?' do describe '#valid?' do
it 'is always valid' do it 'is always valid' do
expect(undefined).to be_valid expect(undefined).to be_valid
end
end end
end
   
describe '#errors' do describe '#errors' do
it 'is does not contain errors' do it 'is does not contain errors' do
expect(undefined.errors).to be_empty expect(undefined.errors).to be_empty
end
end
describe '#value' do
it 'returns nil' do
expect(undefined.value).to eq nil
end
end end
end end
   
describe '#value' do context 'when entry has a default value' do
before do before do
allow(entry).to receive(:default).and_return('some value') allow(entry).to receive(:default).and_return('some value')
allow(entry).to receive(:value).and_return('some value')
end end
   
it 'returns default value for entry' do describe '#value' do
expect(undefined.value).to eq 'some value' 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
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