diff --git a/lib/api/projects.rb b/lib/api/projects.rb index eb23641c605d..7ac2fd4a2491 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -23,6 +23,27 @@ class Projects < Grape::API present user_project, with: Entities::Project end + # Create new project + # + # Parameters: + # name (required) - name for new project + # code (optional) - code for new project, if not set used name + # path (optional) - oath for new project, if not set used name + # 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 0cbc12af53bb..cc6843ccb661 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -25,6 +25,43 @@ 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)