##// END OF EJS Templates
Fixed validation when logging time on issue (#19464)....
Jean-Philippe Lang -
r13780:3d1c40cd525f
parent child
Show More
@@ -68,9 +68,14 class TimeEntry < ActiveRecord::Base
68 def safe_attributes=(attrs, user=User.current)
68 def safe_attributes=(attrs, user=User.current)
69 if attrs
69 if attrs
70 attrs = super(attrs)
70 attrs = super(attrs)
71 if issue_id_changed? && attrs[:project_id].blank? && issue && issue.project_id != project_id
71 if issue_id_changed? && issue
72 if user.allowed_to?(:log_time, issue.project)
72 if user.allowed_to?(:log_time, issue.project)
73 self.project_id = issue.project_id
73 if attrs[:project_id].blank? && issue.project_id != project_id
74 self.project_id = issue.project_id
75 end
76 @invalid_issue_id = nil
77 else
78 @invalid_issue_id = issue_id
74 end
79 end
75 end
80 end
76 end
81 end
@@ -84,7 +89,7 class TimeEntry < ActiveRecord::Base
84 def validate_time_entry
89 def validate_time_entry
85 errors.add :hours, :invalid if hours && (hours < 0 || hours >= 1000)
90 errors.add :hours, :invalid if hours && (hours < 0 || hours >= 1000)
86 errors.add :project_id, :invalid if project.nil?
91 errors.add :project_id, :invalid if project.nil?
87 errors.add :issue_id, :invalid if (issue_id && !issue) || (issue && project!=issue.project)
92 errors.add :issue_id, :invalid if (issue_id && !issue) || (issue && project!=issue.project) || @invalid_issue_id
88 end
93 end
89
94
90 def hours=(h)
95 def hours=(h)
@@ -162,6 +162,56 class TimelogControllerTest < ActionController::TestCase
162 assert_equal 3, t.user_id
162 assert_equal 3, t.user_id
163 end
163 end
164
164
165 def test_create_on_project_with_time_tracking_disabled_should_fail
166 Project.find(1).disable_module! :time_tracking
167
168 @request.session[:user_id] = 2
169 assert_no_difference 'TimeEntry.count' do
170 post :create, :time_entry => {
171 :project_id => '1', :issue_id => '',
172 :activity_id => '11', :spent_on => '2008-03-14', :hours => '7.3'
173 }
174 end
175 end
176
177 def test_create_on_project_without_permission_should_fail
178 Role.find(1).remove_permission! :log_time
179
180 @request.session[:user_id] = 2
181 assert_no_difference 'TimeEntry.count' do
182 post :create, :time_entry => {
183 :project_id => '1', :issue_id => '',
184 :activity_id => '11', :spent_on => '2008-03-14', :hours => '7.3'
185 }
186 end
187 end
188
189 def test_create_on_issue_in_project_with_time_tracking_disabled_should_fail
190 Project.find(1).disable_module! :time_tracking
191
192 @request.session[:user_id] = 2
193 assert_no_difference 'TimeEntry.count' do
194 post :create, :time_entry => {
195 :project_id => '', :issue_id => '1',
196 :activity_id => '11', :spent_on => '2008-03-14', :hours => '7.3'
197 }
198 assert_select_error /Issue is invalid/
199 end
200 end
201
202 def test_create_on_issue_in_project_without_permission_should_fail
203 Role.find(1).remove_permission! :log_time
204
205 @request.session[:user_id] = 2
206 assert_no_difference 'TimeEntry.count' do
207 post :create, :time_entry => {
208 :project_id => '', :issue_id => '1',
209 :activity_id => '11', :spent_on => '2008-03-14', :hours => '7.3'
210 }
211 assert_select_error /Issue is invalid/
212 end
213 end
214
165 def test_create_and_continue_at_project_level
215 def test_create_and_continue_at_project_level
166 @request.session[:user_id] = 2
216 @request.session[:user_id] = 2
167 assert_difference 'TimeEntry.count' do
217 assert_difference 'TimeEntry.count' do
General Comments 0
You need to be logged in to leave comments. Login now