##// END OF EJS Templates
Moves project attributes default assignments from ProjectsController#new to the model (#6064)....
Jean-Philippe Lang -
r4346:9284a32c9ac7
parent child
Show More
@@ -68,11 +68,6 class ProjectsController < ApplicationController
68 68 @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position")
69 69 @trackers = Tracker.all
70 70 @project = Project.new(params[:project])
71
72 @project.identifier = Project.next_identifier if Setting.sequential_project_identifiers?
73 @project.trackers = Tracker.all
74 @project.is_public = Setting.default_projects_public?
75 @project.enabled_module_names = Setting.default_projects_modules
76 71 end
77 72
78 73 def create
@@ -80,7 +75,7 class ProjectsController < ApplicationController
80 75 @trackers = Tracker.all
81 76 @project = Project.new(params[:project])
82 77
83 @project.enabled_module_names = params[:enabled_modules]
78 @project.enabled_module_names = params[:enabled_modules] if params[:enabled_modules]
84 79 if validate_parent_id && @project.save
85 80 @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id')
86 81 # Add current user as a project member if he is not admin
@@ -84,6 +84,24 class Project < ActiveRecord::Base
84 84 named_scope :all_public, { :conditions => { :is_public => true } }
85 85 named_scope :visible, lambda { { :conditions => Project.visible_by(User.current) } }
86 86
87 def initialize(attributes = nil)
88 super
89
90 initialized = (attributes || {}).stringify_keys
91 if !initialized.key?('identifier') && Setting.sequential_project_identifiers?
92 self.identifier = Project.next_identifier
93 end
94 if !initialized.key?('is_public')
95 self.is_public = Setting.default_projects_public?
96 end
97 if !initialized.key?('enabled_module_names')
98 self.enabled_module_names = Setting.default_projects_modules
99 end
100 if !initialized.key?('trackers') && !initialized.key?('tracker_ids')
101 self.trackers = Tracker.all
102 end
103 end
104
87 105 def identifier=(identifier)
88 106 super unless identifier_frozen?
89 107 end
@@ -492,7 +510,7 class Project < ActiveRecord::Base
492 510
493 511 def enabled_module_names=(module_names)
494 512 if module_names && module_names.is_a?(Array)
495 module_names = module_names.collect(&:to_s)
513 module_names = module_names.collect(&:to_s).reject(&:blank?)
496 514 # remove disabled modules
497 515 enabled_modules.each {|mod| mod.destroy unless module_names.include?(mod.name)}
498 516 # add new modules
@@ -501,6 +519,11 class Project < ActiveRecord::Base
501 519 enabled_modules.clear
502 520 end
503 521 end
522
523 # Returns an array of the enabled modules names
524 def enabled_module_names
525 enabled_modules.collect(&:name)
526 end
504 527
505 528 # Returns an array of projects that are in this project's hierarchy
506 529 #
@@ -10,6 +10,8
10 10 <%= l_or_humanize(m, :prefix => "project_module_") %>
11 11 </label>
12 12 <% end %>
13 <%= hidden_field_tag 'enabled_modules[]', '' %>
14
13 15 </fieldset>
14 16
15 17 <%= submit_tag l(:button_save) %>
@@ -103,6 +103,7 class ApiTest::ProjectsTest < ActionController::IntegrationTest
103 103 context "POST /projects" do
104 104 context "with valid parameters" do
105 105 setup do
106 Setting.default_projects_modules = ['issue_tracking', 'repository']
106 107 @parameters = {:project => {:name => 'API test', :identifier => 'api-test'}}
107 108 end
108 109
@@ -121,6 +122,7 class ApiTest::ProjectsTest < ActionController::IntegrationTest
121 122 project = Project.first(:order => 'id DESC')
122 123 assert_equal 'API test', project.name
123 124 assert_equal 'api-test', project.identifier
125 assert_equal ['issue_tracking', 'repository'], project.enabled_module_names
124 126
125 127 assert_response :created
126 128 assert_equal 'application/xml', @response.content_type
@@ -60,6 +60,35 class ProjectTest < ActiveSupport::TestCase
60 60 assert_equal "eCookbook", @ecookbook.name
61 61 end
62 62
63 def test_default_attributes
64 with_settings :default_projects_public => '1' do
65 assert_equal true, Project.new.is_public
66 assert_equal false, Project.new(:is_public => false).is_public
67 end
68
69 with_settings :default_projects_public => '0' do
70 assert_equal false, Project.new.is_public
71 assert_equal true, Project.new(:is_public => true).is_public
72 end
73
74 with_settings :sequential_project_identifiers => '1' do
75 assert !Project.new.identifier.blank?
76 assert Project.new(:identifier => '').identifier.blank?
77 end
78
79 with_settings :sequential_project_identifiers => '0' do
80 assert Project.new.identifier.blank?
81 assert !Project.new(:identifier => 'test').blank?
82 end
83
84 with_settings :default_projects_modules => ['issue_tracking', 'repository'] do
85 assert_equal ['issue_tracking', 'repository'], Project.new.enabled_module_names
86 end
87
88 assert_equal Tracker.all, Project.new.trackers
89 assert_equal Tracker.find(1, 3), Project.new(:tracker_ids => [1, 3]).trackers
90 end
91
63 92 def test_update
64 93 assert_equal "eCookbook", @ecookbook.name
65 94 @ecookbook.name = "eCook"
General Comments 0
You need to be logged in to leave comments. Login now