summaryrefslogtreecommitdiff
path: root/spec/features/environment_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/features/environment_spec.rb')
-rw-r--r--spec/features/environment_spec.rb80
1 files changed, 67 insertions, 13 deletions
diff --git a/spec/features/environment_spec.rb b/spec/features/environment_spec.rb
index 3bf2fd54088..0c1939fd885 100644
--- a/spec/features/environment_spec.rb
+++ b/spec/features/environment_spec.rb
@@ -1,6 +1,6 @@
require 'spec_helper'
-feature 'Environments', feature: true do
+feature 'Environment', :feature do
given(:project) { create(:empty_project) }
given(:user) { create(:user) }
given(:role) { :developer }
@@ -10,13 +10,13 @@ feature 'Environments', feature: true do
project.team << [user, role]
end
- describe 'when showing the environment' do
- given(:environment) { create(:environment, project: project) }
+ feature 'environment details page' do
+ given!(:environment) { create(:environment, project: project) }
given!(:deployment) { }
given!(:manual) { }
before do
- visit namespace_project_environment_path(project.namespace, project, environment)
+ visit_environment(environment)
end
context 'without deployments' do
@@ -26,20 +26,27 @@ feature 'Environments', feature: true do
end
context 'with deployments' do
- given(:deployment) { create(:deployment, environment: environment) }
+ context 'when there is no related deployable' do
+ given(:deployment) do
+ create(:deployment, environment: environment, deployable: nil)
+ end
- scenario 'does show deployment SHA' do
- expect(page).to have_link(deployment.short_sha)
- end
+ scenario 'does show deployment SHA' do
+ expect(page).to have_link(deployment.short_sha)
+ end
- scenario 'does not show a re-deploy button for deployment without build' do
- expect(page).not_to have_link('Re-deploy')
+ scenario 'does not show a re-deploy button for deployment without build' do
+ expect(page).not_to have_link('Re-deploy')
+ end
end
- context 'with build' do
+ context 'with related deployable present' do
given(:pipeline) { create(:ci_pipeline, project: project) }
given(:build) { create(:ci_build, pipeline: pipeline) }
- given(:deployment) { create(:deployment, environment: environment, deployable: build) }
+
+ given(:deployment) do
+ create(:deployment, environment: environment, deployable: build)
+ end
scenario 'does show build name' do
expect(page).to have_link("#{build.name} (##{build.id})")
@@ -57,7 +64,6 @@ feature 'Environments', feature: true do
given(:manual) { create(:ci_build, :manual, pipeline: pipeline, name: 'deploy to production') }
scenario 'does show a play button' do
-
expect(page).to have_link(manual.name.humanize)
end
@@ -104,4 +110,52 @@ feature 'Environments', feature: true do
end
end
end
+
+ feature 'auto-close environment when branch is deleted' do
+ given(:project) { create(:project) }
+
+ given!(:environment) do
+ create(:environment, :with_review_app, project: project,
+ ref: 'feature')
+ end
+
+ scenario 'user visits environment page' do
+ visit_environment(environment)
+
+ expect(page).to have_link('Stop')
+ end
+
+ scenario 'user deletes the branch with running environment' do
+ visit namespace_project_branches_path(project.namespace, project)
+
+ remove_branch_with_hooks(project, user, 'feature') do
+ page.within('.js-branch-feature') { find('a.btn-remove').click }
+ end
+
+ visit_environment(environment)
+
+ expect(page).to have_no_link('Stop')
+ end
+
+ ##
+ # This is a workaround for problem described in #24543
+ #
+ def remove_branch_with_hooks(project, user, branch)
+ params = {
+ oldrev: project.commit(branch).id,
+ newrev: Gitlab::Git::BLANK_SHA,
+ ref: "refs/heads/#{branch}"
+ }
+
+ yield
+
+ GitPushService.new(project, user, params).execute
+ end
+ end
+
+ def visit_environment(environment)
+ visit namespace_project_environment_path(environment.project.namespace,
+ environment.project,
+ environment)
+ end
end