Skip to content
Snippets Groups Projects
Commit 3b5a90bd authored by miks's avatar miks
Browse files

Projects hooks API implemented

parent 27e44365
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -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.
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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:
Loading
Loading
Loading
Loading
@@ -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 }
Loading
Loading
@@ -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
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment