diff options
-rw-r--r-- | features/project/badges/build.feature | 27 | ||||
-rw-r--r-- | features/steps/project/badges/build.rb | 32 | ||||
-rw-r--r-- | spec/features/projects/badges/pipeline_badge_spec.rb | 66 |
3 files changed, 61 insertions, 64 deletions
diff --git a/features/project/badges/build.feature b/features/project/badges/build.feature deleted file mode 100644 index bcf80ed620e..00000000000 --- a/features/project/badges/build.feature +++ /dev/null @@ -1,27 +0,0 @@ -Feature: Project Badges Build - Background: - Given I sign in as a user - And I own a project - And project has CI enabled - And project has a recent build - - Scenario: I want to see a badge for successfully built project - Given recent build is successful - When I display builds badge for a master branch - Then I should see a build success badge - - Scenario: I want to see a badge for project with failed builds - Given recent build failed - When I display builds badge for a master branch - Then I should see a build failed badge - - Scenario: I want to see a badge for project with running builds - Given recent build is successful - And project has another build that is running - When I display builds badge for a master branch - Then I should see a build running badge - - Scenario: I want to see a fresh badge on each request - Given recent build is successful - When I display builds badge for a master branch - Then I should see a badge that has not been cached diff --git a/features/steps/project/badges/build.rb b/features/steps/project/badges/build.rb deleted file mode 100644 index 9bcdccfb3bd..00000000000 --- a/features/steps/project/badges/build.rb +++ /dev/null @@ -1,32 +0,0 @@ -class Spinach::Features::ProjectBadgesBuild < Spinach::FeatureSteps - include SharedAuthentication - include SharedProject - include SharedBuilds - include RepoHelpers - - step 'I display builds badge for a master branch' do - visit pipeline_project_badges_path(@project, ref: :master, format: :svg) - end - - step 'I should see a build success badge' do - expect_badge('passed') - end - - step 'I should see a build failed badge' do - expect_badge('failed') - end - - step 'I should see a build running badge' do - expect_badge('running') - end - - step 'I should see a badge that has not been cached' do - expect(page.response_headers['Cache-Control']).to include 'no-cache' - end - - def expect_badge(status) - svg = Nokogiri::XML.parse(page.body) - expect(page.response_headers['Content-Type']).to include('image/svg+xml') - expect(svg.at(%Q{text:contains("#{status}")})).to be_truthy - end -end diff --git a/spec/features/projects/badges/pipeline_badge_spec.rb b/spec/features/projects/badges/pipeline_badge_spec.rb index 786973d6c2e..b83ea8f4eaa 100644 --- a/spec/features/projects/badges/pipeline_badge_spec.rb +++ b/spec/features/projects/badges/pipeline_badge_spec.rb @@ -1,14 +1,70 @@ require 'spec_helper' -feature 'pipeline badge' do - let(:project) { create(:project, :repository, :public) } +feature 'Pipeline Badge' do + set(:project) { create(:project, :repository, :public) } + let(:ref) { project.default_branch } # this can't be tested in the controller, as it bypasses the rails router # and constructs a route based on the controller being tested # Keep around until 10.0, see gitlab-org/gitlab-ce#35307 - scenario 'user request the deprecated build status badge' do - visit build_project_badges_path(project, ref: project.default_branch, format: :svg) + context 'when the deprecated badge is requested' do + it 'displays the badge' do + visit build_project_badges_path(project, ref: ref, format: :svg) - expect(page.status_code).to eq(200) + expect(page.status_code).to eq(200) + end + end + + context 'when the project has a pipeline' do + let!(:pipeline) { create(:ci_empty_pipeline, project: project, ref: ref, sha: project.commit(ref).sha) } + let!(:job) { create(:ci_build, pipeline: pipeline) } + + context 'when the pipeline was successfull' do + it 'displays so on the badge' do + job.success + + visit pipeline_project_badges_path(project, ref: ref, format: :svg) + + expect(page.status_code).to eq(200) + expect_badge('passed') + end + end + + context 'when the pipeline failed' do + it 'shows displays so on the badge' do + job.drop + + visit pipeline_project_badges_path(project, ref: ref, format: :svg) + + expect(page.status_code).to eq(200) + expect_badge('failed') + end + end + + context 'when the pipeline is running' do + it 'shows displays so on the badge' do + create(:ci_build, pipeline: pipeline, name: 'second build', status_event: 'run') + + visit pipeline_project_badges_path(project, ref: ref, format: :svg) + + expect(page.status_code).to eq(200) + expect_badge('running') + end + end + + context 'when a new pipeline is created' do + it 'shows a fresh badge' do + visit pipeline_project_badges_path(project, ref: ref, format: :svg) + + expect(page.status_code).to eq(200) + expect(page.response_headers['Cache-Control']).to include 'no-cache' + end + end + + def expect_badge(status) + svg = Nokogiri::XML.parse(page.body) + expect(page.response_headers['Content-Type']).to include('image/svg+xml') + expect(svg.at(%Q{text:contains("#{status}")})).to be_truthy + end end end |