163 lines
4 KiB
Ruby
163 lines
4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe Gitlab::WebIde::Config::Entry::Global do
|
|
let(:global) { described_class.new(hash) }
|
|
|
|
describe '.nodes' do
|
|
it 'returns a hash' do
|
|
expect(described_class.nodes).to be_a(Hash)
|
|
end
|
|
|
|
context 'when filtering all the entry/node names' do
|
|
it 'contains the expected node names' do
|
|
expect(described_class.nodes.keys).to match_array(described_class.allowed_keys)
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'when configuration is valid' do
|
|
context 'when some entries defined' do
|
|
let(:hash) do
|
|
{ terminal: { before_script: ['ls'], variables: {}, script: 'sleep 10s', services: ['mysql'] } }
|
|
end
|
|
|
|
describe '#compose!' do
|
|
before do
|
|
global.compose!
|
|
end
|
|
|
|
it 'creates nodes hash' do
|
|
expect(global.descendants).to be_an Array
|
|
end
|
|
|
|
it 'creates node object for each entry' do
|
|
expect(global.descendants.count).to eq described_class.allowed_keys.length
|
|
end
|
|
|
|
it 'creates node object using valid class' do
|
|
expect(global.descendants.first)
|
|
.to be_an_instance_of Gitlab::WebIde::Config::Entry::Terminal
|
|
end
|
|
|
|
it 'sets correct description for nodes' do
|
|
expect(global.descendants.first.description)
|
|
.to eq 'Configuration of the webide terminal.'
|
|
end
|
|
|
|
describe '#leaf?' do
|
|
it 'is not leaf' do
|
|
expect(global).not_to be_leaf
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'when not composed' do
|
|
describe '#terminal_value' do
|
|
it 'returns nil' do
|
|
expect(global.terminal_value).to be nil
|
|
end
|
|
end
|
|
|
|
describe '#leaf?' do
|
|
it 'is leaf' do
|
|
expect(global).to be_leaf
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'when composed' do
|
|
before do
|
|
global.compose!
|
|
end
|
|
|
|
describe '#errors' do
|
|
it 'has no errors' do
|
|
expect(global.errors).to be_empty
|
|
end
|
|
end
|
|
|
|
describe '#terminal_value' do
|
|
it 'returns correct script' do
|
|
expect(global.terminal_value).to eq({
|
|
tag_list: [],
|
|
job_variables: [],
|
|
options: {
|
|
before_script: ['ls'],
|
|
script: ['sleep 10s'],
|
|
services: [{ name: "mysql" }]
|
|
}
|
|
})
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'when configuration is not valid' do
|
|
before do
|
|
global.compose!
|
|
end
|
|
|
|
context 'when job does not have valid before script' do
|
|
let(:hash) do
|
|
{ terminal: { before_script: 100 } }
|
|
end
|
|
|
|
describe '#errors' do
|
|
it 'reports errors about missing script' do
|
|
expect(global.errors)
|
|
.to include "terminal:before_script config should be an array containing strings and arrays of strings"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'when value is not a hash' do
|
|
let(:hash) { [] }
|
|
|
|
describe '#valid?' do
|
|
it 'is not valid' do
|
|
expect(global).not_to be_valid
|
|
end
|
|
end
|
|
|
|
describe '#errors' do
|
|
it 'returns error about invalid type' do
|
|
expect(global.errors.first).to match /should be a hash/
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#specified?' do
|
|
it 'is concrete entry that is defined' do
|
|
expect(global.specified?).to be true
|
|
end
|
|
end
|
|
|
|
describe '#[]' do
|
|
before do
|
|
global.compose!
|
|
end
|
|
|
|
let(:hash) do
|
|
{ terminal: { before_script: ['ls'] } }
|
|
end
|
|
|
|
context 'when entry exists' do
|
|
it 'returns correct entry' do
|
|
expect(global[:terminal])
|
|
.to be_an_instance_of Gitlab::WebIde::Config::Entry::Terminal
|
|
expect(global[:terminal][:before_script].value).to eq ['ls']
|
|
end
|
|
end
|
|
|
|
context 'when entry does not exist' do
|
|
it 'always return unspecified node' do
|
|
expect(global[:some][:unknown][:node])
|
|
.not_to be_specified
|
|
end
|
|
end
|
|
end
|
|
end
|