Fixed: no error is raised when entering invalid hours on the issue update form (#2465).

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2251 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang 2009-01-09 17:32:46 +00:00
parent c0f44db4f7
commit 6768bec456
4 changed files with 25 additions and 4 deletions

View File

@ -32,7 +32,7 @@ class TimeEntry < ActiveRecord::Base
:description => :comments :description => :comments
validates_presence_of :user_id, :activity_id, :project_id, :hours, :spent_on validates_presence_of :user_id, :activity_id, :project_id, :hours, :spent_on
validates_numericality_of :hours, :allow_nil => true validates_numericality_of :hours, :allow_nil => true, :message => :activerecord_error_invalid
validates_length_of :comments, :maximum => 255, :allow_nil => true validates_length_of :comments, :maximum => 255, :allow_nil => true
def after_initialize def after_initialize
@ -54,7 +54,7 @@ class TimeEntry < ActiveRecord::Base
end end
def hours=(h) def hours=(h)
write_attribute :hours, (h.is_a?(String) ? h.to_hours : h) write_attribute :hours, (h.is_a?(String) ? (h.to_hours || h) : h)
end end
# tyear, tmonth, tweek assigned where setting spent_on attributes # tyear, tmonth, tweek assigned where setting spent_on attributes

View File

@ -24,7 +24,9 @@ module Redmine #:nodoc:
def to_hours def to_hours
s = self.dup s = self.dup
s.strip! s.strip!
unless s =~ %r{^[\d\.,]+$} if s =~ %r{^(\d+([.,]\d+)?)h?$}
s = $1
else
# 2:30 => 2.5 # 2:30 => 2.5
s.gsub!(%r{^(\d+):(\d+)$}) { $1.to_i + $2.to_i / 60.0 } s.gsub!(%r{^(\d+):(\d+)$}) { $1.to_i + $2.to_i / 60.0 }
# 2h30, 2h, 30m => 2.5, 2, 0.5 # 2h30, 2h, 30m => 2.5, 2, 0.5

View File

@ -598,6 +598,24 @@ class IssuesControllerTest < Test::Unit::TestCase
assert ActionMailer::Base.deliveries.empty? assert ActionMailer::Base.deliveries.empty?
end end
def test_post_edit_with_invalid_spent_time
@request.session[:user_id] = 2
notes = 'Note added by IssuesControllerTest#test_post_edit_with_invalid_spent_time'
assert_no_difference('Journal.count') do
post :edit,
:id => 1,
:notes => notes,
:time_entry => {"comments"=>"", "activity_id"=>"", "hours"=>"2z"}
end
assert_response :success
assert_template 'edit'
assert_tag :textarea, :attributes => { :name => 'notes' },
:content => notes
assert_tag :input, :attributes => { :name => 'time_entry[hours]', :value => "2z" }
end
def test_bulk_edit def test_bulk_edit
@request.session[:user_id] = 2 @request.session[:user_id] = 2
# update issues priority # update issues priority

View File

@ -24,6 +24,7 @@ class TimeEntryTest < Test::Unit::TestCase
assertions = { "2" => 2.0, assertions = { "2" => 2.0,
"21.1" => 21.1, "21.1" => 21.1,
"2,1" => 2.1, "2,1" => 2.1,
"1,5h" => 1.5,
"7:12" => 7.2, "7:12" => 7.2,
"10h" => 10.0, "10h" => 10.0,
"10 h" => 10.0, "10 h" => 10.0,
@ -40,7 +41,7 @@ class TimeEntryTest < Test::Unit::TestCase
assertions.each do |k, v| assertions.each do |k, v|
t = TimeEntry.new(:hours => k) t = TimeEntry.new(:hours => k)
assert_equal v, t.hours assert_equal v, t.hours, "Converting #{k} failed:"
end end
end end
end end