]> source.dussan.org Git - redmine.git/commitdiff
Ability to remove enumerations (activities, priorities, document categories) that...
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Tue, 17 Jun 2008 19:10:54 +0000 (19:10 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Tue, 17 Jun 2008 19:10:54 +0000 (19:10 +0000)
git-svn-id: http://redmine.rubyforge.org/svn/trunk@1558 e93f8b46-1217-0410-a6f0-8f06a7374b81

33 files changed:
app/controllers/enumerations_controller.rb
app/models/enumeration.rb
app/views/enumerations/destroy.rhtml [new file with mode: 0644]
app/views/enumerations/list.rhtml
lang/bg.yml
lang/cs.yml
lang/da.yml
lang/de.yml
lang/en.yml
lang/es.yml
lang/fi.yml
lang/fr.yml
lang/he.yml
lang/hu.yml
lang/it.yml
lang/ja.yml
lang/ko.yml
lang/lt.yml
lang/nl.yml
lang/no.yml
lang/pl.yml
lang/pt-br.yml
lang/pt.yml
lang/ro.yml
lang/ru.yml
lang/sr.yml
lang/sv.yml
lang/th.yml
lang/uk.yml
lang/zh-tw.yml
lang/zh.yml
test/functional/enumerations_controller.rb [new file with mode: 0644]
test/unit/enumeration_test.rb [new file with mode: 0644]

index 7a7f1685a8ac4dc45748a0e0412717de6ee8e051..788fa11b20f644cd6af743e0a41adfe5cf1d84c5 100644 (file)
@@ -75,11 +75,20 @@ class EnumerationsController < ApplicationController
   end
   
   def destroy
-    Enumeration.find(params[:id]).destroy
-    flash[:notice] = l(:notice_successful_delete)
-    redirect_to :action => 'list'
-  rescue
-    flash[:error] = "Unable to delete enumeration"
-    redirect_to :action => 'list'
+    @enumeration = Enumeration.find(params[:id])
+    if !@enumeration.in_use?
+      # No associated objects
+      @enumeration.destroy
+      redirect_to :action => 'index'
+    elsif params[:reassign_to_id]
+      if reassign_to = Enumeration.find_by_opt_and_id(@enumeration.opt, params[:reassign_to_id])
+        @enumeration.destroy(reassign_to)
+        redirect_to :action => 'index'
+      end
+    end
+    @enumerations = Enumeration.get_values(@enumeration.opt) - [@enumeration]
+  #rescue
+  #  flash[:error] = 'Unable to delete enumeration'
+  #  redirect_to :action => 'index'
   end
 end
index e8676872469af5182822e88004082389b5c73fe4..d32a0c04926630f79adab00a28c5739039978dc0 100644 (file)
@@ -24,10 +24,11 @@ class Enumeration < ActiveRecord::Base
   validates_uniqueness_of :name, :scope => [:opt]
   validates_length_of :name, :maximum => 30
 
+  # Single table inheritance would be an option
   OPTIONS = {
-    "IPRI" => :enumeration_issue_priorities,
-    "DCAT" => :enumeration_doc_categories,
-    "ACTI" => :enumeration_activities
+    "IPRI" => {:label => :enumeration_issue_priorities, :model => Issue, :foreign_key => :priority_id},
+    "DCAT" => {:label => :enumeration_doc_categories, :model => Document, :foreign_key => :category_id},
+    "ACTI" => {:label => :enumeration_activities, :model => TimeEntry, :foreign_key => :activity_id}
   }.freeze
   
   def self.get_values(option)
@@ -39,13 +40,32 @@ class Enumeration < ActiveRecord::Base
   end
 
   def option_name
-    OPTIONS[self.opt]
+    OPTIONS[self.opt][:label]
   end
 
   def before_save
     Enumeration.update_all("is_default = #{connection.quoted_false}", {:opt => opt}) if is_default?
   end
   
+  def objects_count
+    OPTIONS[self.opt][:model].count(:conditions => "#{OPTIONS[self.opt][:foreign_key]} = #{id}")
+  end
+  
+  def in_use?
+    self.objects_count != 0
+  end
+  
+  alias :destroy_without_reassign :destroy
+  
+  # Destroy the enumeration
+  # If a enumeration is specified, objects are reassigned
+  def destroy(reassign_to = nil)
+    if reassign_to && reassign_to.is_a?(Enumeration)
+      OPTIONS[self.opt][:model].update_all("#{OPTIONS[self.opt][:foreign_key]} = #{reassign_to.id}", "#{OPTIONS[self.opt][:foreign_key]} = #{id}")
+    end
+    destroy_without_reassign
+  end
+  
   def <=>(enumeration)
     position <=> enumeration.position
   end
@@ -54,13 +74,6 @@ class Enumeration < ActiveRecord::Base
   
 private
   def check_integrity
-    case self.opt
-    when "IPRI"
-      raise "Can't delete enumeration" if Issue.find(:first, :conditions => ["priority_id=?", self.id])
-    when "DCAT"
-      raise "Can't delete enumeration" if Document.find(:first, :conditions => ["category_id=?", self.id])
-    when "ACTI"
-      raise "Can't delete enumeration" if TimeEntry.find(:first, :conditions => ["activity_id=?", self.id])
-    end
+    raise "Can't delete enumeration" if self.in_use?
   end
 end
diff --git a/app/views/enumerations/destroy.rhtml b/app/views/enumerations/destroy.rhtml
new file mode 100644 (file)
index 0000000..657df83
--- /dev/null
@@ -0,0 +1,12 @@
+<h2><%= l(@enumeration.option_name) %>: <%=h @enumeration %></h2>
+
+<% form_tag({}) do %>
+<div class="box">
+<p><strong><%= l(:text_enumeration_destroy_question, @enumeration.objects_count) %></strong></p>
+<p><%= l(:text_enumeration_category_reassign_to) %>
+<%= select_tag 'reassign_to_id', ("<option>--- #{l(:actionview_instancetag_blank_option)} ---</option>" + options_from_collection_for_select(@enumerations, 'id', 'name')) %></p>
+</div>
+
+<%= submit_tag l(:button_apply) %>
+<%= link_to l(:button_cancel), :controller => 'enumerations', :action => 'index' %>
+<% end %>
index 1967e5cf91a6c891ef3d4ef101b48e8d35d57ede..7f3886b4454d0ba85eaed1524c277656750edb34 100644 (file)
@@ -1,7 +1,7 @@
 <h2><%=l(:label_enumerations)%></h2>
 
-<% Enumeration::OPTIONS.each do |option, name| %>
-<h3><%= l(name) %></h3>
+<% Enumeration::OPTIONS.each do |option, params| %>
+<h3><%= l(params[:label]) %></h3>
 
 <% enumerations = Enumeration.get_values(option) %>
 <% if enumerations.any? %>
@@ -16,6 +16,9 @@
     <%= link_to image_tag('1downarrow.png', :alt => l(:label_sort_lower)), {:action => 'move', :id => enumeration, :position => 'lower'}, :method => :post, :title => l(:label_sort_lower) %>
     <%= link_to image_tag('2downarrow.png', :alt => l(:label_sort_lowest)), {:action => 'move', :id => enumeration, :position => 'lowest'}, :method => :post, :title => l(:label_sort_lowest) %>
     </td>
+    <td align="center" style="width:10%;">
+    <%= link_to l(:button_delete), { :action => 'destroy', :id => enumeration }, :method => :post, :confirm => l(:text_are_you_sure), :class => "icon icon-del" %>
+    </td>
 </tr>
 <% end %>
 </table>
index 5f3548684083543982235ed02f2c5cf9dc9b43db..48226c79a6a7fdd1d5767981b05ce6c48da8cc62 100644 (file)
@@ -624,3 +624,5 @@ mail_subject_reminder: "%d issue(s) due in the next days"
 text_user_wrote: '%s wrote:'
 label_duplicated_by: duplicated by
 setting_enabled_scm: Enabled SCM
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
index 26e0f5131938069366874a828325400b445ea31b..de460ba3a6ae626fa1113536ec10a5b5c8cb4531 100644 (file)
@@ -629,3 +629,5 @@ mail_subject_reminder: "%d issue(s) due in the next days"
 text_user_wrote: '%s wrote:'
 label_duplicated_by: duplicated by
 setting_enabled_scm: Enabled SCM
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
index b2f18db4cc7f9f08f0c76273fa7f9263df2a3ab7..6919cdfcbfefd8f6bb51398db20a7faa80681da9 100644 (file)
@@ -626,3 +626,5 @@ mail_subject_reminder: "%d issue(s) due in the next days"
 text_user_wrote: '%s wrote:'
 label_duplicated_by: duplicated by
 setting_enabled_scm: Enabled SCM
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
index 1e4040f3d1c22f4745b81fdfccd5aefe732e4c1e..290acd91628de94aea45324127f77c052b51c1fc 100644 (file)
@@ -625,3 +625,5 @@ mail_subject_reminder: "%d issue(s) due in the next days"
 text_user_wrote: '%s wrote:'
 label_duplicated_by: duplicated by
 setting_enabled_scm: Enabled SCM
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
index b7f217e6c3084ca80b216c15e3ce96c7a3dfbf26..ffbd1062270a60332121353141676ff933c20bd8 100644 (file)
@@ -599,6 +599,8 @@ text_destroy_time_entries: Delete reported hours
 text_assign_time_entries_to_project: Assign reported hours to the project
 text_reassign_time_entries: 'Reassign reported hours to this issue:'
 text_user_wrote: '%s wrote:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
 
 default_role_manager: Manager
 default_role_developper: Developer
index c0ecb997bf9d220938b92a1f3f482c5c7fd36dae..b027f48e3ae80fc93476facf463042856773215a 100644 (file)
@@ -627,3 +627,5 @@ mail_subject_reminder: "%d issue(s) due in the next days"
 text_user_wrote: '%s wrote:'
 label_duplicated_by: duplicated by
 setting_enabled_scm: Enabled SCM
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
index 6ac4aea7ec90c62df9b5a5a903be4ce781d8a9b3..e1d188dcca2b04151d6f40311a679429f1d9fa96 100644 (file)
@@ -624,3 +624,5 @@ mail_subject_reminder: "%d issue(s) due in the next days"
 text_user_wrote: '%s wrote:'
 label_duplicated_by: duplicated by
 setting_enabled_scm: Enabled SCM
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
index 4db2f8f3ad3cb766a394e21ef4028b8f3c4901d7..eaae517651d5faad88771d528b8156f44629c330 100644 (file)
@@ -599,6 +599,8 @@ text_destroy_time_entries: Supprimer les heures
 text_assign_time_entries_to_project: Reporter les heures sur le projet
 text_reassign_time_entries: 'Reporter les heures sur cette demande:'
 text_user_wrote: '%s a écrit:'
+text_enumeration_destroy_question: 'Cette valeur est affectée à %d objets.'
+text_enumeration_category_reassign_to: 'Réaffecter les objets à cette valeur:'
 
 default_role_manager: Manager
 default_role_developper: Développeur
index e23698d32bb92853d30098b0f9c4ff668e7c90aa..5f14ee16eea421ce5e862825f48663ebfe4f6076 100644 (file)
@@ -624,3 +624,5 @@ mail_subject_reminder: "%d issue(s) due in the next days"
 text_user_wrote: '%s wrote:'
 label_duplicated_by: duplicated by
 setting_enabled_scm: Enabled SCM
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
index 1df061942c60a9fca3f6eb361fafcd45b3f4d5f9..c46d0e26c0c3dce36b93dba08ae59664dd9af994 100644 (file)
@@ -625,3 +625,5 @@ mail_subject_reminder: "%d feladat határidős az elkövetkező napokban"
 text_user_wrote: '%s írta:'
 label_duplicated_by: duplikálta
 setting_enabled_scm: Forráskódkezelő (SCM) engedélyezése
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
index 5ab9ad310bcf88de96b5f2d35cd430c1634a5637..8aec9ef0e9e255dedd7bec06e1332565b2c3f8dd 100644 (file)
@@ -624,3 +624,5 @@ mail_subject_reminder: "%d issue(s) due in the next days"
 text_user_wrote: '%s wrote:'
 label_duplicated_by: duplicated by
 setting_enabled_scm: Enabled SCM
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
index c693d68e5ade9a40311c82ec4d3d1fe4bf8cc266..c48579dda8147a87184f570d2bd5fb99381c588c 100644 (file)
@@ -625,3 +625,5 @@ mail_subject_reminder: "%d issue(s) due in the next days"
 text_user_wrote: '%s wrote:'
 label_duplicated_by: duplicated by
 setting_enabled_scm: Enabled SCM
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
index af1c768afc9ecf6a85ee37eab621dad44f2aac5c..f2339556f4cec874349388e6e162e5ee65105525 100644 (file)
@@ -624,3 +624,5 @@ mail_subject_reminder: "%d issue(s) due in the next days"
 text_user_wrote: '%s wrote:'
 label_duplicated_by: duplicated by
 setting_enabled_scm: Enabled SCM
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
index ff8f6b695e0ea1a9a942b16a09d1e94994d64fea..61533b3ab138ca129662434b9531bf37c94d5486 100644 (file)
@@ -626,3 +626,5 @@ mail_subject_reminder: "%d issue(s) due in the next days"
 text_user_wrote: '%s wrote:'
 label_duplicated_by: duplicated by
 setting_enabled_scm: Enabled SCM
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
index 9ee9138480fcb5cd2d86c1fedf860fe0f0085623..109d444f1d9a5dd9a6397070358a4ec3685ee2fb 100644 (file)
@@ -625,3 +625,5 @@ mail_subject_reminder: "%d issue(s) due in the next days"
 text_user_wrote: '%s wrote:'
 label_duplicated_by: duplicated by
 setting_enabled_scm: Enabled SCM
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
index aa9d0396b1844b0b3e8eabdb733cb464d3d5fa2d..4e47c75a21d0593c1191991f02fc65b1a2f84148 100644 (file)
@@ -625,3 +625,5 @@ default_activity_development: Utvikling
 enumeration_issue_priorities: Sakssprioriteringer
 enumeration_doc_categories: Dokument-kategorier
 enumeration_activities: Aktiviteter (tidssporing)
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
index 75e04ecd43904b46ddad8703b0a0a7a8caa33e4e..97378b5b14c4102096c2d386f35e9b60d24bdd17 100644 (file)
@@ -624,3 +624,5 @@ mail_subject_reminder: "%d issue(s) due in the next days"
 text_user_wrote: '%s wrote:'
 label_duplicated_by: duplicated by
 setting_enabled_scm: Enabled SCM
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
index dabab5bfeb561d6c1db51751be6883852d5d681d..67822499e8e250f72a63653487916c8ba1b1a791 100644 (file)
@@ -624,3 +624,5 @@ mail_subject_reminder: "%d issue(s) due in the next days"
 text_user_wrote: '%s wrote:'\r
 label_duplicated_by: duplicated by\r
 setting_enabled_scm: Enabled SCM\r
+text_enumeration_category_reassign_to: 'Reassign them to this value:'\r
+text_enumeration_destroy_question: '%d objects are assigned to this value.'\r
index 2845f390cdb70082070d60f05a8d16e777a127c6..a91eea01b52167ddfde57ad7dc64292aedd46540 100644 (file)
@@ -624,3 +624,5 @@ mail_subject_reminder: "%d issue(s) due in the next days"
 text_user_wrote: '%s wrote:'
 label_duplicated_by: duplicated by
 setting_enabled_scm: Enabled SCM
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
index dd51e59be001681e60e75dd808634a2166668c00..aafc61916990f59ca6c9bc56831f3efff4d5a983 100644 (file)
@@ -624,3 +624,5 @@ mail_subject_reminder: "%d issue(s) due in the next days"
 text_user_wrote: '%s wrote:'
 label_duplicated_by: duplicated by
 setting_enabled_scm: Enabled SCM
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
index c3ec91897c138bbcb5c39db8831e34ab81e6bbcd..e04377781b7af2a8d97891c5fb0a4ed2d4fce972 100644 (file)
@@ -628,3 +628,5 @@ mail_subject_reminder: "%d назначенных на вас задач в бл
 text_user_wrote: '%s написал:'
 label_duplicated_by: duplicated by
 setting_enabled_scm: Enabled SCM
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
index 92906760b88b40f2050f983d1b96a54049c99427..ec01774bcbd07f527163cba94671075d3357b74b 100644 (file)
@@ -625,3 +625,5 @@ mail_subject_reminder: "%d issue(s) due in the next days"
 text_user_wrote: '%s wrote:'
 label_duplicated_by: duplicated by
 setting_enabled_scm: Enabled SCM
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
index f08e45eb0b6c0fa7338a3424023d8704059e0226..e28943d9b4033f73f27eb4b387b478f42b908bfa 100644 (file)
@@ -625,3 +625,5 @@ mail_subject_reminder: "%d issue(s) due in the next days"
 text_user_wrote: '%s wrote:'
 label_duplicated_by: duplicated by
 setting_enabled_scm: Enabled SCM
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
index 85a1f8c017d04d46040f4eef3670b6cb2b2bce76..6c84dba70c9248f6f343c67cc9a1d3acc661db7a 100644 (file)
@@ -627,3 +627,5 @@ mail_subject_reminder: "%d issue(s) due in the next days"
 text_user_wrote: '%s wrote:'
 label_duplicated_by: duplicated by
 setting_enabled_scm: Enabled SCM
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
index ae8c5cbc09a6828e00d38e76bbb4c5d8a74c7ed7..365ced150b348f2663a1f78bcd256f328095a1a3 100644 (file)
@@ -626,3 +626,5 @@ mail_subject_reminder: "%d issue(s) due in the next days"
 text_user_wrote: '%s wrote:'
 label_duplicated_by: duplicated by
 setting_enabled_scm: Enabled SCM
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
index 064004c3a2594675b4aa28e38414349197aa4898..c7b473548d97943687b57971d50476d4c7d16afc 100644 (file)
@@ -625,3 +625,5 @@ default_activity_development: 開發
 enumeration_issue_priorities: 項目優先權
 enumeration_doc_categories: 文件分類
 enumeration_activities: 活動 (時間追蹤)
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
index ac650c853be74d01371441d80ca39dfede6bc73e..981e8102d7a2a7f50c0f5d0e6947756c2e4ca806 100644 (file)
@@ -625,3 +625,5 @@ default_activity_development: 开发
 enumeration_issue_priorities: 问题优先级
 enumeration_doc_categories: 文档类别
 enumeration_activities: 活动(时间跟踪)
+text_enumeration_category_reassign_to: 'Reassign them to this value:'
+text_enumeration_destroy_question: '%d objects are assigned to this value.'
diff --git a/test/functional/enumerations_controller.rb b/test/functional/enumerations_controller.rb
new file mode 100644 (file)
index 0000000..36ff867
--- /dev/null
@@ -0,0 +1,61 @@
+# redMine - project management software
+# Copyright (C) 2006-2008  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+require File.dirname(__FILE__) + '/../test_helper'
+require 'enumerations_controller'
+
+# Re-raise errors caught by the controller.
+class EnumerationsController; def rescue_action(e) raise e end; end
+
+class EnumerationsControllerTest < Test::Unit::TestCase
+  fixtures :enumerations, :issues, :users
+  
+  def setup
+    @controller = EnumerationsController.new
+    @request    = ActionController::TestRequest.new
+    @response   = ActionController::TestResponse.new
+    @request.session[:user_id] = 1 # admin
+  end
+
+  def test_index
+    get :index
+    assert_response :success
+    assert_template 'list'
+  end
+  
+  def test_destroy_enumeration_not_in_use
+    post :destroy, :id => 7
+    assert_redirected_to :controller => 'enumerations', :action => 'index'
+    assert_nil Enumeration.find_by_id(7)
+  end
+  
+  def test_destroy_enumeration_in_use
+    post :destroy, :id => 4
+    assert_response :success
+    assert_template 'destroy'
+    assert_not_nil Enumeration.find_by_id(4)
+  end
+  
+  def test_destroy_enumeration_in_use_with_reassignment
+    issue = Issue.find(:first, :conditions => {:priority_id => 4})
+    post :destroy, :id => 4, :reassign_to_id => 6
+    assert_redirected_to :controller => 'enumerations', :action => 'index'
+    assert_nil Enumeration.find_by_id(4)
+    # check that the issue was reassign
+    assert_equal 6, issue.reload.priority_id
+  end
+end
diff --git a/test/unit/enumeration_test.rb b/test/unit/enumeration_test.rb
new file mode 100644 (file)
index 0000000..9b7bfd1
--- /dev/null
@@ -0,0 +1,45 @@
+# redMine - project management software
+# Copyright (C) 2006-2008  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+require File.dirname(__FILE__) + '/../test_helper'
+
+class EnumerationTest < Test::Unit::TestCase
+  fixtures :enumerations, :issues
+
+  def setup
+  end
+  
+  def test_objects_count
+    # low priority
+    assert_equal 5, Enumeration.find(4).objects_count
+    # urgent
+    assert_equal 0, Enumeration.find(7).objects_count
+  end
+  
+  def test_in_use
+    # low priority
+    assert Enumeration.find(4).in_use?
+    # urgent
+    assert !Enumeration.find(7).in_use?
+  end
+  
+  def test_destroy_with_reassign
+    Enumeration.find(4).destroy(Enumeration.find(6))
+    assert_nil Issue.find(:first, :conditions => {:priority_id => 4})
+    assert_equal 5, Enumeration.find(6).objects_count
+  end
+end