diff test/unit/project_test.rb @ 909:cbb26bc654de redmine-1.3

Update to Redmine 1.3-stable branch (Redmine SVN rev 8964)
author Chris Cannam
date Fri, 24 Feb 2012 19:09:32 +0000
parents 0c939c159af4
children 5f33065ddc4b
line wrap: on
line diff
--- a/test/unit/project_test.rb	Fri Feb 24 18:36:29 2012 +0000
+++ b/test/unit/project_test.rb	Fri Feb 24 19:09:32 2012 +0000
@@ -5,12 +5,12 @@
 # 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.
@@ -18,14 +18,25 @@
 require File.expand_path('../../test_helper', __FILE__)
 
 class ProjectTest < ActiveSupport::TestCase
-  fixtures :all
+  fixtures :projects, :trackers, :issue_statuses, :issues,
+           :enumerations, :users, :issue_categories,
+           :projects_trackers,
+           :roles,
+           :member_roles,
+           :members,
+           :enabled_modules,
+           :workflows,
+           :versions,
+           :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions,
+           :groups_users,
+           :boards
 
   def setup
     @ecookbook = Project.find(1)
     @ecookbook_sub1 = Project.find(3)
     User.current = nil
   end
-  
+
   should_validate_presence_of :name
   should_validate_presence_of :identifier
 
@@ -59,7 +70,7 @@
     assert_kind_of Project, @ecookbook
     assert_equal "eCookbook", @ecookbook.name
   end
-  
+
   def test_default_attributes
     with_settings :default_projects_public => '1' do
       assert_equal true, Project.new.is_public
@@ -84,11 +95,11 @@
     with_settings :default_projects_modules => ['issue_tracking', 'repository'] do
       assert_equal ['issue_tracking', 'repository'], Project.new.enabled_module_names
     end
-    
+
     assert_equal Tracker.all, Project.new.trackers
     assert_equal Tracker.find(1, 3), Project.new(:tracker_ids => [1, 3]).trackers
   end
-  
+
   def test_update
     assert_equal "eCookbook", @ecookbook.name
     @ecookbook.name = "eCook"
@@ -96,19 +107,19 @@
     @ecookbook.reload
     assert_equal "eCook", @ecookbook.name
   end
-  
+
   def test_validate_identifier
     to_test = {"abc" => true,
                "ab12" => true,
                "ab-12" => true,
                "12" => false,
                "new" => false}
-               
+
     to_test.each do |identifier, valid|
       p = Project.new
       p.identifier = identifier
       p.valid?
-      assert_equal valid, p.errors.on('identifier').nil?
+      assert_equal valid, p.errors['identifier'].nil?
     end
   end
 
@@ -117,18 +128,18 @@
       assert_nil project.members.detect {|m| !(m.user.is_a?(User) && m.user.active?) }
     end
   end
-  
+
   def test_users_should_be_active_users
     Project.all.each do |project|
       assert_nil project.users.detect {|u| !(u.is_a?(User) && u.active?) }
     end
   end
-  
+
   def test_archive
     user = @ecookbook.members.first.user
     @ecookbook.archive
     @ecookbook.reload
-    
+
     assert !@ecookbook.active?
     assert @ecookbook.archived?
     assert !user.projects.include?(@ecookbook)
@@ -136,24 +147,24 @@
     assert !@ecookbook.children.empty?
     assert @ecookbook.descendants.active.empty?
   end
-  
+
   def test_archive_should_fail_if_versions_are_used_by_non_descendant_projects
     # Assign an issue of a project to a version of a child project
     Issue.find(4).update_attribute :fixed_version_id, 4
-    
+
     assert_no_difference "Project.count(:all, :conditions => 'status = #{Project::STATUS_ARCHIVED}')" do
       assert_equal false, @ecookbook.archive
     end
     @ecookbook.reload
     assert @ecookbook.active?
   end
-  
+
   def test_unarchive
     user = @ecookbook.members.first.user
     @ecookbook.archive
     # A subproject of an archived project can not be unarchived
     assert !@ecookbook_sub1.unarchive
-    
+
     # Unarchive project
     assert @ecookbook.unarchive
     @ecookbook.reload
@@ -164,7 +175,7 @@
     @ecookbook_sub1.reload
     assert @ecookbook_sub1.unarchive
   end
-  
+
   def test_destroy
     # 2 active members
     assert_equal 2, @ecookbook.members.size
@@ -172,7 +183,7 @@
     assert_equal 3, Member.find(:all, :conditions => ['project_id = ?', @ecookbook.id]).size
     # some boards
     assert @ecookbook.boards.any?
-    
+
     @ecookbook.destroy
     # make sure that the project non longer exists
     assert_raise(ActiveRecord::RecordNotFound) { Project.find(@ecookbook.id) }
@@ -181,12 +192,12 @@
     assert_nil Board.first(:conditions => {:project_id => @ecookbook.id})
     assert_nil Issue.first(:conditions => {:project_id => @ecookbook.id})
   end
-  
+
   def test_destroying_root_projects_should_clear_data
     Project.roots.each do |root|
       root.destroy
     end
-    
+
     assert_equal 0, Project.count, "Projects were not deleted: #{Project.all.inspect}"
     assert_equal 0, Member.count, "Members were not deleted: #{Member.all.inspect}"
     assert_equal 0, MemberRole.count
@@ -216,7 +227,7 @@
     assert_equal 0, Project.connection.select_all("SELECT * FROM custom_fields_projects").size
     assert_equal 0, CustomValue.count(:conditions => {:customized_type => ['Project', 'Issue', 'TimeEntry', 'Version']})
   end
-  
+
   def test_move_an_orphan_project_to_a_root_project
     sub = Project.find(2)
     sub.set_parent! @ecookbook
@@ -224,22 +235,22 @@
     @ecookbook.reload
     assert_equal 4, @ecookbook.children.size
   end
-  
+
   def test_move_an_orphan_project_to_a_subproject
     sub = Project.find(2)
     assert sub.set_parent!(@ecookbook_sub1)
   end
-  
+
   def test_move_a_root_project_to_a_project
     sub = @ecookbook
     assert sub.set_parent!(Project.find(2))
   end
-  
+
   def test_should_not_move_a_project_to_its_children
     sub = @ecookbook
     assert !(sub.set_parent!(Project.find(3)))
   end
-  
+
   def test_set_parent_should_add_roots_in_alphabetical_order
     ProjectCustomField.delete_all
     Project.delete_all
@@ -247,11 +258,11 @@
     Project.create!(:name => 'Project B', :identifier => 'project-b').set_parent!(nil)
     Project.create!(:name => 'Project D', :identifier => 'project-d').set_parent!(nil)
     Project.create!(:name => 'Project A', :identifier => 'project-a').set_parent!(nil)
-    
+
     assert_equal 4, Project.count
     assert_equal Project.all.sort_by(&:name), Project.all.sort_by(&:lft)
   end
-  
+
   def test_set_parent_should_add_children_in_alphabetical_order
     ProjectCustomField.delete_all
     parent = Project.create!(:name => 'Parent', :identifier => 'parent')
@@ -259,12 +270,12 @@
     Project.create!(:name => 'Project B', :identifier => 'project-b').set_parent!(parent)
     Project.create!(:name => 'Project D', :identifier => 'project-d').set_parent!(parent)
     Project.create!(:name => 'Project A', :identifier => 'project-a').set_parent!(parent)
-    
+
     parent.reload
     assert_equal 4, parent.children.size
     assert_equal parent.children.sort_by(&:name), parent.children
   end
-  
+
   def test_rebuild_should_sort_children_alphabetically
     ProjectCustomField.delete_all
     parent = Project.create!(:name => 'Parent', :identifier => 'parent')
@@ -272,10 +283,10 @@
     Project.create!(:name => 'Project B', :identifier => 'project-b').move_to_child_of(parent)
     Project.create!(:name => 'Project D', :identifier => 'project-d').move_to_child_of(parent)
     Project.create!(:name => 'Project A', :identifier => 'project-a').move_to_child_of(parent)
-    
+
     Project.update_all("lft = NULL, rgt = NULL")
     Project.rebuild!
-    
+
     parent.reload
     assert_equal 4, parent.children.size
     assert_equal parent.children.sort_by(&:name), parent.children
@@ -300,49 +311,49 @@
     issue_with_hierarchy_fixed_version.update_attribute(:fixed_version_id, 6)
     issue_with_hierarchy_fixed_version.reload
     assert_equal 6, issue_with_hierarchy_fixed_version.fixed_version_id
-    
+
     # Move project out of the issue's hierarchy
     moved_project = Project.find(3)
     moved_project.set_parent!(Project.find(2))
     parent_issue.reload
     issue_with_local_fixed_version.reload
     issue_with_hierarchy_fixed_version.reload
-    
+
     assert_equal 4, issue_with_local_fixed_version.fixed_version_id, "Fixed version was not keep on an issue local to the moved project"
     assert_equal nil, issue_with_hierarchy_fixed_version.fixed_version_id, "Fixed version is still set after moving the Project out of the hierarchy where the version is defined in"
     assert_equal nil, parent_issue.fixed_version_id, "Fixed version is still set after moving the Version out of the hierarchy for the issue."
   end
-  
+
   def test_parent
     p = Project.find(6).parent
     assert p.is_a?(Project)
     assert_equal 5, p.id
   end
-  
+
   def test_ancestors
     a = Project.find(6).ancestors
     assert a.first.is_a?(Project)
     assert_equal [1, 5], a.collect(&:id)
   end
-  
+
   def test_root
     r = Project.find(6).root
     assert r.is_a?(Project)
     assert_equal 1, r.id
   end
-  
+
   def test_children
     c = Project.find(1).children
     assert c.first.is_a?(Project)
     assert_equal [5, 3, 4], c.collect(&:id)
   end
-  
+
   def test_descendants
     d = Project.find(1).descendants
     assert d.first.is_a?(Project)
     assert_equal [5, 6, 3, 4], d.collect(&:id)
   end
-  
+
   def test_allowed_parents_should_be_empty_for_non_member_user
     Role.non_member.add_permission!(:add_project)
     user = User.find(9)
@@ -350,7 +361,7 @@
     User.current = user
     assert Project.new.allowed_parents.compact.empty?
   end
-  
+
   def test_allowed_parents_with_add_subprojects_permission
     Role.find(1).remove_permission!(:add_project)
     Role.find(1).add_permission!(:add_subprojects)
@@ -392,7 +403,7 @@
     assert Project.find(3).allowed_parents.include?(Project.find(1))
     assert Project.find(3).allowed_parents.include?(nil)
   end
-  
+
   def test_users_by_role
     users_by_role = Project.find(1).users_by_role
     assert_kind_of Hash, users_by_role
@@ -400,29 +411,29 @@
     assert_kind_of Array, users_by_role[role]
     assert users_by_role[role].include?(User.find(2))
   end
-  
+
   def test_rolled_up_trackers
     parent = Project.find(1)
     parent.trackers = Tracker.find([1,2])
     child = parent.children.find(3)
-  
+
     assert_equal [1, 2], parent.tracker_ids
     assert_equal [2, 3], child.trackers.collect(&:id)
-    
+
     assert_kind_of Tracker, parent.rolled_up_trackers.first
     assert_equal Tracker.find(1), parent.rolled_up_trackers.first
-    
+
     assert_equal [1, 2, 3], parent.rolled_up_trackers.collect(&:id)
     assert_equal [2, 3], child.rolled_up_trackers.collect(&:id)
   end
-  
+
   def test_rolled_up_trackers_should_ignore_archived_subprojects
     parent = Project.find(1)
     parent.trackers = Tracker.find([1,2])
     child = parent.children.find(3)
     child.trackers = Tracker.find([1,3])
     parent.children.each(&:archive)
-    
+
     assert_equal [1,2], parent.rolled_up_trackers.collect(&:id)
   end
 
@@ -432,11 +443,11 @@
       @parent_version_1 = Version.generate!(:project => @project)
       @parent_version_2 = Version.generate!(:project => @project)
     end
-    
+
     should "include the versions for the current project" do
       assert_same_elements [@parent_version_1, @parent_version_2], @project.rolled_up_versions
     end
-    
+
     should "include versions for a subproject" do
       @subproject = Project.generate!
       @subproject.set_parent!(@project)
@@ -448,7 +459,7 @@
                             @subproject_version
                            ], @project.rolled_up_versions
     end
-    
+
     should "include versions for a sub-subproject" do
       @subproject = Project.generate!
       @subproject.set_parent!(@project)
@@ -465,7 +476,6 @@
                            ], @project.rolled_up_versions
     end
 
-    
     should "only check active projects" do
       @subproject = Project.generate!
       @subproject.set_parent!(@project)
@@ -478,7 +488,7 @@
       assert_same_elements [@parent_version_1, @parent_version_2], @project.rolled_up_versions
     end
   end
-  
+
   def test_shared_versions_none_sharing
     p = Project.find(5)
     v = Version.create!(:name => 'none_sharing', :project => p, :sharing => 'none')
@@ -498,7 +508,7 @@
     assert !p.siblings.first.shared_versions.include?(v)
     assert !p.root.siblings.first.shared_versions.include?(v)
   end
-  
+
   def test_shared_versions_hierarchy_sharing
     p = Project.find(5)
     v = Version.create!(:name => 'hierarchy_sharing', :project => p, :sharing => 'hierarchy')
@@ -533,7 +543,7 @@
     parent = Project.find(1)
     child = parent.children.find(3)
     private_child = parent.children.find(5)
-    
+
     assert_equal [1,2,3], parent.version_ids.sort
     assert_equal [4], child.version_ids
     assert_equal [6], private_child.version_ids
@@ -552,7 +562,7 @@
     child = parent.children.find(3)
     child.archive
     parent.reload
-    
+
     assert_equal [1,2,3], parent.version_ids.sort
     assert_equal [4], child.version_ids
     assert !parent.shared_versions.collect(&:id).include?(4)
@@ -562,12 +572,12 @@
     user = User.find(3)
     parent = Project.find(1)
     child = parent.children.find(5)
-    
+
     assert_equal [1,2,3], parent.version_ids.sort
     assert_equal [6], child.version_ids
 
     versions = parent.shared_versions.visible(user)
-    
+
     assert_equal 4, versions.size
     versions.each do |version|
       assert_kind_of Version, version
@@ -576,7 +586,6 @@
     assert !versions.collect(&:id).include?(6)
   end
 
-  
   def test_next_identifier
     ProjectCustomField.delete_all
     Project.create!(:name => 'last', :identifier => 'p2008040')
@@ -587,11 +596,11 @@
     Project.delete_all
     assert_nil Project.next_identifier
   end
-  
+
   def test_enabled_module_names
     with_settings :default_projects_modules => ['issue_tracking', 'repository'] do
       project = Project.new
-      
+
       project.enabled_module_names = %w(issue_tracking news)
       assert_equal %w(issue_tracking news), project.enabled_module_names.sort
     end
@@ -667,7 +676,7 @@
     assert copied_project.id.blank?
     assert copied_project.name.blank?
     assert copied_project.identifier.blank?
-    
+
     # Duplicated attributes
     assert_equal source_project.description, copied_project.description
     assert_equal source_project.enabled_modules, copied_project.enabled_modules
@@ -745,11 +754,11 @@
     assert system_activity.active?
     overridden_activity = TimeEntryActivity.generate!(:project => project, :parent => system_activity, :active => false)
     assert overridden_activity.save!
-    
+
     assert !project.activities.include?(overridden_activity), "Inactive Project specific Activity not found"
     assert !project.activities.include?(system_activity), "System activity found when the project has an inactive override"
   end
-  
+
   def test_close_completed_versions
     Version.update_all("status = 'open'")
     project = Project.find(1)
@@ -787,7 +796,7 @@
         assert ! issue.assigned_to.blank?
         assert_equal @project, issue.project
       end
-      
+
       copied_issue = @project.issues.first(:conditions => {:subject => "copy issue status"})
       assert copied_issue
       assert copied_issue.status
@@ -804,7 +813,7 @@
                                   :subject => "change the new issues to use the copied version",
                                   :tracker_id => 1,
                                   :project_id => @source_project.id)
-      
+
       assert @project.copy(@source_project)
       @project.reload
       copied_issue = @project.issues.first(:conditions => {:subject => "change the new issues to use the copied version"})
@@ -861,10 +870,10 @@
         assert_equal @project, membership.project
       end
     end
-    
+
     should "copy memberships with groups and additional roles" do
       group = Group.create!(:lastname => "Copy group")
-      user = User.find(7) 
+      user = User.find(7)
       group.users << user
       # group role
       Member.create!(:project_id => @source_project.id, :principal => group, :role_ids => [2])
@@ -888,6 +897,7 @@
         assert query
         assert_equal @project, query.project
       end
+      assert_equal @source_project.queries.map(&:user_id).sort, @project.queries.map(&:user_id).sort
     end
 
     should "copy versions" do
@@ -918,7 +928,7 @@
       assert_difference 'WikiPage.count', @source_project.wiki.pages.size do
         assert @project.copy(@source_project)
       end
-      
+
       assert @project.wiki
       assert_equal @source_project.wiki.pages.size, @project.wiki.pages.size
 
@@ -926,7 +936,7 @@
         assert wiki_page.content
         assert !@source_project.wiki.pages.include?(wiki_page)
       end
-      
+
       parent = @project.wiki.find_page('Parent_page')
       child1 = @project.wiki.find_page('Child_page_1')
       child2 = @project.wiki.find_page('Child_page_2')
@@ -964,19 +974,19 @@
         assert_not_equal IssueCategory.find(3), issue.category # Different record
       end
     end
-    
+
     should "limit copy with :only option" do
       assert @project.members.empty?
       assert @project.issue_categories.empty?
       assert @source_project.issues.any?
-    
+
       assert @project.copy(@source_project, :only => ['members', 'issue_categories'])
 
       assert @project.members.any?
       assert @project.issue_categories.any?
       assert @project.issues.empty?
     end
-    
+
   end
 
   context "#start_date" do
@@ -985,11 +995,11 @@
       @project = Project.generate!(:identifier => 'test0')
       @project.trackers << Tracker.generate!
     end
-    
+
     should "be nil if there are no issues on the project" do
       assert_nil @project.start_date
     end
-    
+
     should "be tested when issues have no start date"
 
     should "be the earliest start date of it's issues" do
@@ -1008,11 +1018,11 @@
       @project = Project.generate!(:identifier => 'test0')
       @project.trackers << Tracker.generate!
     end
-    
+
     should "be nil if there are no issues on the project" do
       assert_nil @project.due_date
     end
-    
+
     should "be tested when issues have no due date"
 
     should "be the latest due date of it's issues" do
@@ -1027,7 +1037,7 @@
       future = 7.days.from_now.to_date
       @project.versions << Version.generate!(:effective_date => future)
       @project.versions << Version.generate!(:effective_date => Date.today)
-      
+
 
       assert_equal future, @project.due_date
 
@@ -1038,7 +1048,7 @@
       far_future = 14.days.from_now.to_date
       Issue.generate_for_project!(@project, :due_date => far_future)
       @project.versions << Version.generate!(:effective_date => future)
-      
+
       assert_equal far_future, @project.due_date
     end
 
@@ -1090,7 +1100,7 @@
     setup do
       @project = Project.generate!
       @role = Role.generate!
-      
+
       @user_with_membership_notification = User.generate!(:mail_notification => 'selected')
       Member.generate!(:project => @project, :roles => [@role], :principal => @user_with_membership_notification, :mail_notification => true)
 
@@ -1109,30 +1119,30 @@
       @only_owned_user = User.generate!(:mail_notification => 'only_owner')
       Member.generate!(:project => @project, :roles => [@role], :principal => @only_owned_user)
     end
-    
+
     should "include members with a mail notification" do
       assert @project.notified_users.include?(@user_with_membership_notification)
     end
-    
+
     should "include users with the 'all' notification option" do
       assert @project.notified_users.include?(@all_events_user)
     end
-    
+
     should "not include users with the 'none' notification option" do
       assert !@project.notified_users.include?(@no_events_user)
     end
-    
+
     should "not include users with the 'only_my_events' notification option" do
       assert !@project.notified_users.include?(@only_my_events_user)
     end
-    
+
     should "not include users with the 'only_assigned' notification option" do
       assert !@project.notified_users.include?(@only_assigned_user)
     end
-    
+
     should "not include users with the 'only_owner' notification option" do
       assert !@project.notified_users.include?(@only_owned_user)
     end
   end
-  
+
 end