summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLin Jen-Shin <godfat@godfat.org>2017-05-25 22:14:22 +0800
committerLin Jen-Shin <godfat@godfat.org>2017-05-25 22:14:22 +0800
commitb74b7309a5121be50fe6c07c85b61e258c113ce6 (patch)
treeca75d39392c6614b53a524dd99b4e34fb09ccb32
parent3e190d80310d900beaf42881e933ae4d3c2811a0 (diff)
downloadgitlab-ce-b74b7309a5121be50fe6c07c85b61e258c113ce6.tar.gz
Add tests for CI_ENVIRONMENT_URL
-rw-r--r--app/models/ci/build.rb11
-rw-r--r--spec/models/ci/build_spec.rb59
2 files changed, 60 insertions, 10 deletions
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index 82c7ca943ed..e50ea0e566a 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -499,10 +499,13 @@ module Ci
end
def persisted_environment_variables
- persisted_environment.predefined_variables <<
- { key: 'CI_ENVIRONMENT_URL',
- value: expanded_environment_url,
- public: true }
+ variables = persisted_environment.predefined_variables
+
+ variables << { key: 'CI_ENVIRONMENT_URL',
+ value: expanded_environment_url,
+ public: true } if environment_url
+
+ variables
end
def legacy_variables
diff --git a/spec/models/ci/build_spec.rb b/spec/models/ci/build_spec.rb
index e971b4bc3f9..5b2c1472974 100644
--- a/spec/models/ci/build_spec.rb
+++ b/spec/models/ci/build_spec.rb
@@ -20,6 +20,7 @@ describe Ci::Build, :models do
it { is_expected.to validate_presence_of(:ref) }
it { is_expected.to respond_to(:has_trace?) }
it { is_expected.to respond_to(:trace) }
+ it { is_expected.to validate_length_of(:external_url).is_at_most(255) }
describe '#actionize' do
context 'when build is a created' do
@@ -427,6 +428,30 @@ describe Ci::Build, :models do
end
end
+ describe '#expanded_environment_url' do
+ subject { build.expanded_environment_url }
+
+ context 'when environment uses $CI_COMMIT_REF_NAME' do
+ let(:build) do
+ create(:ci_build,
+ ref: 'master',
+ environment_url: 'http://review/$CI_COMMIT_REF_NAME')
+ end
+
+ it { is_expected.to eq('http://review/master') }
+ end
+
+ context 'when environment uses yaml_variables containing symbol keys' do
+ let(:build) do
+ create(:ci_build,
+ yaml_variables: [{ key: :APP_HOST, value: 'host' }],
+ environment_url: 'http://review/$APP_HOST')
+ end
+
+ it { is_expected.to eq('http://review/host') }
+ end
+ end
+
describe '#starts_environment?' do
subject { build.starts_environment? }
@@ -1176,11 +1201,6 @@ describe Ci::Build, :models do
end
context 'when build has an environment' do
- before do
- build.update(environment: 'production')
- create(:environment, project: build.project, name: 'production', slug: 'prod-slug')
- end
-
let(:environment_variables) do
[
{ key: 'CI_ENVIRONMENT_NAME', value: 'production', public: true },
@@ -1188,7 +1208,34 @@ describe Ci::Build, :models do
]
end
- it { environment_variables.each { |v| is_expected.to include(v) } }
+ before do
+ build.update(environment: 'production')
+ create(:environment, project: build.project, name: 'production', slug: 'prod-slug')
+ end
+
+ context 'when no URL was set' do
+ it { environment_variables.each { |v| is_expected.to include(v) } }
+
+ it 'does not have CI_ENVIRONMENT_URL' do
+ keys = subject.map { |var| var[:key] }
+
+ expect(keys).to include('CI_ENVIRONMENT_NAME', 'CI_ENVIRONMENT_SLUG')
+ expect(keys).not_to include('CI_ENVIRONMENT_URL')
+ end
+ end
+
+ context 'when an URL was set' do
+ before do
+ build.update(environment_url: 'http://host/$CI_JOB_NAME')
+
+ environment_variables <<
+ { key: 'CI_ENVIRONMENT_URL',
+ value: 'http://host/test',
+ public: true }
+ end
+
+ it { environment_variables.each { |v| is_expected.to include(v) } }
+ end
end
context 'when build started manually' do