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