Projects hooks API implemented
This commit is contained in:
parent
27e4436507
commit
3b5a90bdf6
|
@ -173,6 +173,50 @@ Parameters:
|
|||
|
||||
Will return status `200 OK` on success, or `404 Not found` on fail.
|
||||
|
||||
## Get project hooks
|
||||
|
||||
Get hooks for project
|
||||
|
||||
```
|
||||
GET /projects/:id/hooks
|
||||
```
|
||||
|
||||
Parameters:
|
||||
|
||||
+ `id` (required) - The ID or code name of a project
|
||||
|
||||
Will return hooks with status `200 OK` on success, or `404 Not found` on fail.
|
||||
|
||||
## Add project hook
|
||||
|
||||
Add hook to project
|
||||
|
||||
```
|
||||
POST /projects/:id/hooks
|
||||
```
|
||||
|
||||
Parameters:
|
||||
|
||||
+ `id` (required) - The ID or code name of a project
|
||||
+ `url` (required) - The hook URL
|
||||
|
||||
Will return status `201 Created` on success, or `404 Not found` on fail.
|
||||
|
||||
## Delete project hook
|
||||
|
||||
Delete hook from project
|
||||
|
||||
```
|
||||
DELETE /projects/:id/hooks
|
||||
```
|
||||
|
||||
Parameters:
|
||||
|
||||
+ `id` (required) - The ID or code name of a project
|
||||
+ `hook_id` (required) - The ID of hook to delete
|
||||
|
||||
Will return status `200 OK` on success, or `404 Not found` on fail.
|
||||
|
||||
## Project repository branches
|
||||
|
||||
Get a list of repository branches from a project, sorted by name alphabetically.
|
||||
|
|
|
@ -9,6 +9,10 @@ module Gitlab
|
|||
expose :id, :email, :name, :blocked, :created_at
|
||||
end
|
||||
|
||||
class Hook < Grape::Entity
|
||||
expose :id, :url
|
||||
end
|
||||
|
||||
class Project < Grape::Entity
|
||||
expose :id, :code, :name, :description, :path, :default_branch
|
||||
expose :owner, using: Entities::UserBasic
|
||||
|
|
|
@ -103,6 +103,46 @@ module Gitlab
|
|||
nil
|
||||
end
|
||||
|
||||
# Get project hooks
|
||||
#
|
||||
# Parameters:
|
||||
# id (required) - The ID or code name of a project
|
||||
# Example Request:
|
||||
# GET /projects/:id/hooks
|
||||
get ":id/hooks" do
|
||||
@hooks = paginate user_project.hooks
|
||||
present @hooks, with: Entities::Hook
|
||||
end
|
||||
|
||||
# Add hook to project
|
||||
#
|
||||
# Parameters:
|
||||
# id (required) - The ID or code name of a project
|
||||
# url (required) - The hook URL
|
||||
# Example Request:
|
||||
# POST /projects/:id/hooks
|
||||
post ":id/hooks" do
|
||||
@hook = user_project.hooks.new({"url" => params[:url]})
|
||||
if @hook.save
|
||||
present @hook, with: Entities::Hook
|
||||
else
|
||||
error!({'message' => '404 Not found'}, 404)
|
||||
end
|
||||
end
|
||||
|
||||
# Delete project hook
|
||||
#
|
||||
# Parameters:
|
||||
# id (required) - The ID or code name of a project
|
||||
# hook_id (required) - The ID of hook to delete
|
||||
# Example Request:
|
||||
# DELETE /projects/:id/hooks
|
||||
delete ":id/hooks" do
|
||||
@hook = user_project.hooks.find(params[:hook_id])
|
||||
@hook.destroy
|
||||
nil
|
||||
end
|
||||
|
||||
# Get a project repository branches
|
||||
#
|
||||
# Parameters:
|
||||
|
|
|
@ -6,6 +6,7 @@ describe Gitlab::API do
|
|||
let(:user) { Factory :user }
|
||||
let(:user2) { Factory.create(:user) }
|
||||
let(:user3) { Factory.create(:user) }
|
||||
let!(:hook) { Factory :project_hook, project: project, url: "http://example.com" }
|
||||
let!(:project) { Factory :project, owner: user }
|
||||
let!(:snippet) { Factory :snippet, author: user, project: project, title: 'example' }
|
||||
let!(:users_project) { Factory :users_project, user: user, project: project, project_access: UsersProject::MASTER }
|
||||
|
@ -147,6 +148,36 @@ describe Gitlab::API do
|
|||
end
|
||||
end
|
||||
|
||||
describe "GET /projects/:id/hooks" do
|
||||
it "should return project hooks" do
|
||||
get api("/projects/#{project.code}/hooks", user)
|
||||
|
||||
response.status.should == 200
|
||||
|
||||
json_response.should be_an Array
|
||||
json_response.count.should == 1
|
||||
json_response.first['url'].should == "http://example.com"
|
||||
end
|
||||
end
|
||||
|
||||
describe "POST /projects/:id/users" do
|
||||
it "should add hook to project" do
|
||||
expect {
|
||||
post api("/projects/#{project.code}/hooks", user),
|
||||
"url" => "http://example.com"
|
||||
}.to change {project.hooks.count}.by(1)
|
||||
end
|
||||
end
|
||||
|
||||
describe "DELETE /projects/:id/hooks" do
|
||||
it "should delete hook from project" do
|
||||
expect {
|
||||
delete api("/projects/#{project.code}/hooks", user),
|
||||
hook_id: hook.id
|
||||
}.to change {project.hooks.count}.by(-1)
|
||||
end
|
||||
end
|
||||
|
||||
describe "GET /projects/:id/repository/tags" do
|
||||
it "should return an array of project tags" do
|
||||
get api("/projects/#{project.code}/repository/tags", user)
|
||||
|
|
Loading…
Reference in a new issue