diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2016-11-09 09:42:09 +0100 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2016-11-09 09:42:09 +0100 |
commit | f7ef7bea11012bef6d373ce3b3c43fac08b047fd (patch) | |
tree | e99ead5b9b7fd34477d29ef0d4792bd8e4e27689 | |
parent | 04a8372cdfff501fe67c17612a0b5e098f7d56c9 (diff) | |
download | gitlab-ce-f7ef7bea11012bef6d373ce3b3c43fac08b047fd.tar.gz |
Add environment factory review app trait
-rw-r--r-- | app/services/ci/stop_environment_service.rb | 19 | ||||
-rw-r--r-- | spec/factories/deployments.rb | 3 | ||||
-rw-r--r-- | spec/factories/environments.rb | 23 | ||||
-rw-r--r-- | spec/services/ci/stop_environment_service_spec.rb | 15 |
4 files changed, 38 insertions, 22 deletions
diff --git a/app/services/ci/stop_environment_service.rb b/app/services/ci/stop_environment_service.rb index 5c208b738f7..2ac0b3d885a 100644 --- a/app/services/ci/stop_environment_service.rb +++ b/app/services/ci/stop_environment_service.rb @@ -1,10 +1,11 @@ module Ci class StopEnvironmentService < BaseService - def execute(ref) - @ref = ref - @commit = project.commit(ref) + attr_reader :ref - return unless has_ref_sha_pair? + def execute(branch_name) + @ref = branch_name + + return unless has_ref_commit_pair? return unless has_environments? environments.each do |environment| @@ -16,8 +17,12 @@ module Ci private - def has_ref_sha_pair? - @ref && @commit + def has_ref_commit_pair? + ref && commit + end + + def commit + @commit ||= project.commit(ref) end def has_environments? @@ -25,7 +30,7 @@ module Ci end def environments - @environments ||= project.environments_for(@ref, @commit) + @environments ||= project.environments_for(ref, commit) end end end diff --git a/spec/factories/deployments.rb b/spec/factories/deployments.rb index 6f24bf58d14..29ad1af9fd9 100644 --- a/spec/factories/deployments.rb +++ b/spec/factories/deployments.rb @@ -3,8 +3,9 @@ FactoryGirl.define do sha '97de212e80737a608d939f648d959671fb0a0142' ref 'master' tag false + user project nil - + deployable factory: :ci_build environment factory: :environment after(:build) do |deployment, evaluator| diff --git a/spec/factories/environments.rb b/spec/factories/environments.rb index 846cccfc7fa..bb6558a403f 100644 --- a/spec/factories/environments.rb +++ b/spec/factories/environments.rb @@ -4,5 +4,28 @@ FactoryGirl.define do project factory: :empty_project sequence(:external_url) { |n| "https://env#{n}.example.gitlab.com" } + + trait :with_review_app do |environment| + project + + # At this point `review app` is an ephemeral concept related to + # deployments being deployed for given environment. There is no + # first-class `review app` available so we need to create set of + # interconnected objects to simulate a review app. + # + after(:create) do |environment| + deployment = create(:deployment, + environment: environment, + project: environment.project, + sha: environment.project.commit.id) + + teardown_build = create(:ci_build, :manual, + name: "#{deployment.environment.name}:teardown", + pipeline: deployment.deployable.pipeline) + + deployment.update_column(:on_stop, teardown_build.name) + environment.update_attribute(:deployments, [deployment]) + end + end end end diff --git a/spec/services/ci/stop_environment_service_spec.rb b/spec/services/ci/stop_environment_service_spec.rb index 40b2a028f67..05e9e2d84cf 100644 --- a/spec/services/ci/stop_environment_service_spec.rb +++ b/spec/services/ci/stop_environment_service_spec.rb @@ -8,21 +8,8 @@ describe Ci::StopEnvironmentService, services: true do describe '#execute' do context 'when environment exists' do - let(:environment) { create(:environment, project: project) } - let(:deployable) { create(:ci_build) } - - let(:stop_build) do - create(:ci_build, :manual, name: 'environment/teardown', - pipeline: deployable.pipeline) - end - before do - create(:deployment, environment: environment, - deployable: deployable, - on_stop: stop_build.name, - user: user, - project: project, - sha: project.commit.id) + create(:environment, :with_review_app, project: project) end it 'stops environment' do |