Mercurial > hg > soundsoftware-site
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 |