Commit ba2d5b16 authored by Rémy Coutable's avatar Rémy Coutable

Merge branch 'grapify-commit-statuses-api' into 'master'

Grapify the commit status API

## What does this MR do?

Add the Grape-DSL to the commit status API.

## What are the relevant issue numbers?

Related to #22928

See merge request !6879
parents a9675600 c7282f89
...@@ -6,17 +6,17 @@ module API ...@@ -6,17 +6,17 @@ module API
resource :projects do resource :projects do
before { authenticate! } before { authenticate! }
# Get a commit's statuses desc "Get a commit's statuses" do
# success Entities::CommitStatus
# Parameters: end
# id (required) - The ID of a project params do
# sha (required) - The commit hash requires :id, type: String, desc: 'The ID of a project'
# ref (optional) - The ref requires :sha, type: String, desc: 'The commit hash'
# stage (optional) - The stage optional :ref, type: String, desc: 'The ref'
# name (optional) - The name optional :stage, type: String, desc: 'The stage'
# all (optional) - Show all statuses, default: false optional :name, type: String, desc: 'The name'
# Examples: optional :all, type: String, desc: 'Show all statuses, default: false'
# GET /projects/:id/repository/commits/:sha/statuses end
get ':id/repository/commits/:sha/statuses' do get ':id/repository/commits/:sha/statuses' do
authorize!(:read_commit_status, user_project) authorize!(:read_commit_status, user_project)
...@@ -31,22 +31,23 @@ module API ...@@ -31,22 +31,23 @@ module API
present paginate(statuses), with: Entities::CommitStatus present paginate(statuses), with: Entities::CommitStatus
end end
# Post status to commit desc 'Post status to a commit' do
# success Entities::CommitStatus
# Parameters: end
# id (required) - The ID of a project params do
# sha (required) - The commit hash requires :id, type: String, desc: 'The ID of a project'
# ref (optional) - The ref requires :sha, type: String, desc: 'The commit hash'
# state (required) - The state of the status. Can be: pending, running, success, failed or canceled requires :state, type: String, desc: 'The state of the status',
# target_url (optional) - The target URL to associate with this status values: ['pending', 'running', 'success', 'failed', 'canceled']
# description (optional) - A short description of the status optional :ref, type: String, desc: 'The ref'
# name or context (optional) - A string label to differentiate this status from the status of other systems. Default: "default" optional :target_url, type: String, desc: 'The target URL to associate with this status'
# Examples: optional :description, type: String, desc: 'A short description of the status'
# POST /projects/:id/statuses/:sha optional :name, type: String, desc: 'A string label to differentiate this status from the status of other systems. Default: "default"'
optional :context, type: String, desc: 'A string label to differentiate this status from the status of other systems. Default: "default"'
end
post ':id/statuses/:sha' do post ':id/statuses/:sha' do
authorize! :create_commit_status, user_project authorize! :create_commit_status, user_project
required_attributes! [:state]
attrs = attributes_for_keys [:target_url, :description]
commit = @project.commit(params[:sha]) commit = @project.commit(params[:sha])
not_found! 'Commit' unless commit not_found! 'Commit' unless commit
...@@ -68,7 +69,7 @@ module API ...@@ -68,7 +69,7 @@ module API
status = GenericCommitStatus.running_or_pending.find_or_initialize_by( status = GenericCommitStatus.running_or_pending.find_or_initialize_by(
project: @project, pipeline: pipeline, project: @project, pipeline: pipeline,
user: current_user, name: name, ref: ref) user: current_user, name: name, ref: ref)
status.attributes = attrs status.attributes = declared(params).slice(:target_url, :description)
begin begin
case params[:state].to_s case params[:state].to_s
......
...@@ -196,7 +196,7 @@ describe API::CommitStatuses, api: true do ...@@ -196,7 +196,7 @@ describe API::CommitStatuses, api: true do
end end
context 'reporter user' do context 'reporter user' do
before { post api(post_url, reporter) } before { post api(post_url, reporter), state: 'running' }
it 'does not create commit status' do it 'does not create commit status' do
expect(response).to have_http_status(403) expect(response).to have_http_status(403)
...@@ -204,7 +204,7 @@ describe API::CommitStatuses, api: true do ...@@ -204,7 +204,7 @@ describe API::CommitStatuses, api: true do
end end
context 'guest user' do context 'guest user' do
before { post api(post_url, guest) } before { post api(post_url, guest), state: 'running' }
it 'does not create commit status' do it 'does not create commit status' do
expect(response).to have_http_status(403) expect(response).to have_http_status(403)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment