]> source.dussan.org Git - redmine.git/commitdiff
Ability to allow non-admin users to create projects (#1007).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 17 May 2009 12:59:14 +0000 (12:59 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 17 May 2009 12:59:14 +0000 (12:59 +0000)
This can be enabled in permissions settings. A non-admin user who creates a project is automatically added as a project member (the first role is given, TODO: make this given role configurable).
Projects can be added from the public projects list.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2750 e93f8b46-1217-0410-a6f0-8f06a7374b81

42 files changed:
app/controllers/application.rb
app/controllers/projects_controller.rb
app/models/user.rb
app/views/projects/index.rhtml
config/locales/bg.yml
config/locales/bs.yml
config/locales/ca.yml
config/locales/cs.yml
config/locales/da.yml
config/locales/de.yml
config/locales/en.yml
config/locales/es.yml
config/locales/fi.yml
config/locales/fr.yml
config/locales/gl.yml
config/locales/he.yml
config/locales/hu.yml
config/locales/it.yml
config/locales/ja.yml
config/locales/ko.yml
config/locales/lt.yml
config/locales/nl.yml
config/locales/no.yml
config/locales/pl.yml
config/locales/pt-BR.yml
config/locales/pt.yml
config/locales/ro.yml
config/locales/ru.yml
config/locales/sk.yml
config/locales/sl.yml
config/locales/sr.yml
config/locales/sv.yml
config/locales/th.yml
config/locales/tr.yml
config/locales/uk.yml
config/locales/vi.yml
config/locales/zh-TW.yml
config/locales/zh.yml
lib/redmine.rb
test/fixtures/roles.yml
test/functional/projects_controller_test.rb
test/integration/admin_test.rb

index 9123cfc0799a0dc457cba6c0977e20ef6514e7d8..fcf83c92a8f23f4e750e5b9adf0125e7933fafd6 100644 (file)
@@ -114,10 +114,15 @@ class ApplicationController < ActionController::Base
   end
 
   # Authorize the user for the requested action
-  def authorize(ctrl = params[:controller], action = params[:action])
-    allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @project)
+  def authorize(ctrl = params[:controller], action = params[:action], global = false)
+    allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @project, :global => global)
     allowed ? true : deny_access
   end
+
+  # Authorize the user for the requested action outside a project
+  def authorize_global(ctrl = params[:controller], action = params[:action], global = true)
+    authorize(ctrl, action, global)
+  end
   
   # make sure that the user is a member of the project (or admin) if project is private
   # used as a before_filter for actions that do not require any particular permission on the project
index 0dcc874c6e488f275dd9ff2f7e1031d4a22eb23a..5f508cb5f417d984d2f34bcc00b1bd85c9ccfceb 100644 (file)
@@ -26,7 +26,8 @@ class ProjectsController < ApplicationController
   before_filter :find_project, :except => [ :index, :list, :add, :copy, :activity ]
   before_filter :find_optional_project, :only => :activity
   before_filter :authorize, :except => [ :index, :list, :add, :copy, :archive, :unarchive, :destroy, :activity ]
-  before_filter :require_admin, :only => [ :add, :copy, :archive, :unarchive, :destroy ]
+  before_filter :authorize_global, :only => :add
+  before_filter :require_admin, :only => [ :copy, :archive, :unarchive, :destroy ]
   accept_key_auth :activity
   
   after_filter :only => [:add, :edit, :archive, :unarchive, :destroy] do |controller|
@@ -75,9 +76,14 @@ class ProjectsController < ApplicationController
       @project.enabled_module_names = params[:enabled_modules]
       if @project.save
         @project.set_parent!(params[:project]['parent_id']) if User.current.admin? && params[:project].has_key?('parent_id')
+        # Add current user as a project member if he is not admin
+        unless User.current.admin?
+          m = Member.new(:user => User.current, :roles => Role.builtin(false).find(:all, :order => 'position', :limit => 1))
+          @project.members << m
+        end
         flash[:notice] = l(:notice_successful_create)
-        redirect_to :controller => 'admin', :action => 'projects'
-         end           
+        redirect_to :controller => 'projects', :action => 'settings', :id => @project
+      end
     end        
   end
   
index 7bcf999f2f25cdc24623a01c4eb0818847314b83..0caaf34f6d60aec679782f53a1bfb5f312edb77c 100644 (file)
@@ -277,6 +277,9 @@ class User < ActiveRecord::Base
       roles.detect {|role| (project.is_public? || role.member?) && role.allowed_to?(action)}
       
     elsif options[:global]
+      # Admin users are always authorized
+      return true if admin?
+      
       # authorize if user has at least one role that has this permission
       roles = memberships.collect {|m| m.roles}.flatten.uniq
       roles.detect {|r| r.allowed_to?(action)} || (self.logged? ? Role.non_member.allowed_to?(action) : Role.anonymous.allowed_to?(action))
index 047d11ff589931df960457879e10043bc0b11c0c..3b24357996ead44f392ca39a170b0862565f8d7c 100644 (file)
@@ -1,5 +1,5 @@
 <div class="contextual">
-    <%= link_to(l(:label_project_new), {:controller => 'projects', :action => 'add'}, :class => 'icon icon-add') + ' |' if User.current.admin? %>
+    <%= link_to(l(:label_project_new), {:controller => 'projects', :action => 'add'}, :class => 'icon icon-add') + ' |' if User.current.allowed_to?(:add_project, nil, :global => true) %>
     <%= link_to l(:label_issue_view_all), { :controller => 'issues' } %> |
     <%= link_to l(:label_overall_activity), { :controller => 'projects', :action => 'activity' }%>
 </div>
index 36923c83caacd4c4d36153a0a21ba0edc92619b1..4a18f4939f8737757ce2bc8e2a73afe491a5c019 100644 (file)
@@ -796,3 +796,4 @@ bg:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index 59b25214399de720d2e2b006f19c384c40894dcd..841a56759117eacbaf5bc7637d28483d53dcb016 100644 (file)
@@ -829,3 +829,4 @@ bs:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.\r
   label_wiki_content_updated: Wiki page updated\r
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.\r
+  permission_add_project: Create project\r
index 20113f971d3c9823bcb8b6b50dcc8b35955e71d5..a209a1e5a7fc2ad8bd2ddfa2a5d5ffda2e888768 100644 (file)
@@ -799,3 +799,4 @@ ca:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index a8040ca1ea9a825bb604b006bb614f7d1282c5d7..cae51f951cdbc3b55961235cbe2da365c3e88dce 100644 (file)
@@ -802,3 +802,4 @@ cs:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index 6ce2fecb4aef5dbeea1a9b621c42d838d099152d..f388fc8c5a2241f94e4fd076128919cfc8ec39e8 100644 (file)
@@ -829,3 +829,4 @@ da:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index 26855bfdbe2382bcff86f88f6930fa28ac3bbb43..a6f56a2af18de4265b6b06db892d54aa08de9cf7 100644 (file)
@@ -828,3 +828,4 @@ de:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index 3cfcbc66e1007918462db6a5c0d5acb74fe65bad..9cfc0b1dd19e5bce1ccc86115a132928716b9a5e 100644 (file)
@@ -292,6 +292,7 @@ en:
   setting_openid: Allow OpenID login and registration
   setting_password_min_length: Minimum password length
   
+  permission_add_project: Create project
   permission_edit_project: Edit project
   permission_select_project_modules: Select project modules
   permission_manage_members: Manage members
index ff61e7d9e7fe6c6d5274d85b4d6f82ebea9b9bd7..8cc72b34b631e0b0075bcb267fa746c6d358222e 100644 (file)
@@ -849,3 +849,4 @@ es:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index a1cf5cbe78c0f0e3f73a51d99cd46e83960705d2..1f2f86c89339620c769e70464bb528a43cb06403 100644 (file)
@@ -839,3 +839,4 @@ fi:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index bbe18dca60b14a70db38b9022aad0215cce82bd2..ce9c2f776a9d3cc9991acc15e66fda12c07c187d 100644 (file)
@@ -324,6 +324,7 @@ fr:
   setting_openid: "Autoriser l'authentification et l'enregistrement OpenID"
   setting_password_min_length: Longueur minimum des mots de passe
   
+  permission_add_project: Créer un projet
   permission_edit_project: Modifier le projet
   permission_select_project_modules: Choisir les modules
   permission_manage_members: Gérer les members
index 167310e4232397e5b3ff8a14986fd0dbdf82c5b7..0f619adb68707b165d69f52c3a672a4ca505abc0 100644 (file)
@@ -828,3 +828,4 @@ gl:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index a720e4c26c95befeaba40317c428b2966c72bffd..d3b9bf0ec72fbeccf81e043651d383dac4e6d073 100644 (file)
@@ -811,3 +811,4 @@ he:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index 2e0b80439f0e01393c4c1a290b093659a3d1bc50..7b00becdd4bbb2c54ee1331296eede9f67c984a6 100644 (file)
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index 935c38149ed073d69d47f238251f9dd8c2cb3ffa..721d72c4746e8481e3ba4431e9ea7f7ab7aac704 100644 (file)
@@ -814,3 +814,4 @@ it:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index a9024f2ed35aef262063192c26457d0725bf733a..b00e9f2f72847259622b73fae58388a6b1201d1f 100644 (file)
@@ -827,3 +827,4 @@ ja:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index 221c524be314da5832ab6bdbfe68f10d15df7c08..b8cffa400a6247f948dcb7c0e6052522266c9737 100644 (file)
@@ -858,3 +858,4 @@ ko:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index 7ba666e15955f0fdc6348dff059666270ec242b1..3b2776d1bd8e57c5201871ec485c0aa19aafd181 100644 (file)
@@ -839,3 +839,4 @@ lt:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index 00229a81ad753f86fa86134d194d267e117c1e8f..071c1306a5b7230ec04d439846703c375af70b04 100644 (file)
@@ -784,3 +784,4 @@ nl:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index ed9309eb12a1e244bb76a40608db4308f323ebb4..a481d491216a91400b21b89a4aad3bf2aabbce5e 100644 (file)
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index 1a20ffa498edce1afe565521dc959caa520aca97..d252ec0ae24c2f423e4b7d0b3b3e33937bc667ea 100644 (file)
@@ -832,3 +832,4 @@ pl:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index 6592f6cec0172146d028220070e0809af968a423..7f4343a25d0258d1e524abe5b209ac129e5141c1 100644 (file)
@@ -834,3 +834,4 @@ pt-BR:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index ffc2795d2775836458cf66b6fa0b1506a4352374..ea40131c376c8bdb11e52d618f1d7004522b72fc 100644 (file)
@@ -820,3 +820,4 @@ pt:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index 7e5f098fd9c44ff182e0ce7cbe25343b4d363a8f..7d61ffb109d359986b260c155d462b2ff827f36d 100644 (file)
@@ -799,3 +799,4 @@ ro:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index 8b0605bbce7fd99a45b098304944e41695a2dca5..f2274db974efc14e866894d1c02a3e59f0c6b5ed 100644 (file)
@@ -926,3 +926,4 @@ ru:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index dd23496b9bfb0e379e9d4fda9575fedd320b33f6..8c73612e15339a46017f35badbf1b4cb7eebb2b4 100644 (file)
@@ -800,3 +800,4 @@ sk:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index f3f4d2fa865b7eaf2ed432ca4ad52a281164fbac..676f744ff92859f2f49d2f953224cf9228f68887 100644 (file)
@@ -798,3 +798,4 @@ sl:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index ed56fda995bc111c66b23092d86afa3cbdc1213a..8c6a753a037c5c33b19a6fad095776d3de75c046 100644 (file)
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index 3a7add901c0deac984dac607ec190a9851312657..47e33f356f2a868434ef93dce03c64de1e424e17 100644 (file)
@@ -856,3 +856,4 @@ sv:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index a24682700f5327c1b6dbb8870b7fad73608c370c..2f5bc7404e0d20b00fead1bfff536474504b0982 100644 (file)
@@ -799,3 +799,4 @@ th:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index c167d92150bbc11c60ea1da130dca18eea832001..4ab55429185200429eee926a9743517cae24305b 100644 (file)
@@ -835,3 +835,4 @@ tr:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index 719b2c3f523529e0404113098a3727102fd82376..5a7da7e77f65ed070dcadb3b9de539ceccea988a 100644 (file)
@@ -798,3 +798,4 @@ uk:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index b981752ce9db12d7334925c80716a21c0f3051df..d6885501b29f1da26069917493ff32b7f55a3777 100644 (file)
@@ -868,3 +868,4 @@ vi:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index 1c84c993121d43a8346faeb2ff06bd1f42c333ad..a9cfc4afe2752855aa049fd4cd48e815ec1d5a12 100644 (file)
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index 3145d303a5e4b62ef1038a9de211c8810019f16b..cce3115c4dd8cc82eb27b2503f98bf57d386b260 100644 (file)
@@ -831,3 +831,4 @@ zh:
   mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
   mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
index 5ac32b2fe638ca2b3e530f946f467a010de8cb13..6188e7e5edb3b6418e909a19094e2bdff9757cad 100644 (file)
@@ -20,6 +20,7 @@ REDMINE_SUPPORTED_SCM = %w( Subversion Darcs Mercurial Cvs Bazaar Git Filesystem
 Redmine::AccessControl.map do |map|
   map.permission :view_project, {:projects => [:show, :activity]}, :public => true
   map.permission :search_project, {:search => :index}, :public => true
+  map.permission :add_project, {:projects => :add}, :require => :loggedin
   map.permission :edit_project, {:projects => [:settings, :edit]}, :require => :member
   map.permission :select_project_modules, {:projects => :modules}, :require => :member
   map.permission :manage_members, {:projects => :settings, :members => [:new, :edit, :destroy, :autocomplete_for_member_login]}, :require => :member
index d8ae2c8197773b45863fb17b3a6ae3f8fe00bd3a..0bd078441fbf1ff238d5aaadf5c615560750492d 100644 (file)
@@ -5,6 +5,7 @@ roles_001:
   builtin: 0\r
   permissions: |\r
     --- \r
+    - :add_project\r
     - :edit_project\r
     - :manage_members\r
     - :manage_versions\r
index 2fba106e31201116d099fef53eadb13796be0d0b..0560a54b653a61174bf4fc61a16a54f45aec9a2e 100644 (file)
@@ -89,6 +89,56 @@ class ProjectsControllerTest < Test::Unit::TestCase
     )
   end
   
+  def test_get_add
+    @request.session[:user_id] = 1
+    get :add
+    assert_response :success
+    assert_template 'add'
+  end
+  
+  def test_get_add_by_non_admin
+    @request.session[:user_id] = 2
+    get :add
+    assert_response :success
+    assert_template 'add'
+  end
+  
+  def test_post_add
+    @request.session[:user_id] = 1
+    post :add, :project => { :name => "blog", 
+                             :description => "weblog",
+                             :identifier => "blog",
+                             :is_public => 1,
+                             :custom_field_values => { '3' => 'Beta' }
+                            }
+    assert_redirected_to '/projects/blog/settings'
+    
+    project = Project.find_by_name('blog')
+    assert_kind_of Project, project
+    assert_equal 'weblog', project.description 
+    assert_equal true, project.is_public?
+  end
+  
+  def test_post_add_by_non_admin
+    @request.session[:user_id] = 2
+    post :add, :project => { :name => "blog", 
+                             :description => "weblog",
+                             :identifier => "blog",
+                             :is_public => 1,
+                             :custom_field_values => { '3' => 'Beta' }
+                            }
+    assert_redirected_to '/projects/blog/settings'
+    
+    project = Project.find_by_name('blog')
+    assert_kind_of Project, project
+    assert_equal 'weblog', project.description 
+    assert_equal true, project.is_public?
+    
+    # User should be added as a project member
+    assert User.find(2).member_of?(project)
+    assert_equal 1, project.members.size
+  end
+  
   def test_show_routing
     assert_routing(
       {:method => :get, :path => '/projects/test'},
index 6c1db750375a08c98e1578443cd204352c6ffe66..dd14e6661b32a25d4401e23b761c1144cbccaa3f 100644 (file)
@@ -39,28 +39,4 @@ class AdminTest < ActionController::IntegrationTest
     locked_user = User.try_to_login("psmith", "psmith09")
     assert_equal nil, locked_user
   end
-  
-  def test_add_project
-    log_user("admin", "admin")
-    get "projects/new"
-    assert_response :success
-    assert_template "projects/add"
-    post "projects", :project => { :name => "blog", 
-                                       :description => "weblog",
-                                       :identifier => "blog",
-                                       :is_public => 1,
-                                       :custom_field_values => { '3' => 'Beta' }
-                                       }
-    assert_redirected_to "admin/projects"
-    assert_equal 'Successful creation.', flash[:notice]
-    
-    project = Project.find_by_name("blog")
-    assert_kind_of Project, project
-    assert_equal "weblog", project.description 
-    assert_equal true, project.is_public?
-    
-    get "admin/projects"
-    assert_response :success
-    assert_template "admin/projects"
-  end  
 end