comparison test/unit/project_test.rb @ 524:1248a47e81b3 feature_36

Merge from branch "luisf"
author luisf <luis.figueira@eecs.qmul.ac.uk>
date Mon, 25 Jul 2011 14:39:38 +0100
parents 0c939c159af4
children cbb26bc654de
comparison
equal deleted inserted replaced
519:3be6bc3c2a17 524:1248a47e81b3
1 # redMine - project management software 1 # Redmine - project management software
2 # Copyright (C) 2006-2007 Jean-Philippe Lang 2 # Copyright (C) 2006-2011 Jean-Philippe Lang
3 # 3 #
4 # This program is free software; you can redistribute it and/or 4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License 5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2 6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version. 7 # of the License, or (at your option) any later version.
13 # 13 #
14 # You should have received a copy of the GNU General Public License 14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software 15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 require File.dirname(__FILE__) + '/../test_helper' 18 require File.expand_path('../../test_helper', __FILE__)
19 19
20 class ProjectTest < ActiveSupport::TestCase 20 class ProjectTest < ActiveSupport::TestCase
21 fixtures :all 21 fixtures :all
22 22
23 def setup 23 def setup
58 def test_truth 58 def test_truth
59 assert_kind_of Project, @ecookbook 59 assert_kind_of Project, @ecookbook
60 assert_equal "eCookbook", @ecookbook.name 60 assert_equal "eCookbook", @ecookbook.name
61 end 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 def test_update 92 def test_update
64 assert_equal "eCookbook", @ecookbook.name 93 assert_equal "eCookbook", @ecookbook.name
65 @ecookbook.name = "eCook" 94 @ecookbook.name = "eCook"
66 assert @ecookbook.save, @ecookbook.errors.full_messages.join("; ") 95 assert @ecookbook.save, @ecookbook.errors.full_messages.join("; ")
67 @ecookbook.reload 96 @ecookbook.reload
151 assert_nil Member.first(:conditions => {:project_id => @ecookbook.id}) 180 assert_nil Member.first(:conditions => {:project_id => @ecookbook.id})
152 assert_nil Board.first(:conditions => {:project_id => @ecookbook.id}) 181 assert_nil Board.first(:conditions => {:project_id => @ecookbook.id})
153 assert_nil Issue.first(:conditions => {:project_id => @ecookbook.id}) 182 assert_nil Issue.first(:conditions => {:project_id => @ecookbook.id})
154 end 183 end
155 184
185 def test_destroying_root_projects_should_clear_data
186 Project.roots.each do |root|
187 root.destroy
188 end
189
190 assert_equal 0, Project.count, "Projects were not deleted: #{Project.all.inspect}"
191 assert_equal 0, Member.count, "Members were not deleted: #{Member.all.inspect}"
192 assert_equal 0, MemberRole.count
193 assert_equal 0, Issue.count
194 assert_equal 0, Journal.count
195 assert_equal 0, JournalDetail.count
196 assert_equal 0, Attachment.count
197 assert_equal 0, EnabledModule.count
198 assert_equal 0, IssueCategory.count
199 assert_equal 0, IssueRelation.count
200 assert_equal 0, Board.count
201 assert_equal 0, Message.count
202 assert_equal 0, News.count
203 assert_equal 0, Query.count(:conditions => "project_id IS NOT NULL")
204 assert_equal 0, Repository.count
205 assert_equal 0, Changeset.count
206 assert_equal 0, Change.count
207 assert_equal 0, Comment.count
208 assert_equal 0, TimeEntry.count
209 assert_equal 0, Version.count
210 assert_equal 0, Watcher.count
211 assert_equal 0, Wiki.count
212 assert_equal 0, WikiPage.count
213 assert_equal 0, WikiContent.count
214 assert_equal 0, WikiContent::Version.count
215 assert_equal 0, Project.connection.select_all("SELECT * FROM projects_trackers").size
216 assert_equal 0, Project.connection.select_all("SELECT * FROM custom_fields_projects").size
217 assert_equal 0, CustomValue.count(:conditions => {:customized_type => ['Project', 'Issue', 'TimeEntry', 'Version']})
218 end
219
156 def test_move_an_orphan_project_to_a_root_project 220 def test_move_an_orphan_project_to_a_root_project
157 sub = Project.find(2) 221 sub = Project.find(2)
158 sub.set_parent! @ecookbook 222 sub.set_parent! @ecookbook
159 assert_equal @ecookbook.id, sub.parent.id 223 assert_equal @ecookbook.id, sub.parent.id
160 @ecookbook.reload 224 @ecookbook.reload
522 def test_next_identifier_first_project 586 def test_next_identifier_first_project
523 Project.delete_all 587 Project.delete_all
524 assert_nil Project.next_identifier 588 assert_nil Project.next_identifier
525 end 589 end
526 590
591 def test_enabled_module_names
592 with_settings :default_projects_modules => ['issue_tracking', 'repository'] do
593 project = Project.new
594
595 project.enabled_module_names = %w(issue_tracking news)
596 assert_equal %w(issue_tracking news), project.enabled_module_names.sort
597 end
598 end
599
600 context "enabled_modules" do
601 setup do
602 @project = Project.find(1)
603 end
604
605 should "define module by names and preserve ids" do
606 # Remove one module
607 modules = @project.enabled_modules.slice(0..-2)
608 assert modules.any?
609 assert_difference 'EnabledModule.count', -1 do
610 @project.enabled_module_names = modules.collect(&:name)
611 end
612 @project.reload
613 # Ids should be preserved
614 assert_equal @project.enabled_module_ids.sort, modules.collect(&:id).sort
615 end
616
617 should "enable a module" do
618 @project.enabled_module_names = []
619 @project.reload
620 assert_equal [], @project.enabled_module_names
621 #with string
622 @project.enable_module!("issue_tracking")
623 assert_equal ["issue_tracking"], @project.enabled_module_names
624 #with symbol
625 @project.enable_module!(:gantt)
626 assert_equal ["issue_tracking", "gantt"], @project.enabled_module_names
627 #don't add a module twice
628 @project.enable_module!("issue_tracking")
629 assert_equal ["issue_tracking", "gantt"], @project.enabled_module_names
630 end
631
632 should "disable a module" do
633 #with string
634 assert @project.enabled_module_names.include?("issue_tracking")
635 @project.disable_module!("issue_tracking")
636 assert ! @project.reload.enabled_module_names.include?("issue_tracking")
637 #with symbol
638 assert @project.enabled_module_names.include?("gantt")
639 @project.disable_module!(:gantt)
640 assert ! @project.reload.enabled_module_names.include?("gantt")
641 #with EnabledModule object
642 first_module = @project.enabled_modules.first
643 @project.disable_module!(first_module)
644 assert ! @project.reload.enabled_module_names.include?(first_module.name)
645 end
646 end
527 647
528 def test_enabled_module_names_should_not_recreate_enabled_modules 648 def test_enabled_module_names_should_not_recreate_enabled_modules
529 project = Project.find(1) 649 project = Project.find(1)
530 # Remove one module 650 # Remove one module
531 modules = project.enabled_modules.slice(0..-2) 651 modules = project.enabled_modules.slice(0..-2)
739 @project.memberships.each do |membership| 859 @project.memberships.each do |membership|
740 assert membership 860 assert membership
741 assert_equal @project, membership.project 861 assert_equal @project, membership.project
742 end 862 end
743 end 863 end
864
865 should "copy memberships with groups and additional roles" do
866 group = Group.create!(:lastname => "Copy group")
867 user = User.find(7)
868 group.users << user
869 # group role
870 Member.create!(:project_id => @source_project.id, :principal => group, :role_ids => [2])
871 member = Member.find_by_user_id_and_project_id(user.id, @source_project.id)
872 # additional role
873 member.role_ids = [1]
874
875 assert @project.copy(@source_project)
876 member = Member.find_by_user_id_and_project_id(user.id, @project.id)
877 assert_not_nil member
878 assert_equal [1, 2], member.role_ids.sort
879 end
744 880
745 should "copy project specific queries" do 881 should "copy project specific queries" do
746 assert @project.valid? 882 assert @project.valid?
747 assert @project.queries.empty? 883 assert @project.queries.empty?
748 assert @project.copy(@source_project) 884 assert @project.copy(@source_project)
851 end 987 end
852 988
853 should "be nil if there are no issues on the project" do 989 should "be nil if there are no issues on the project" do
854 assert_nil @project.start_date 990 assert_nil @project.start_date
855 end 991 end
856
857 should "be nil if issue tracking is disabled" do
858 Issue.generate_for_project!(@project, :start_date => Date.today)
859 @project.enabled_modules.find_all_by_name('issue_tracking').each {|m| m.destroy}
860 @project.reload
861
862 assert_nil @project.start_date
863 end
864 992
865 should "be tested when issues have no start date" 993 should "be tested when issues have no start date"
866 994
867 should "be the earliest start date of it's issues" do 995 should "be the earliest start date of it's issues" do
868 early = 7.days.ago.to_date 996 early = 7.days.ago.to_date
880 @project = Project.generate!(:identifier => 'test0') 1008 @project = Project.generate!(:identifier => 'test0')
881 @project.trackers << Tracker.generate! 1009 @project.trackers << Tracker.generate!
882 end 1010 end
883 1011
884 should "be nil if there are no issues on the project" do 1012 should "be nil if there are no issues on the project" do
885 assert_nil @project.due_date
886 end
887
888 should "be nil if issue tracking is disabled" do
889 Issue.generate_for_project!(@project, :due_date => Date.today)
890 @project.enabled_modules.find_all_by_name('issue_tracking').each {|m| m.destroy}
891 @project.reload
892
893 assert_nil @project.due_date 1013 assert_nil @project.due_date
894 end 1014 end
895 1015
896 should "be tested when issues have no due date" 1016 should "be tested when issues have no due date"
897 1017