]> source.dussan.org Git - redmine.git/commitdiff
Do not DELETE/INSERT enabled_modules when updating project modules.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 15 Feb 2009 16:26:48 +0000 (16:26 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 15 Feb 2009 16:26:48 +0000 (16:26 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2473 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/project.rb
test/unit/project_test.rb

index 7ce0051edf97931c124b958701cc71b06d617e4a..e4db6d867a6ad10f24e3e38f5b6ed8979d5e1e86 100644 (file)
@@ -287,10 +287,14 @@ class Project < ActiveRecord::Base
   end
   
   def enabled_module_names=(module_names)
-    enabled_modules.clear
-    module_names = [] unless module_names && module_names.is_a?(Array)
-    module_names.each do |name|
-      enabled_modules << EnabledModule.new(:name => name.to_s)
+    if module_names && module_names.is_a?(Array)
+      module_names = module_names.collect(&:to_s)
+      # remove disabled modules
+      enabled_modules.each {|mod| mod.destroy unless module_names.include?(mod.name)}
+      # add new modules
+      module_names.each {|name| enabled_modules << EnabledModule.new(:name => name)}
+    else
+      enabled_modules.clear
     end
   end
   
index 94177f4335758512864fd0e86f469e3dc6578bbd..27cff13d66613dea7b26a3a6ff70b30fd4e9e972 100644 (file)
@@ -18,7 +18,9 @@
 require File.dirname(__FILE__) + '/../test_helper'\r
 \r
 class ProjectTest < Test::Unit::TestCase\r
-  fixtures :projects, :issues, :issue_statuses, :journals, :journal_details, :users, :members, :roles, :projects_trackers, :trackers, :boards\r
+  fixtures :projects, :enabled_modules, \r
+           :issues, :issue_statuses, :journals, :journal_details,\r
+           :users, :members, :roles, :projects_trackers, :trackers, :boards\r
 \r
   def setup\r
     @ecookbook = Project.find(1)\r
@@ -218,4 +220,17 @@ class ProjectTest < Test::Unit::TestCase
     Project.delete_all\r
     assert_nil Project.next_identifier\r
   end\r
+  \r
+  def test_enabled_module_names_should_not_recreate_enabled_modules\r
+    project = Project.find(1)\r
+    # Remove one module\r
+    modules = project.enabled_modules.slice(0..-2)\r
+    assert modules.any?\r
+    assert_difference 'EnabledModule.count', -1 do\r
+      project.enabled_module_names = modules.collect(&:name)\r
+    end\r
+    project.reload\r
+    # Ids should be preserved\r
+    assert_equal project.enabled_module_ids.sort, modules.collect(&:id).sort\r
+  end\r
 end\r