Merge shared context into controller test and update accordingly

This commit is contained in:
Lin Jen-Shin 2016-07-21 19:09:46 +08:00
parent 69d0671342
commit fa02d8fcc5
2 changed files with 62 additions and 116 deletions

View File

@ -1,9 +1,20 @@
require 'spec_helper'
require_relative '../shared/artifacts_context'
describe Projects::ArtifactsController do
let(:user) { create(:user) }
let(:project) { create(:project) }
let(:pipeline) do
create(:ci_pipeline,
project: project,
sha: project.commit.sha,
ref: project.default_branch)
end
let(:build) { create(:ci_build, :success, :artifacts, pipeline: pipeline) }
describe 'GET /:project/builds/artifacts/:ref_name/browse?job=name' do
include_context 'artifacts from ref and build name'
before do
project.team << [user, :developer]
end
before do
login_as(user)
@ -19,33 +30,69 @@ describe Projects::ArtifactsController do
job: job)
end
context '404' do
def verify
expect(response.status).to eq(404)
context 'cannot find the build' do
shared_examples 'not found' do
it { expect(response).to have_http_status(:not_found) }
end
it_behaves_like 'artifacts from ref with 404'
context 'has no such ref' do
before do
get path_from_ref('TAIL', build.name)
end
it_behaves_like 'not found'
end
context 'has no such build' do
before do
get path_from_ref(pipeline.ref, 'NOBUILD')
end
it_behaves_like 'not found'
end
context 'has no path' do
before do
get path_from_ref(pipeline.sha, build.name, '')
end
it('gives 404') { verify }
it_behaves_like 'not found'
end
end
context '302' do
def verify
path = browse_namespace_project_build_artifacts_path(
project.namespace,
project,
build)
context 'found the build and redirect' do
shared_examples 'redirect to the build' do
it 'redirects' do
path = browse_namespace_project_build_artifacts_path(
project.namespace,
project,
build)
expect(response).to redirect_to(path)
expect(response).to redirect_to(path)
end
end
it_behaves_like 'artifacts from ref successfully'
context 'with regular branch' do
before do
pipeline.update(ref: 'master',
sha: project.commit('master').sha)
get path_from_ref('master')
end
it_behaves_like 'redirect to the build'
end
context 'with branch name containing slash' do
before do
pipeline.update(ref: 'improve/awesome',
sha: project.commit('improve/awesome').sha)
get path_from_ref('improve/awesome')
end
it_behaves_like 'redirect to the build'
end
end
end
end

View File

@ -1,101 +0,0 @@
shared_context 'artifacts from ref and build name' do
let(:user) { create(:user) }
let(:project) { create(:project) }
let(:pipeline) do
create(:ci_pipeline,
project: project,
sha: project.commit('fix').sha,
ref: 'fix')
end
let(:build) { create(:ci_build, :success, :artifacts, pipeline: pipeline) }
before do
project.team << [user, :developer]
end
end
shared_examples 'artifacts from ref with 404' do
context 'has no such ref' do
before do
get path_from_ref('TAIL', build.name)
end
it('gives 404') { verify }
end
context 'has no such build' do
before do
get path_from_ref(pipeline.ref, 'NOBUILD')
end
it('gives 404') { verify }
end
end
shared_examples 'artifacts from ref successfully' do
def create_new_pipeline(status)
new_pipeline = create(:ci_pipeline, status: 'success')
create(:ci_build, status, :artifacts, pipeline: new_pipeline)
end
context 'with sha' do
before do
get path_from_ref(pipeline.sha)
end
it('gives the file') { verify }
end
context 'with regular branch' do
before do
pipeline.update(ref: 'master',
sha: project.commit('master').sha)
end
before do
get path_from_ref('master')
end
it('gives the file') { verify }
end
context 'with branch name containing slash' do
before do
pipeline.update(ref: 'improve/awesome',
sha: project.commit('improve/awesome').sha)
end
before do
get path_from_ref('improve/awesome')
end
it('gives the file') { verify }
end
context 'with latest pipeline' do
before do
3.times do # creating some old pipelines
create_new_pipeline(:success)
end
end
before do
get path_from_ref
end
it('gives the file') { verify }
end
context 'with success pipeline' do
before do
build # make sure pipeline was old, but still the latest success one
create_new_pipeline(:pending)
end
before do
get path_from_ref
end
it('gives the file') { verify }
end
end