]> source.dussan.org Git - redmine.git/commitdiff
Don't validate start date when updating an issue without changing it (#14086).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 5 Jun 2013 19:56:59 +0000 (19:56 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 5 Jun 2013 19:56:59 +0000 (19:56 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@11931 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/issue.rb
test/object_helpers.rb
test/unit/issue_test.rb

index c4183b0169984594fc048bdcbeb0c11fdaed9813..b5e76176f372fb03f49e9c360d722403cf70baf1 100644 (file)
@@ -548,11 +548,11 @@ class Issue < ActiveRecord::Base
   end
 
   def validate_issue
-    if due_date && start_date && due_date < start_date
+    if due_date && start_date && (start_date_changed? || due_date_changed?) && due_date < start_date
       errors.add :due_date, :greater_than_start_date
     end
 
-    if start_date && soonest_start && start_date < soonest_start
+    if start_date && start_date_changed? && soonest_start && start_date < soonest_start
       errors.add :start_date, :earlier_than_minimum_start_date, :date => format_date(soonest_start)
     end
 
index 2f29793f2493174d425bf792922d1367cb7f9d5e..2f7559249ccbe08c019885ad6ddb7324a1fdf5a3 100644 (file)
@@ -65,13 +65,20 @@ module ObjectHelpers
     role
   end
 
-  def Issue.generate!(attributes={})
+  # Generates an unsaved Issue
+  def Issue.generate(attributes={})
     issue = Issue.new(attributes)
     issue.project ||= Project.find(1)
     issue.tracker ||= issue.project.trackers.first
     issue.subject = 'Generated' if issue.subject.blank?
     issue.author ||= User.find(2)
     yield issue if block_given?
+    issue
+  end
+
+  # Generates a saved Issue
+  def Issue.generate!(attributes={}, &block)
+    issue = Issue.generate(attributes, &block)
     issue.save!
     issue
   end
index 0fa8808097100b3fa60c783010a5df6da2d355f5..c7d134074d126cd4aa7bbaf9c43d9a561826e952 100644 (file)
@@ -92,6 +92,27 @@ class IssueTest < ActiveSupport::TestCase
     assert_include 'Due date must be greater than start date', issue.errors.full_messages
   end
 
+  def test_start_date_lesser_than_soonest_start_should_not_validate_on_create
+    issue = Issue.generate(:start_date => '2013-06-04')
+    issue.stubs(:soonest_start).returns(Date.parse('2013-06-10'))
+    assert !issue.valid?
+    assert_include "Start date cannot be earlier than 06/10/2013 because of preceding issues", issue.errors.full_messages
+  end
+
+  def test_start_date_lesser_than_soonest_start_should_not_validate_on_update_if_changed
+    issue = Issue.generate!(:start_date => '2013-06-04')
+    issue.stubs(:soonest_start).returns(Date.parse('2013-06-10'))
+    issue.start_date = '2013-06-07'
+    assert !issue.valid?
+    assert_include "Start date cannot be earlier than 06/10/2013 because of preceding issues", issue.errors.full_messages
+  end
+
+  def test_start_date_lesser_than_soonest_start_should_validate_on_update_if_unchanged
+    issue = Issue.generate!(:start_date => '2013-06-04')
+    issue.stubs(:soonest_start).returns(Date.parse('2013-06-10'))
+    assert issue.valid?
+  end
+
   def test_estimated_hours_should_be_validated
     set_language_if_valid 'en'
     ['-2'].each do |invalid|