You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

issue_relation_test.rb 4.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. # Redmine - project management software
  2. # Copyright (C) 2006-2013 Jean-Philippe Lang
  3. #
  4. # This program is free software; you can redistribute it and/or
  5. # modify it under the terms of the GNU General Public License
  6. # as published by the Free Software Foundation; either version 2
  7. # of the License, or (at your option) any later version.
  8. #
  9. # This program is distributed in the hope that it will be useful,
  10. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. # GNU General Public License for more details.
  13. #
  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
  16. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  17. require File.expand_path('../../test_helper', __FILE__)
  18. class IssueRelationTest < ActiveSupport::TestCase
  19. fixtures :projects,
  20. :users,
  21. :roles,
  22. :members,
  23. :member_roles,
  24. :issues,
  25. :issue_statuses,
  26. :issue_relations,
  27. :enabled_modules,
  28. :enumerations,
  29. :trackers
  30. def test_create
  31. from = Issue.find(1)
  32. to = Issue.find(2)
  33. relation = IssueRelation.new :issue_from => from, :issue_to => to,
  34. :relation_type => IssueRelation::TYPE_PRECEDES
  35. assert relation.save
  36. relation.reload
  37. assert_equal IssueRelation::TYPE_PRECEDES, relation.relation_type
  38. assert_equal from, relation.issue_from
  39. assert_equal to, relation.issue_to
  40. end
  41. def test_create_minimum
  42. relation = IssueRelation.new :issue_from => Issue.find(1), :issue_to => Issue.find(2)
  43. assert relation.save
  44. assert_equal IssueRelation::TYPE_RELATES, relation.relation_type
  45. end
  46. def test_follows_relation_should_be_reversed
  47. from = Issue.find(1)
  48. to = Issue.find(2)
  49. relation = IssueRelation.new :issue_from => from, :issue_to => to,
  50. :relation_type => IssueRelation::TYPE_FOLLOWS
  51. assert relation.save
  52. relation.reload
  53. assert_equal IssueRelation::TYPE_PRECEDES, relation.relation_type
  54. assert_equal to, relation.issue_from
  55. assert_equal from, relation.issue_to
  56. end
  57. def test_follows_relation_should_not_be_reversed_if_validation_fails
  58. from = Issue.find(1)
  59. to = Issue.find(2)
  60. relation = IssueRelation.new :issue_from => from, :issue_to => to,
  61. :relation_type => IssueRelation::TYPE_FOLLOWS,
  62. :delay => 'xx'
  63. assert !relation.save
  64. assert_equal IssueRelation::TYPE_FOLLOWS, relation.relation_type
  65. assert_equal from, relation.issue_from
  66. assert_equal to, relation.issue_to
  67. end
  68. def test_relation_type_for
  69. from = Issue.find(1)
  70. to = Issue.find(2)
  71. relation = IssueRelation.new :issue_from => from, :issue_to => to,
  72. :relation_type => IssueRelation::TYPE_PRECEDES
  73. assert_equal IssueRelation::TYPE_PRECEDES, relation.relation_type_for(from)
  74. assert_equal IssueRelation::TYPE_FOLLOWS, relation.relation_type_for(to)
  75. end
  76. def test_set_issue_to_dates_without_issue_to
  77. r = IssueRelation.new(:issue_from => Issue.new(:start_date => Date.today),
  78. :relation_type => IssueRelation::TYPE_PRECEDES,
  79. :delay => 1)
  80. assert_nil r.set_issue_to_dates
  81. end
  82. def test_set_issue_to_dates_without_issues
  83. r = IssueRelation.new(:relation_type => IssueRelation::TYPE_PRECEDES, :delay => 1)
  84. assert_nil r.set_issue_to_dates
  85. end
  86. def test_validates_circular_dependency
  87. IssueRelation.delete_all
  88. assert IssueRelation.create!(
  89. :issue_from => Issue.find(1), :issue_to => Issue.find(2),
  90. :relation_type => IssueRelation::TYPE_PRECEDES
  91. )
  92. assert IssueRelation.create!(
  93. :issue_from => Issue.find(2), :issue_to => Issue.find(3),
  94. :relation_type => IssueRelation::TYPE_PRECEDES
  95. )
  96. r = IssueRelation.new(
  97. :issue_from => Issue.find(3), :issue_to => Issue.find(1),
  98. :relation_type => IssueRelation::TYPE_PRECEDES
  99. )
  100. assert !r.save
  101. assert_not_nil r.errors[:base]
  102. end
  103. def test_validates_circular_dependency_on_reverse_relations
  104. IssueRelation.delete_all
  105. assert IssueRelation.create!(
  106. :issue_from => Issue.find(1), :issue_to => Issue.find(3),
  107. :relation_type => IssueRelation::TYPE_BLOCKS
  108. )
  109. assert IssueRelation.create!(
  110. :issue_from => Issue.find(1), :issue_to => Issue.find(2),
  111. :relation_type => IssueRelation::TYPE_BLOCKED
  112. )
  113. r = IssueRelation.new(
  114. :issue_from => Issue.find(2), :issue_to => Issue.find(1),
  115. :relation_type => IssueRelation::TYPE_BLOCKED
  116. )
  117. assert !r.save
  118. assert_not_nil r.errors[:base]
  119. end
  120. end