diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2016-06-28 12:22:31 +0200 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2016-06-28 12:22:31 +0200 |
commit | b9b95a9f19a2699470636cdac874d32556e48f26 (patch) | |
tree | 53299df34d24f5c16b7e33b5a52cd1f402c34210 /spec | |
parent | 8e66618749613333c9201a6ffaf7fc67633cc055 (diff) | |
download | gitlab-ce-b9b95a9f19a2699470636cdac874d32556e48f26.tar.gz |
Improve commit builds API endpoint RESTful behavior
1. Return 404 if commit is not found (RESTful resource not found)
2. Return an empty array if pipeline is not found (resource present, no
associated builds found)
3. Return an empty array if pipeline found but no builds there (resource
present, no associated builds)
Diffstat (limited to 'spec')
-rw-r--r-- | spec/requests/api/builds_spec.rb | 63 |
1 files changed, 48 insertions, 15 deletions
diff --git a/spec/requests/api/builds_spec.rb b/spec/requests/api/builds_spec.rb index e9948b0afa2..f5b39c3d698 100644 --- a/spec/requests/api/builds_spec.rb +++ b/spec/requests/api/builds_spec.rb @@ -63,27 +63,60 @@ describe API::API, api: true do end describe 'GET /projects/:id/repository/commits/:sha/builds' do - before do - create(:ci_pipeline, project: project, sha: project.commit.id) - create(:ci_build, pipeline: pipeline) - create(:ci_build) + context 'when commit does not exist in repository' do + before do + get api("/projects/#{project.id}/repository/commits/1a271fd1/builds", api_user) + end - get api("/projects/#{project.id}/repository/commits/#{project.commit.id}/builds", api_user) + it 'responds with 404' do + expect(response).to have_http_status(404) + end end - context 'authorized user' do - it 'should return project builds for specific commit' do - expect(response).to have_http_status(200) - expect(json_response).to be_an Array - expect(json_response.size).to eq 2 + context 'when commit exists in repository' do + context 'when user is authorized' do + context 'when pipeline has builds' do + before do + create(:ci_pipeline, project: project, sha: project.commit.id) + create(:ci_build, pipeline: pipeline) + create(:ci_build) + + get api("/projects/#{project.id}/repository/commits/#{project.commit.id}/builds", api_user) + end + + it 'should return project builds for specific commit' do + expect(response).to have_http_status(200) + expect(json_response).to be_an Array + expect(json_response.size).to eq 2 + end + end + + context 'when pipeline has no builds' do + before do + branch_head = project.commit('feature').id + get api("/projects/#{project.id}/repository/commits/#{branch_head}/builds", api_user) + end + + it 'returns an empty array' do + expect(response).to have_http_status(200) + expect(json_response).to be_an Array + expect(json_response).to be_empty + end + end end - end - context 'unauthorized user' do - let(:api_user) { nil } + context 'when user is not authorized' do + before do + create(:ci_pipeline, project: project, sha: project.commit.id) + create(:ci_build, pipeline: pipeline) - it 'should not return project builds' do - expect(response).to have_http_status(401) + get api("/projects/#{project.id}/repository/commits/#{project.commit.id}/builds", nil) + end + + it 'should not return project builds' do + expect(response).to have_http_status(401) + expect(json_response.except('message')).to be_empty + end end end end |