diff --git a/doc/api/projects.md b/doc/api/projects.md index d680b5d859704a0220377cbd6567d5326664cbac..b0c1e65709c86069aba2281bc0ce0262dff9ace9 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -89,6 +89,24 @@ Parameters: } ``` +## Create project + +Create new project owned by user + +``` +POST /projects +``` + +Parameters: + ++ `name` (required) - new project name ++ `code` (optional) - new project code, uses project name if not set ++ `path` (optional) - new project path, uses project name if not set + +Will return created project with status `201 Created` on success, or `404 Not +found` on fail. + + ## Project repository branches Get a list of project repository branches sorted by name alphabetically. diff --git a/lib/api/projects.rb b/lib/api/projects.rb index eb23641c605dd34807958a320240d01796d5d5c2..f42849cd2f2d9989bec9a474df79720d69477a69 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -23,6 +23,27 @@ module Gitlab present user_project, with: Entities::Project end + # Create new project + # + # Parameters: + # name (required) - name for new project + # code (optional) - code for new project, uses project name if not set + # path (optional) - path for new project, uses project name if not set + # Example Request + # POST /projects + post do + project = {} + project[:name] = params[:name] + project[:code] = params[:code] || project[:name] + project[:path] = params[:path] || project[:name] + @project = Project.create_by_user(project, current_user) + if @project.saved? + present @project, with: Entities::Project + else + error!({'message' => '404 Not found'}, 404) + end + end + # Get a project repository branches # # Parameters: diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index 0cbc12af53bb493c373df58c6a6a8b7ca1add76a..cc6843ccb661f6b046838bf617accb2618f8f61b 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -25,6 +25,43 @@ describe Gitlab::API do end end + describe "POST /projects" do + it "should create new project without code and path" do + lambda { + name = "foo" + post api("/projects", user), { + name: name + } + response.status.should == 201 + json_response["name"].should == name + json_response["code"].should == name + json_response["path"].should == name + }.should change{Project.count}.by(1) + end + it "should create new project" do + lambda { + name = "foo" + path = "bar" + code = "bazz" + post api("/projects", user), { + code: code, + path: path, + name: name + } + response.status.should == 201 + json_response["name"].should == name + json_response["path"].should == path + json_response["code"].should == code + }.should change{Project.count}.by(1) + end + it "should not create project without name" do + lambda { + post api("/projects", user) + response.status.should == 404 + }.should_not change{Project.count} + end + end + describe "GET /projects/:id" do it "should return a project by id" do get api("/projects/#{project.id}", user)