diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2017-01-18 12:24:53 +0100 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2017-01-18 12:30:01 +0100 |
commit | 9ce8aa31f2f55563cbf4212f7dd2b51576967a55 (patch) | |
tree | 256f5f0a00ec166e3d71ef11e9e0e57bd072906d | |
parent | 53f4f849956e10ccbbf4a9011b46b84da33129b0 (diff) | |
download | gitlab-ce-fix/external-status-badge-links.tar.gz |
Respond with validation errors in commit status APIfix/external-status-badge-links
If validation errors are present, include validation errors in the
commit status API payload, instead of depending on state machine errors
caused by invalid record.
-rw-r--r-- | lib/api/commit_statuses.rb | 2 | ||||
-rw-r--r-- | spec/requests/api/commit_statuses_spec.rb | 19 |
2 files changed, 18 insertions, 3 deletions
diff --git a/lib/api/commit_statuses.rb b/lib/api/commit_statuses.rb index 4bbdf06a49c..b6e6820c3f4 100644 --- a/lib/api/commit_statuses.rb +++ b/lib/api/commit_statuses.rb @@ -78,6 +78,8 @@ module API description: params[:description] ) + render_validation_error!(status) if status.invalid? + begin case params[:state] when 'pending' diff --git a/spec/requests/api/commit_statuses_spec.rb b/spec/requests/api/commit_statuses_spec.rb index ffd38ff303a..c1c7c0882de 100644 --- a/spec/requests/api/commit_statuses_spec.rb +++ b/spec/requests/api/commit_statuses_spec.rb @@ -172,7 +172,7 @@ describe API::CommitStatuses, api: true do end end - context 'invalid status' do + context 'when status is invalid' do before { post api(post_url, developer), state: 'invalid' } it 'does not create commit status' do @@ -180,7 +180,7 @@ describe API::CommitStatuses, api: true do end end - context 'request without state' do + context 'when request without a state made' do before { post api(post_url, developer) } it 'does not create commit status' do @@ -188,7 +188,7 @@ describe API::CommitStatuses, api: true do end end - context 'invalid commit' do + context 'when commit SHA is invalid' do let(:sha) { 'invalid_sha' } before { post api(post_url, developer), state: 'running' } @@ -196,6 +196,19 @@ describe API::CommitStatuses, api: true do expect(response).to have_http_status(404) end end + + context 'when target URL is an invalid address' do + before do + post api(post_url, developer), state: 'pending', + target_url: 'invalid url' + end + + it 'responds with bad request status and validation errors' do + expect(response).to have_http_status(400) + expect(json_response['message']['target_url']) + .to include 'must be a valid URL' + end + end end context 'reporter user' do |