summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-01-04 12:20:12 +0100
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-01-04 12:20:12 +0100
commite83ae21d98d21e9064389c509829bdbadda3d391 (patch)
treebb651bb8fd5eb35ecee63c2e8b359fe1511a7f0a
parent6a7a31b82a8f52b356392bd491adde1f9b6ac1d6 (diff)
downloadgitlab-ce-e83ae21d98d21e9064389c509829bdbadda3d391.tar.gz
Extract anonymous user context in pipelines specs
-rw-r--r--spec/features/projects/pipelines/pipelines_spec.rb441
1 files changed, 226 insertions, 215 deletions
diff --git a/spec/features/projects/pipelines/pipelines_spec.rb b/spec/features/projects/pipelines/pipelines_spec.rb
index 892f4615132..86993574823 100644
--- a/spec/features/projects/pipelines/pipelines_spec.rb
+++ b/spec/features/projects/pipelines/pipelines_spec.rb
@@ -7,313 +7,324 @@ describe 'Pipelines', :feature, :js do
include WaitForAjax
let(:project) { create(:empty_project) }
- let(:user) { create(:user) }
- before do
- login_as(user)
- project.team << [user, :developer]
- end
-
- describe 'GET /:project/pipelines' do
- let(:project) { create(:project) }
-
- let!(:pipeline) do
- create(
- :ci_empty_pipeline,
- project: project,
- ref: 'master',
- status: 'running',
- sha: project.commit.id,
- )
- end
-
- [:all, :running, :branches].each do |scope|
- context "when displaying #{scope}" do
- before do
- visit_project_pipelines(scope: scope)
- end
-
- it 'contains pipeline commit short SHA' do
- expect(page).to have_content(pipeline.short_sha)
- end
- end
- end
-
- context 'anonymous access' do
- let(:project) { create(:project, :public) }
-
- before do
- logout
- visit_project_pipelines
- end
+ context 'when user is logged in' do
+ let(:user) { create(:user) }
- it { expect(page).to have_http_status(:success) }
+ before do
+ login_as(user)
+ project.team << [user, :developer]
end
- context 'when pipeline is cancelable' do
- let!(:build) do
- create(:ci_build, pipeline: pipeline,
- stage: 'test',
- commands: 'test')
- end
-
- before do
- build.run
- visit_project_pipelines
+ describe 'GET /:project/pipelines' do
+ let(:project) { create(:project) }
+
+ let!(:pipeline) do
+ create(
+ :ci_empty_pipeline,
+ project: project,
+ ref: 'master',
+ status: 'running',
+ sha: project.commit.id,
+ )
end
- it { expect(page).to have_link('Cancel') }
+ [:all, :running, :branches].each do |scope|
+ context "when displaying #{scope}" do
+ before do
+ visit_project_pipelines(scope: scope)
+ end
- it { expect(page).to have_selector('.ci-running') }
-
- context 'when canceling' do
- before { click_link('Cancel') }
-
- it { expect(page).not_to have_link('Cancel') }
- it { expect(page).to have_selector('.ci-canceled') }
- end
- end
-
- context 'when pipeline is retryable' do
- let!(:build) do
- create(:ci_build, pipeline: pipeline,
- stage: 'test',
- commands: 'test')
+ it 'contains pipeline commit short SHA' do
+ expect(page).to have_content(pipeline.short_sha)
+ end
+ end
end
- before do
- build.drop
- visit_project_pipelines
- end
+ context 'when pipeline is cancelable' do
+ let!(:build) do
+ create(:ci_build, pipeline: pipeline,
+ stage: 'test',
+ commands: 'test')
+ end
- it { expect(page).to have_link('Retry') }
- it { expect(page).to have_selector('.ci-failed') }
+ before do
+ build.run
+ visit_project_pipelines
+ end
- context 'when retrying' do
- before { click_link('Retry') }
+ it { expect(page).to have_link('Cancel') }
- it { expect(page).not_to have_link('Retry') }
it { expect(page).to have_selector('.ci-running') }
- end
- end
-
- context 'with manual actions' do
- let!(:manual) do
- create(:ci_build, :manual,
- pipeline: pipeline,
- name: 'manual build',
- stage: 'test',
- commands: 'test')
- end
- before { visit_project_pipelines }
+ context 'when canceling' do
+ before { click_link('Cancel') }
- it 'has a dropdown with play button' do
- expect(page).to have_selector('.dropdown-toggle.btn.btn-default .icon-play')
+ it { expect(page).not_to have_link('Cancel') }
+ it { expect(page).to have_selector('.ci-canceled') }
+ end
end
- it 'has link to the manual action' do
- find('.js-pipeline-dropdown-manual-actions').click
-
- expect(page).to have_link('Manual build')
- end
+ context 'when pipeline is retryable' do
+ let!(:build) do
+ create(:ci_build, pipeline: pipeline,
+ stage: 'test',
+ commands: 'test')
+ end
- context 'when manual action was played' do
before do
- find('.js-pipeline-dropdown-manual-actions').click
- click_link('Manual build')
+ build.drop
+ visit_project_pipelines
end
- it 'enqueues manual action job' do
- expect(manual.reload).to be_pending
+ it { expect(page).to have_link('Retry') }
+ it { expect(page).to have_selector('.ci-failed') }
+
+ context 'when retrying' do
+ before { click_link('Retry') }
+
+ it { expect(page).not_to have_link('Retry') }
+ it { expect(page).to have_selector('.ci-running') }
end
end
- end
- context 'for generic statuses' do
- context 'when running' do
- let!(:running) do
- create(:generic_commit_status,
- status: 'running',
+ context 'with manual actions' do
+ let!(:manual) do
+ create(:ci_build, :manual,
pipeline: pipeline,
- stage: 'test'
- )
+ name: 'manual build',
+ stage: 'test',
+ commands: 'test')
end
before { visit_project_pipelines }
- it 'is cancelable' do
- expect(page).to have_link('Cancel')
+ it 'has a dropdown with play button' do
+ expect(page).to have_selector('.dropdown-toggle.btn.btn-default .icon-play')
end
- it 'has pipeline running' do
- expect(page).to have_selector('.ci-running')
+ it 'has link to the manual action' do
+ find('.js-pipeline-dropdown-manual-actions').click
+
+ expect(page).to have_link('Manual build')
end
- context 'when canceling' do
- before { click_link('Cancel') }
+ context 'when manual action was played' do
+ before do
+ find('.js-pipeline-dropdown-manual-actions').click
+ click_link('Manual build')
+ end
- it { expect(page).not_to have_link('Cancel') }
- it { expect(page).to have_selector('.ci-canceled') }
+ it 'enqueues manual action job' do
+ expect(manual.reload).to be_pending
+ end
end
end
- context 'when failed' do
- let!(:status) do
- create(:generic_commit_status, :pending,
- pipeline: pipeline,
- stage: 'test')
- end
+ context 'for generic statuses' do
+ context 'when running' do
+ let!(:running) do
+ create(:generic_commit_status,
+ status: 'running',
+ pipeline: pipeline,
+ stage: 'test'
+ )
+ end
- before do
- status.drop
- visit_project_pipelines
- end
+ before { visit_project_pipelines }
+
+ it 'is cancelable' do
+ expect(page).to have_link('Cancel')
+ end
- it 'is not retryable' do
- expect(page).not_to have_link('Retry')
+ it 'has pipeline running' do
+ expect(page).to have_selector('.ci-running')
+ end
+
+ context 'when canceling' do
+ before { click_link('Cancel') }
+
+ it { expect(page).not_to have_link('Cancel') }
+ it { expect(page).to have_selector('.ci-canceled') }
+ end
end
- it 'has failed pipeline' do
- expect(page).to have_selector('.ci-failed')
+ context 'when failed' do
+ let!(:status) do
+ create(:generic_commit_status, :pending,
+ pipeline: pipeline,
+ stage: 'test')
+ end
+
+ before do
+ status.drop
+ visit_project_pipelines
+ end
+
+ it 'is not retryable' do
+ expect(page).not_to have_link('Retry')
+ end
+
+ it 'has failed pipeline' do
+ expect(page).to have_selector('.ci-failed')
+ end
end
end
- end
- context 'downloadable pipelines' do
- context 'with artifacts' do
- let!(:with_artifacts) do
- create(:ci_build, :artifacts, :success,
- pipeline: pipeline,
- name: 'rspec tests',
- stage: 'test')
+ context 'downloadable pipelines' do
+ context 'with artifacts' do
+ let!(:with_artifacts) do
+ create(:ci_build, :artifacts, :success,
+ pipeline: pipeline,
+ name: 'rspec tests',
+ stage: 'test')
+ end
+
+ before { visit_project_pipelines }
+
+ it 'has artifats' do
+ expect(page).to have_selector('.build-artifacts')
+ end
+
+ it 'has artifacts download dropdown' do
+ find('.js-pipeline-dropdown-download').click
+
+ expect(page).to have_link(with_artifacts.name)
+ end
end
- before { visit_project_pipelines }
+ context 'with artifacts expired' do
+ let!(:with_artifacts_expired) do
+ create(:ci_build, :artifacts_expired, :success,
+ pipeline: pipeline,
+ name: 'rspec',
+ stage: 'test')
+ end
- it 'has artifats' do
- expect(page).to have_selector('.build-artifacts')
+ before { visit_project_pipelines }
+
+ it { expect(page).not_to have_selector('.build-artifacts') }
end
- it 'has artifacts download dropdown' do
- find('.js-pipeline-dropdown-download').click
+ context 'without artifacts' do
+ let!(:without_artifacts) do
+ create(:ci_build, :success,
+ pipeline: pipeline,
+ name: 'rspec',
+ stage: 'test')
+ end
+
+ before { visit_project_pipelines }
- expect(page).to have_link(with_artifacts.name)
+ it { expect(page).not_to have_selector('.build-artifacts') }
end
end
- context 'with artifacts expired' do
- let!(:with_artifacts_expired) do
- create(:ci_build, :artifacts_expired, :success,
- pipeline: pipeline,
- name: 'rspec',
- stage: 'test')
+ context 'mini pipleine graph' do
+ let!(:build) do
+ create(:ci_build, pipeline: pipeline,
+ stage: 'build',
+ name: 'build')
end
before { visit_project_pipelines }
- it { expect(page).not_to have_selector('.build-artifacts') }
- end
+ context 'when clicking a graph stage' do
+ it 'should open a dropdown' do
+ find('.js-builds-dropdown-button').trigger('click')
- context 'without artifacts' do
- let!(:without_artifacts) do
- create(:ci_build, :success,
- pipeline: pipeline,
- name: 'rspec',
- stage: 'test')
- end
+ expect(page).to have_link build.name
+ end
- before { visit_project_pipelines }
+ it 'should be possible to retry the failed build' do
+ find('.js-builds-dropdown-button').trigger('click')
- it { expect(page).not_to have_selector('.build-artifacts') }
+ find('a.ci-action-icon-container').trigger('click')
+ expect(page).not_to have_content('Cancel running')
+ end
+ end
end
end
- context 'mini pipleine graph' do
- let!(:build) do
- create(:ci_build, pipeline: pipeline,
- stage: 'build',
- name: 'build')
+ describe 'POST /:project/pipelines' do
+ let(:project) { create(:project) }
+
+ before do
+ visit new_namespace_project_pipeline_path(project.namespace, project)
end
- before { visit_project_pipelines }
+ context 'for valid commit' do
+ before { fill_in('pipeline[ref]', with: 'master') }
- context 'when clicking a graph stage' do
- it 'should open a dropdown' do
- find('.js-builds-dropdown-button').trigger('click')
+ context 'with gitlab-ci.yml' do
+ before { stub_ci_pipeline_to_return_yaml_file }
- expect(page).to have_link build.name
+ it 'creates a new pipeline' do
+ expect { click_on 'Create pipeline' }
+ .to change { Ci::Pipeline.count }.by(1)
+ end
end
- it 'should be possible to retry the failed build' do
- find('.js-builds-dropdown-button').trigger('click')
+ context 'without gitlab-ci.yml' do
+ before { click_on 'Create pipeline' }
- find('a.ci-action-icon-container').trigger('click')
- expect(page).not_to have_content('Cancel running')
+ it { expect(page).to have_content('Missing .gitlab-ci.yml file') }
end
end
- end
- end
- describe 'POST /:project/pipelines' do
- let(:project) { create(:project) }
+ context 'for invalid commit' do
+ before do
+ fill_in('pipeline[ref]', with: 'invalid-reference')
+ click_on 'Create pipeline'
+ end
- before do
- visit new_namespace_project_pipeline_path(project.namespace, project)
+ it { expect(page).to have_content('Reference not found') }
+ end
end
- context 'for valid commit' do
- before { fill_in('pipeline[ref]', with: 'master') }
+ describe 'Create pipelines' do
+ let(:project) { create(:project) }
- context 'with gitlab-ci.yml' do
- before { stub_ci_pipeline_to_return_yaml_file }
+ before do
+ visit new_namespace_project_pipeline_path(project.namespace, project)
+ end
- it 'creates a new pipeline' do
- expect { click_on 'Create pipeline' }
- .to change { Ci::Pipeline.count }.by(1)
+ describe 'new pipeline page' do
+ it 'has field to add a new pipeline' do
+ expect(page).to have_field('pipeline[ref]')
+ expect(page).to have_content('Create for')
end
end
- context 'without gitlab-ci.yml' do
- before { click_on 'Create pipeline' }
+ describe 'find pipelines' do
+ it 'shows filtered pipelines', js: true do
+ fill_in('pipeline[ref]', with: 'fix')
+ find('input#ref').native.send_keys(:keydown)
- it { expect(page).to have_content('Missing .gitlab-ci.yml file') }
- end
- end
-
- context 'for invalid commit' do
- before do
- fill_in('pipeline[ref]', with: 'invalid-reference')
- click_on 'Create pipeline'
+ within('.ui-autocomplete') do
+ expect(page).to have_selector('li', text: 'fix')
+ end
+ end
end
-
- it { expect(page).to have_content('Reference not found') }
end
end
- describe 'Create pipelines' do
- let(:project) { create(:project) }
-
+ context 'when user is not logged in' do
before do
- visit new_namespace_project_pipeline_path(project.namespace, project)
+ visit namespace_project_pipelines_path(project.namespace, project)
end
- describe 'new pipeline page' do
- it 'has field to add a new pipeline' do
- expect(page).to have_field('pipeline[ref]')
- expect(page).to have_content('Create for')
- end
+ context 'when project is public' do
+ let(:project) { create(:project, :public) }
+
+ it { expect(page).to have_content 'No pipelines to show' }
+ it { expect(page).to have_http_status(:success) }
end
- describe 'find pipelines' do
- it 'shows filtered pipelines', js: true do
- fill_in('pipeline[ref]', with: 'fix')
- find('input#ref').native.send_keys(:keydown)
+ context 'when project is private' do
+ let(:project) { create(:project, :private) }
- within('.ui-autocomplete') do
- expect(page).to have_selector('li', text: 'fix')
- end
- end
+ it { expect(page).to have_content 'You need to sign in' }
end
end