Commit 7c0a1068bf337cd169d11cca764af6b0ceb986b2
Exists in
master
and in
4 other branches
Merge pull request #1363 from AlexDenisov/api_create_project_fixes
API create project fixes
Showing
4 changed files
with
58 additions
and
37 deletions
Show diff stats
doc/api/projects.md
... | ... | @@ -102,6 +102,12 @@ Parameters: |
102 | 102 | + `name` (required) - new project name |
103 | 103 | + `code` (optional) - new project code, uses project name if not set |
104 | 104 | + `path` (optional) - new project path, uses project name if not set |
105 | ++ `description (optional) - short project description | |
106 | ++ `default_branch` (optional) - 'master' by default | |
107 | ++ `issues_enabled` (optional) - enabled by default | |
108 | ++ `wall_enabled` (optional) - enabled by default | |
109 | ++ `merge_requests_enabled` (optional) - enabled by default | |
110 | ++ `wiki_enabled` (optional) - enabled by default | |
105 | 111 | |
106 | 112 | Will return created project with status `201 Created` on success, or `404 Not |
107 | 113 | found` on fail. | ... | ... |
lib/api/projects.rb
... | ... | @@ -29,14 +29,24 @@ module Gitlab |
29 | 29 | # name (required) - name for new project |
30 | 30 | # code (optional) - code for new project, uses project name if not set |
31 | 31 | # path (optional) - path for new project, uses project name if not set |
32 | + # description (optional) - short project description | |
33 | + # default_branch (optional) - 'master' by default | |
34 | + # issues_enabled (optional) - enabled by default | |
35 | + # wall_enabled (optional) - enabled by default | |
36 | + # merge_requests_enabled (optional) - enabled by default | |
37 | + # wiki_enabled (optional) - enabled by default | |
32 | 38 | # Example Request |
33 | 39 | # POST /projects |
34 | 40 | post do |
35 | - project = {} | |
36 | - project[:name] = params[:name] | |
37 | - project[:code] = params[:code] || project[:name] | |
38 | - project[:path] = params[:path] || project[:name] | |
39 | - @project = Project.create_by_user(project, current_user) | |
41 | + params[:code] ||= params[:name] | |
42 | + params[:path] ||= params[:name] | |
43 | + project_attrs = {} | |
44 | + params.each_pair do |k ,v| | |
45 | + if Project.attribute_names.include? k | |
46 | + project_attrs[k] = v | |
47 | + end | |
48 | + end | |
49 | + @project = Project.create_by_user(project_attrs, current_user) | |
40 | 50 | if @project.saved? |
41 | 51 | present @project, with: Entities::Project |
42 | 52 | else | ... | ... |
spec/factories.rb
spec/requests/api/projects_spec.rb
... | ... | @@ -27,38 +27,40 @@ describe Gitlab::API do |
27 | 27 | |
28 | 28 | describe "POST /projects" do |
29 | 29 | it "should create new project without code and path" do |
30 | - lambda { | |
31 | - name = "foo" | |
32 | - post api("/projects", user), { | |
33 | - name: name | |
34 | - } | |
35 | - response.status.should == 201 | |
36 | - json_response["name"].should == name | |
37 | - json_response["code"].should == name | |
38 | - json_response["path"].should == name | |
39 | - }.should change{Project.count}.by(1) | |
40 | - end | |
41 | - it "should create new project" do | |
42 | - lambda { | |
43 | - name = "foo" | |
44 | - path = "bar" | |
45 | - code = "bazz" | |
46 | - post api("/projects", user), { | |
47 | - code: code, | |
48 | - path: path, | |
49 | - name: name | |
50 | - } | |
51 | - response.status.should == 201 | |
52 | - json_response["name"].should == name | |
53 | - json_response["path"].should == path | |
54 | - json_response["code"].should == code | |
55 | - }.should change{Project.count}.by(1) | |
56 | - end | |
57 | - it "should not create project without name" do | |
58 | - lambda { | |
59 | - post api("/projects", user) | |
60 | - response.status.should == 404 | |
61 | - }.should_not change{Project.count} | |
30 | + expect { post api("/projects", user), name: 'foo' }.to change {Project.count}.by(1) | |
31 | + end | |
32 | + | |
33 | + it "should not create new project without name" do | |
34 | + expect { post api("/projects", user) }.to_not change {Project.count} | |
35 | + end | |
36 | + | |
37 | + it "should respond with 201 on success" do | |
38 | + post api("/projects", user), name: 'foo' | |
39 | + response.status.should == 201 | |
40 | + end | |
41 | + | |
42 | + it "should repsond with 404 on failure" do | |
43 | + post api("/projects", user) | |
44 | + response.status.should == 404 | |
45 | + end | |
46 | + | |
47 | + it "should assign attributes to project" do | |
48 | + project = Factory.attributes(:project, { | |
49 | + path: 'path', | |
50 | + code: 'code', | |
51 | + description: Faker::Lorem.sentence, | |
52 | + default_branch: 'stable', | |
53 | + issues_enabled: false, | |
54 | + wall_enabled: false, | |
55 | + merge_requests_enabled: false, | |
56 | + wiki_enabled: false | |
57 | + }) | |
58 | + | |
59 | + post api("/projects", user), project | |
60 | + | |
61 | + project.each_pair do |k,v| | |
62 | + json_response[k.to_s].should == v | |
63 | + end | |
62 | 64 | end |
63 | 65 | end |
64 | 66 | ... | ... |