spec/support/templates/runit/run.sh.erb_spec.rb (78 lines of code) (raw):
# frozen_string_literal: true
RSpec.describe 'support/templates/runit/run.sh.erb' do
let(:source) { |example| example.example_group.top_level_description }
let(:yaml) { {} }
let(:service_env) { {} }
let(:service) do
instance_double(GDK::Services::Base, env: service_env, command: 'echo hello')
end
before do
stub_gdk_yaml(yaml)
end
subject(:output) do
renderer = GDK::Templates::ErbRenderer.new(source, service_instance: service)
YAML.safe_load(renderer.render_to_string, permitted_classes: [Symbol])
end
describe 'service environment variables' do
let(:service_env) { { 'FOO' => 'bar' } }
it 'contains service related environment variables' do
expect(output).to include("export FOO='bar'")
end
it 'merges with global variables' do
service_env['RAILS_ENV'] = 'staging'
expect(output).to include("export RAILS_ENV='staging'")
expect(output).not_to include("export RAILS_ENV='test'")
end
end
describe 'global environment variables' do
context 'with defaults' do
it 'contains preset values' do
expect(output)
.to include("export RAILS_ENV='development'")
.and include("export GITLAB_LICENSE_MODE='test'")
.and include("export CUSTOMER_PORTAL_URL='https://customers.staging.gitlab.com'")
end
end
context 'with extra variables set' do
let(:yaml) { { 'env' => { 'ACTION_CABLE_IN_APP' => 'false' } } }
it 'contains RAILS_ENV' do
expect(output).to include("export RAILS_ENV='development'")
expect(output).to include("export ACTION_CABLE_IN_APP='false'")
end
end
context 'with variables override' do
let(:yaml) do
{
'env' => {
'RAILS_ENV' => 'test',
'GITLAB_LICENSE_MODE' => 'production'
}
}
end
it 'overrides RAILS_ENV', :aggregate_failures do
expect(output)
.to include("export RAILS_ENV='test'")
.and include("export GITLAB_LICENSE_MODE='production'")
expect(output).not_to include("export RAILS_ENV='development'")
expect(output).not_to include("export GITLAB_LICENSE_MODE='test'")
end
end
describe 'jaeger related envvars' do
let(:yaml) { { 'tracer' => { 'jaeger' => { 'enabled' => enabled } } } }
context 'when enabled' do
let(:enabled) { true }
it 'sets GITLAB_TRACING and GITLAB_TRACING_URL' do
expect(output)
.to include('GITLAB_TRACING=')
.and include('GITLAB_TRACING_URL=')
end
end
context 'when disabled' do
let(:enabled) { false }
it 'does not include GITLAB_TRACING and GITLAB_TRACING_URL', :aggregate_failures do
expect(output).not_to include('GITLAB_TRACING=')
expect(output).not_to include('GITLAB_TRACING_URL=')
end
end
end
end
end