From d4d4a78f834b409631b012aa555c0cb2c4e3166d Mon Sep 17 00:00:00 2001
From: Izaak Alpert <ialpert@blackberry.com>
Date: Thu, 8 Aug 2013 14:09:33 -0400
Subject: [PATCH] Update User api to respect default settings

-API now respects default_projects_limit, default_can_create_group, and default_can_create_team

Change-Id: I059d060d576df1050e5371e707381c5e8c608a7a
---
 app/models/user.rb              |  5 +++++
 lib/api/users.rb                |  2 +-
 spec/requests/api/users_spec.rb | 11 +++++++++++
 3 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/app/models/user.rb b/app/models/user.rb
index 2411b270fc..526edb9839 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -198,6 +198,11 @@ class User < ActiveRecord::Base
         User.find_by_username(name_or_id)
       end
     end
+
+    def defaults
+      { projects_limit: Gitlab.config.gitlab.default_projects_limit, can_create_group: Gitlab.config.gitlab.default_can_create_group, can_create_team: Gitlab.config.gitlab.default_can_create_team }
+    end
+
   end
 
   #
diff --git a/lib/api/users.rb b/lib/api/users.rb
index 84256b5112..3b7ae9f01a 100644
--- a/lib/api/users.rb
+++ b/lib/api/users.rb
@@ -46,7 +46,7 @@ module API
         authenticated_as_admin!
         required_attributes! [:email, :password, :name, :username]
 
-        attrs = attributes_for_keys [:email, :name, :password, :skype, :linkedin, :twitter, :projects_limit, :username, :extern_uid, :provider, :bio]
+        attrs = User.defaults.merge(attributes_for_keys [:email, :name, :password, :skype, :linkedin, :twitter, :projects_limit, :username, :extern_uid, :provider, :bio])
         user = User.new attrs, as: :admin
         if user.save
           present user, with: Entities::User
diff --git a/spec/requests/api/users_spec.rb b/spec/requests/api/users_spec.rb
index 2f4aaae389..c09d78993e 100644
--- a/spec/requests/api/users_spec.rb
+++ b/spec/requests/api/users_spec.rb
@@ -57,6 +57,17 @@ describe API::API do
       response.status.should == 201
     end
 
+    it "creating a user should respect default project limit" do
+      limit = 123456
+      Gitlab.config.gitlab.stub(:default_projects_limit).and_return(limit)
+      attr = attributes_for(:user )
+      expect {
+        post api("/users", admin), attr
+      }.to change { User.count }.by(1)
+      User.find_by_username(attr[:username]).projects_limit.should == limit
+      Gitlab.config.gitlab.unstub(:default_projects_limit)
+    end
+
     it "should not create user with invalid email" do
       post api("/users", admin), { email: "invalid email", password: 'password' }
       response.status.should == 400
-- 
2.30.9