summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/api/projects.md6
-rw-r--r--lib/api/projects.rb20
-rw-r--r--spec/factories.rb3
-rw-r--r--spec/requests/api/projects_spec.rb66
4 files changed, 58 insertions, 37 deletions
diff --git a/doc/api/projects.md b/doc/api/projects.md
index e029522be18..5a20719ff1a 100644
--- a/doc/api/projects.md
+++ b/doc/api/projects.md
@@ -102,6 +102,12 @@ 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
++ `description (optional) - short project description
++ `default_branch` (optional) - 'master' by default
++ `issues_enabled` (optional) - enabled by default
++ `wall_enabled` (optional) - enabled by default
++ `merge_requests_enabled` (optional) - enabled by default
++ `wiki_enabled` (optional) - enabled by default
Will return created project with status `201 Created` on success, or `404 Not
found` on fail.
diff --git a/lib/api/projects.rb b/lib/api/projects.rb
index 3d4fde9270f..d45d1d82d40 100644
--- a/lib/api/projects.rb
+++ b/lib/api/projects.rb
@@ -29,14 +29,24 @@ module Gitlab
# 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
+ # description (optional) - short project description
+ # default_branch (optional) - 'master' by default
+ # issues_enabled (optional) - enabled by default
+ # wall_enabled (optional) - enabled by default
+ # merge_requests_enabled (optional) - enabled by default
+ # wiki_enabled (optional) - enabled by default
# 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)
+ params[:code] ||= params[:name]
+ params[:path] ||= params[:name]
+ project_attrs = {}
+ params.each_pair do |k ,v|
+ if Project.attribute_names.include? k
+ project_attrs[k] = v
+ end
+ end
+ @project = Project.create_by_user(project_attrs, current_user)
if @project.saved?
present @project, with: Entities::Project
else
diff --git a/spec/factories.rb b/spec/factories.rb
index a8b3bc57d3f..92790a3fdb7 100644
--- a/spec/factories.rb
+++ b/spec/factories.rb
@@ -11,6 +11,9 @@ module Factory
def self.new(type, *args)
FactoryGirl.build(type, *args)
end
+ def self.attributes(type, *args)
+ FactoryGirl.attributes_for(type, *args)
+ end
end
FactoryGirl.define do
diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb
index cc6843ccb66..1373748f50d 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/spec/requests/api/projects_spec.rb
@@ -27,38 +27,40 @@ describe Gitlab::API do
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}
+ expect { post api("/projects", user), name: 'foo' }.to change {Project.count}.by(1)
+ end
+
+ it "should not create new project without name" do
+ expect { post api("/projects", user) }.to_not change {Project.count}
+ end
+
+ it "should respond with 201 on success" do
+ post api("/projects", user), name: 'foo'
+ response.status.should == 201
+ end
+
+ it "should repsond with 404 on failure" do
+ post api("/projects", user)
+ response.status.should == 404
+ end
+
+ it "should assign attributes to project" do
+ project = Factory.attributes(:project, {
+ path: 'path',
+ code: 'code',
+ description: Faker::Lorem.sentence,
+ default_branch: 'stable',
+ issues_enabled: false,
+ wall_enabled: false,
+ merge_requests_enabled: false,
+ wiki_enabled: false
+ })
+
+ post api("/projects", user), project
+
+ project.each_pair do |k,v|
+ json_response[k.to_s].should == v
+ end
end
end