diff options
Diffstat (limited to 'spec/features/environment_spec.rb')
-rw-r--r-- | spec/features/environment_spec.rb | 225 |
1 files changed, 0 insertions, 225 deletions
diff --git a/spec/features/environment_spec.rb b/spec/features/environment_spec.rb deleted file mode 100644 index c203e1f20c1..00000000000 --- a/spec/features/environment_spec.rb +++ /dev/null @@ -1,225 +0,0 @@ -require 'spec_helper' - -feature 'Environment', :feature do - given(:project) { create(:empty_project) } - given(:user) { create(:user) } - given(:role) { :developer } - - background do - login_as(user) - project.team << [user, role] - end - - feature 'environment details page' do - given!(:environment) { create(:environment, project: project) } - given!(:deployment) { } - given!(:manual) { } - - before do - visit_environment(environment) - end - - scenario 'shows environment name' do - expect(page).to have_content(environment.name) - end - - context 'without deployments' do - scenario 'does show no deployments' do - expect(page).to have_content('You don\'t have any deployments right now.') - end - end - - context 'with deployments' do - 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 not show a re-deploy button for deployment without build' do - expect(page).not_to have_link('Re-deploy') - end - - scenario 'does not show terminal button' do - expect(page).not_to have_terminal_button - end - end - - context 'with related deployable present' do - given(:pipeline) { create(:ci_pipeline, project: project) } - given(:build) { create(:ci_build, pipeline: pipeline) } - - 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})") - end - - scenario 'does show re-deploy button' do - expect(page).to have_link('Re-deploy') - end - - scenario 'does not show terminal button' do - expect(page).not_to have_terminal_button - end - - context 'with manual action' 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 - - scenario 'does allow to play manual action' do - expect(manual).to be_skipped - expect{ click_link(manual.name.humanize) }.not_to change { Ci::Pipeline.count } - expect(page).to have_content(manual.name) - expect(manual.reload).to be_pending - end - - context 'with external_url' do - given(:environment) { create(:environment, project: project, external_url: 'https://git.gitlab.com') } - given(:build) { create(:ci_build, pipeline: pipeline) } - given(:deployment) { create(:deployment, environment: environment, deployable: build) } - - scenario 'does show an external link button' do - expect(page).to have_link(nil, href: environment.external_url) - end - end - - context 'with terminal' do - let(:project) { create(:kubernetes_project, :test_repo) } - - context 'for project master' do - let(:role) { :master } - - scenario 'it shows the terminal button' do - expect(page).to have_terminal_button - end - - context 'web terminal', :js do - before do - # Stub #terminals as it causes js-enabled feature specs to render the page incorrectly - allow_any_instance_of(Environment).to receive(:terminals) { nil } - visit terminal_namespace_project_environment_path(project.namespace, project, environment) - end - - it 'displays a web terminal' do - expect(page).to have_selector('#terminal') - end - - it 'displays a link to the environment external url' do - expect(page).to have_link(nil, href: environment.external_url) - end - end - end - - context 'for developer' do - let(:role) { :developer } - - scenario 'does not show terminal button' do - expect(page).not_to have_terminal_button - end - end - end - - context 'when environment is available' do - context 'with stop action' do - given(:manual) { create(:ci_build, :manual, pipeline: pipeline, name: 'close_app') } - given(:deployment) { create(:deployment, environment: environment, deployable: build, on_stop: 'close_app') } - - scenario 'does show stop button' do - expect(page).to have_link('Stop') - end - - scenario 'does allow to stop environment' do - click_link('Stop') - - expect(page).to have_content('close_app') - end - - context 'for reporter' do - let(:role) { :reporter } - - scenario 'does not show stop button' do - expect(page).not_to have_link('Stop') - end - end - end - - context 'without stop action' do - scenario 'does allow to stop environment' do - click_link('Stop') - end - end - end - - context 'when environment is stopped' do - given(:environment) { create(:environment, project: project, state: :stopped) } - - scenario 'does not show stop button' do - expect(page).not_to have_link('Stop') - end - end - end - 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 - - def have_terminal_button - have_link(nil, href: terminal_namespace_project_environment_path(project.namespace, project, environment)) - end -end |