comparison test/unit/issue_test.rb @ 1517:dffacf8a6908 redmine-2.5

Update to Redmine SVN revision 13367 on 2.5-stable branch
author Chris Cannam
date Tue, 09 Sep 2014 09:29:00 +0100
parents e248c7af89ec
children
comparison
equal deleted inserted replaced
1516:b450a9d58aed 1517:dffacf8a6908
152 def test_create_with_group_assignment 152 def test_create_with_group_assignment
153 with_settings :issue_group_assignment => '1' do 153 with_settings :issue_group_assignment => '1' do
154 assert Issue.new(:project_id => 2, :tracker_id => 1, :author_id => 1, 154 assert Issue.new(:project_id => 2, :tracker_id => 1, :author_id => 1,
155 :subject => 'Group assignment', 155 :subject => 'Group assignment',
156 :assigned_to_id => 11).save 156 :assigned_to_id => 11).save
157 issue = Issue.first(:order => 'id DESC') 157 issue = Issue.order('id DESC').first
158 assert_kind_of Group, issue.assigned_to 158 assert_kind_of Group, issue.assigned_to
159 assert_equal Group.find(11), issue.assigned_to 159 assert_equal Group.find(11), issue.assigned_to
160 end 160 end
161 end 161 end
162 162
328 assert projects.size > 1 328 assert projects.size > 1
329 assert_equal [], projects.select {|p| !p.is_or_is_descendant_of?(project)} 329 assert_equal [], projects.select {|p| !p.is_or_is_descendant_of?(project)}
330 end 330 end
331 331
332 def test_visible_and_nested_set_scopes 332 def test_visible_and_nested_set_scopes
333 assert_equal 0, Issue.find(1).descendants.visible.all.size 333 user = User.generate!
334 parent = Issue.generate!(:assigned_to => user)
335 assert parent.visible?(user)
336 child1 = Issue.generate!(:parent_issue_id => parent.id, :assigned_to => user)
337 child2 = Issue.generate!(:parent_issue_id => parent.id, :assigned_to => user)
338 parent.reload
339 child1.reload
340 child2.reload
341 assert child1.visible?(user)
342 assert child2.visible?(user)
343 assert_equal 2, parent.descendants.count
344 assert_equal 2, parent.descendants.visible(user).count
345 # awesome_nested_set 2-1-stable branch has regression.
346 # https://github.com/collectiveidea/awesome_nested_set/commit/3d5ac746542b564f6586c2316180254b088bebb6
347 # ActiveRecord::StatementInvalid: SQLite3::SQLException: ambiguous column name: lft:
348 assert_equal 2, parent.descendants.collect{|i| i}.size
349 assert_equal 2, parent.descendants.visible(user).collect{|i| i}.size
334 end 350 end
335 351
336 def test_open_scope 352 def test_open_scope
337 issues = Issue.open.all 353 issues = Issue.open.all
338 assert_nil issues.detect(&:closed?) 354 assert_nil issues.detect(&:closed?)
562 def test_new_statuses_allowed_to_should_return_all_transitions_for_admin 578 def test_new_statuses_allowed_to_should_return_all_transitions_for_admin
563 admin = User.find(1) 579 admin = User.find(1)
564 issue = Issue.find(1) 580 issue = Issue.find(1)
565 assert !admin.member_of?(issue.project) 581 assert !admin.member_of?(issue.project)
566 expected_statuses = [issue.status] + 582 expected_statuses = [issue.status] +
567 WorkflowTransition.find_all_by_old_status_id( 583 WorkflowTransition.where(:old_status_id => issue.status_id).
568 issue.status_id).map(&:new_status).uniq.sort 584 map(&:new_status).uniq.sort
569 assert_equal expected_statuses, issue.new_statuses_allowed_to(admin) 585 assert_equal expected_statuses, issue.new_statuses_allowed_to(admin)
570 end 586 end
571 587
572 def test_new_statuses_allowed_to_should_return_default_and_current_status_when_copying 588 def test_new_statuses_allowed_to_should_return_default_and_current_status_when_copying
573 issue = Issue.find(1).copy 589 issue = Issue.find(1).copy
688 values = issue.editable_custom_field_values(user) 704 values = issue.editable_custom_field_values(user)
689 assert values.detect {|value| value.custom_field == cf1} 705 assert values.detect {|value| value.custom_field == cf1}
690 assert values.detect {|value| value.custom_field == cf2} 706 assert values.detect {|value| value.custom_field == cf2}
691 end 707 end
692 708
709 def test_editable_custom_fields_should_return_custom_field_that_is_enabled_for_the_role_only
710 enabled_cf = IssueCustomField.generate!(:is_for_all => true, :tracker_ids => [1], :visible => false, :role_ids => [1,2])
711 disabled_cf = IssueCustomField.generate!(:is_for_all => true, :tracker_ids => [1], :visible => false, :role_ids => [2])
712 user = User.find(2)
713 issue = Issue.new(:project_id => 1, :tracker_id => 1)
714
715 assert_include enabled_cf, issue.editable_custom_fields(user)
716 assert_not_include disabled_cf, issue.editable_custom_fields(user)
717 end
718
693 def test_safe_attributes_should_accept_target_tracker_writable_fields 719 def test_safe_attributes_should_accept_target_tracker_writable_fields
694 WorkflowPermission.delete_all 720 WorkflowPermission.delete_all
695 WorkflowPermission.create!(:old_status_id => 1, :tracker_id => 1, 721 WorkflowPermission.create!(:old_status_id => 1, :tracker_id => 1,
696 :role_id => 1, :field_name => 'due_date', 722 :role_id => 1, :field_name => 'due_date',
697 :rule => 'readonly') 723 :rule => 'readonly')
1371 1397
1372 def test_issue_destroy 1398 def test_issue_destroy
1373 Issue.find(1).destroy 1399 Issue.find(1).destroy
1374 assert_nil Issue.find_by_id(1) 1400 assert_nil Issue.find_by_id(1)
1375 assert_nil TimeEntry.find_by_issue_id(1) 1401 assert_nil TimeEntry.find_by_issue_id(1)
1402 end
1403
1404 def test_destroy_should_delete_time_entries_custom_values
1405 issue = Issue.generate!
1406 time_entry = TimeEntry.generate!(:issue => issue, :custom_field_values => {10 => '1'})
1407
1408 assert_difference 'CustomValue.where(:customized_type => "TimeEntry").count', -1 do
1409 assert issue.destroy
1410 end
1376 end 1411 end
1377 1412
1378 def test_destroying_a_deleted_issue_should_not_raise_an_error 1413 def test_destroying_a_deleted_issue_should_not_raise_an_error
1379 issue = Issue.find(1) 1414 issue = Issue.find(1)
1380 Issue.find(1).destroy 1415 Issue.find(1).destroy
1693 ActionMailer::Base.deliveries.clear 1728 ActionMailer::Base.deliveries.clear
1694 issue = Issue.new(:project_id => 1, :tracker_id => 1, 1729 issue = Issue.new(:project_id => 1, :tracker_id => 1,
1695 :author_id => 3, :status_id => 1, 1730 :author_id => 3, :status_id => 1,
1696 :priority => IssuePriority.all.first, 1731 :priority => IssuePriority.all.first,
1697 :subject => 'test_create', :estimated_hours => '1:30') 1732 :subject => 'test_create', :estimated_hours => '1:30')
1698 1733 with_settings :notified_events => %w(issue_added) do
1699 assert issue.save 1734 assert issue.save
1700 assert_equal 1, ActionMailer::Base.deliveries.size 1735 assert_equal 1, ActionMailer::Base.deliveries.size
1736 end
1737 end
1738
1739 def test_create_should_send_one_email_notification_with_both_settings
1740 ActionMailer::Base.deliveries.clear
1741 issue = Issue.new(:project_id => 1, :tracker_id => 1,
1742 :author_id => 3, :status_id => 1,
1743 :priority => IssuePriority.all.first,
1744 :subject => 'test_create', :estimated_hours => '1:30')
1745 with_settings :notified_events => %w(issue_added issue_updated) do
1746 assert issue.save
1747 assert_equal 1, ActionMailer::Base.deliveries.size
1748 end
1749 end
1750
1751 def test_create_should_not_send_email_notification_with_no_setting
1752 ActionMailer::Base.deliveries.clear
1753 issue = Issue.new(:project_id => 1, :tracker_id => 1,
1754 :author_id => 3, :status_id => 1,
1755 :priority => IssuePriority.all.first,
1756 :subject => 'test_create', :estimated_hours => '1:30')
1757 with_settings :notified_events => [] do
1758 assert issue.save
1759 assert_equal 0, ActionMailer::Base.deliveries.size
1760 end
1701 end 1761 end
1702 1762
1703 def test_update_should_notify_previous_assignee 1763 def test_update_should_notify_previous_assignee
1704 ActionMailer::Base.deliveries.clear 1764 ActionMailer::Base.deliveries.clear
1705 user = User.find(3) 1765 user = User.find(3)
1718 issue = Issue.find(1) 1778 issue = Issue.find(1)
1719 stale = Issue.find(1) 1779 stale = Issue.find(1)
1720 1780
1721 issue.init_journal(User.find(1)) 1781 issue.init_journal(User.find(1))
1722 issue.subject = 'Subjet update' 1782 issue.subject = 'Subjet update'
1723 assert issue.save 1783 with_settings :notified_events => %w(issue_updated) do
1724 assert_equal 1, ActionMailer::Base.deliveries.size 1784 assert issue.save
1725 ActionMailer::Base.deliveries.clear 1785 assert_equal 1, ActionMailer::Base.deliveries.size
1726 1786 ActionMailer::Base.deliveries.clear
1727 stale.init_journal(User.find(1)) 1787
1728 stale.subject = 'Another subjet update' 1788 stale.init_journal(User.find(1))
1729 assert_raise ActiveRecord::StaleObjectError do 1789 stale.subject = 'Another subjet update'
1730 stale.save 1790 assert_raise ActiveRecord::StaleObjectError do
1731 end 1791 stale.save
1732 assert ActionMailer::Base.deliveries.empty? 1792 end
1793 assert ActionMailer::Base.deliveries.empty?
1794 end
1733 end 1795 end
1734 1796
1735 def test_journalized_description 1797 def test_journalized_description
1736 IssueCustomField.delete_all 1798 IssueCustomField.delete_all
1737 1799
1745 assert_difference 'JournalDetail.count', 1 do 1807 assert_difference 'JournalDetail.count', 1 do
1746 i.save! 1808 i.save!
1747 end 1809 end
1748 end 1810 end
1749 1811
1750 detail = JournalDetail.first(:order => 'id DESC') 1812 detail = JournalDetail.order('id DESC').first
1751 assert_equal i, detail.journal.journalized 1813 assert_equal i, detail.journal.journalized
1752 assert_equal 'attr', detail.property 1814 assert_equal 'attr', detail.property
1753 assert_equal 'description', detail.prop_key 1815 assert_equal 'description', detail.prop_key
1754 assert_equal old_description, detail.old_value 1816 assert_equal old_description, detail.old_value
1755 assert_equal new_description, detail.value 1817 assert_equal new_description, detail.value
1756 end 1818 end
1757 1819
1758 def test_blank_descriptions_should_not_be_journalized 1820 def test_blank_descriptions_should_not_be_journalized
1759 IssueCustomField.delete_all 1821 IssueCustomField.delete_all
1760 Issue.update_all("description = NULL", "id=1") 1822 Issue.where(:id => 1).update_all("description = NULL")
1761 1823
1762 i = Issue.find(1) 1824 i = Issue.find(1)
1763 i.init_journal(User.find(2)) 1825 i.init_journal(User.find(2))
1764 i.subject = "blank description" 1826 i.subject = "blank description"
1765 i.description = "\r\n" 1827 i.description = "\r\n"
1989 :relation_type => IssueRelation::TYPE_PRECEDES) 2051 :relation_type => IssueRelation::TYPE_PRECEDES)
1990 2052
1991 r = IssueRelation.create!(:issue_from => Issue.find(3), 2053 r = IssueRelation.create!(:issue_from => Issue.find(3),
1992 :issue_to => Issue.find(7), 2054 :issue_to => Issue.find(7),
1993 :relation_type => IssueRelation::TYPE_PRECEDES) 2055 :relation_type => IssueRelation::TYPE_PRECEDES)
1994 IssueRelation.update_all("issue_to_id = 1", ["id = ?", r.id]) 2056 IssueRelation.where(["id = ?", r.id]).update_all("issue_to_id = 1")
1995 2057
1996 assert_equal [2, 3], Issue.find(1).all_dependent_issues.collect(&:id).sort 2058 assert_equal [2, 3], Issue.find(1).all_dependent_issues.collect(&:id).sort
1997 end 2059 end
1998 2060
1999 def test_all_dependent_issues_with_persistent_multiple_circular_dependencies 2061 def test_all_dependent_issues_with_persistent_multiple_circular_dependencies
2009 :relation_type => IssueRelation::TYPE_RELATES) 2071 :relation_type => IssueRelation::TYPE_RELATES)
2010 2072
2011 r = IssueRelation.create!(:issue_from => Issue.find(8), 2073 r = IssueRelation.create!(:issue_from => Issue.find(8),
2012 :issue_to => Issue.find(7), 2074 :issue_to => Issue.find(7),
2013 :relation_type => IssueRelation::TYPE_RELATES) 2075 :relation_type => IssueRelation::TYPE_RELATES)
2014 IssueRelation.update_all("issue_to_id = 2", ["id = ?", r.id]) 2076 IssueRelation.where(["id = ?", r.id]).update_all("issue_to_id = 2")
2015 2077
2016 r = IssueRelation.create!(:issue_from => Issue.find(3), 2078 r = IssueRelation.create!(:issue_from => Issue.find(3),
2017 :issue_to => Issue.find(7), 2079 :issue_to => Issue.find(7),
2018 :relation_type => IssueRelation::TYPE_RELATES) 2080 :relation_type => IssueRelation::TYPE_RELATES)
2019 IssueRelation.update_all("issue_to_id = 1", ["id = ?", r.id]) 2081 IssueRelation.where(["id = ?", r.id]).update_all("issue_to_id = 1")
2020 2082
2021 assert_equal [2, 3, 8], Issue.find(1).all_dependent_issues.collect(&:id).sort 2083 assert_equal [2, 3, 8], Issue.find(1).all_dependent_issues.collect(&:id).sort
2022 end 2084 end
2023 2085
2024 test "#done_ratio should use the issue_status according to Setting.issue_done_ratio" do 2086 test "#done_ratio should use the issue_status according to Setting.issue_done_ratio" do