mirror of
https://github.com/meineerde/redmine.git
synced 2026-01-07 16:11:30 +00:00
Editing a time entry for a locked user changes the user to the current user (#32973).
Patch by Marius BALTEANU. git-svn-id: http://svn.redmine.org/redmine/trunk@19651 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
214ec3e806
commit
e91dbcb5a7
@ -44,6 +44,7 @@ module TimelogHelper
|
||||
|
||||
def user_collection_for_select_options(time_entry)
|
||||
collection = time_entry.assignable_users
|
||||
collection << time_entry.user unless time_entry.user.nil? && !collection.include?(time_entry.user)
|
||||
principals_options_for_select(collection, time_entry.user_id.to_s)
|
||||
end
|
||||
|
||||
|
||||
@ -146,7 +146,9 @@ class TimeEntry < ActiveRecord::Base
|
||||
end
|
||||
end
|
||||
errors.add :project_id, :invalid if project.nil?
|
||||
errors.add :user_id, :invalid if user_id != author_id && !self.assignable_users.map(&:id).include?(user_id)
|
||||
if user_id_changed? && user_id != author_id && !self.assignable_users.map(&:id).include?(user_id)
|
||||
errors.add :user_id, :invalid
|
||||
end
|
||||
errors.add :issue_id, :invalid if (issue_id && !issue) || (issue && project!=issue.project) || @invalid_issue_id
|
||||
errors.add :activity_id, :inclusion if activity_id_changed? && project && !project.activities.include?(activity)
|
||||
if spent_on_changed? && user
|
||||
|
||||
@ -186,6 +186,28 @@ class TimelogControllerTest < Redmine::ControllerTest
|
||||
assert_select 'a[href=?]', '/projects/ecookbook/time_entries', {:text => 'Cancel'}
|
||||
end
|
||||
|
||||
def test_get_edit_with_an_existing_time_entry_with_locked_user
|
||||
user = User.find(3)
|
||||
entry = TimeEntry.generate!(:user_id => user.id, :comments => "Time entry on a future locked user")
|
||||
entry.save!
|
||||
|
||||
user.status = User::STATUS_LOCKED
|
||||
user.save!
|
||||
Role.find_by_name('Manager').add_permission! :log_time_for_other_users
|
||||
@request.session[:user_id] = 2
|
||||
|
||||
get :edit, :params => {
|
||||
:id => entry.id
|
||||
}
|
||||
|
||||
assert_response :success
|
||||
|
||||
assert_select 'select[name=?]', 'time_entry[user_id]' do
|
||||
# User with id 3 should be selected even if it's locked
|
||||
assert_select 'option[value="3"][selected=selected]'
|
||||
end
|
||||
end
|
||||
|
||||
def test_post_create
|
||||
@request.session[:user_id] = 3
|
||||
assert_difference 'TimeEntry.count' do
|
||||
@ -639,6 +661,26 @@ class TimelogControllerTest < Redmine::ControllerTest
|
||||
assert_select 'p[id=?]', 'errorExplanation', :text => I18n.t(:error_not_allowed_to_log_time_for_other_users)
|
||||
end
|
||||
|
||||
def test_update_should_allow_updating_existing_entry_logged_on_a_locked_user
|
||||
entry = TimeEntry.generate!(:user_id => 2, :hours => 4, :comments => "Time entry on a future locked user")
|
||||
Role.find_by_name('Manager').add_permission! :log_time_for_other_users
|
||||
@request.session[:user_id] = 2
|
||||
|
||||
put :update, :params => {
|
||||
:id => entry.id,
|
||||
:time_entry => {
|
||||
:hours => '6'
|
||||
}
|
||||
}
|
||||
|
||||
assert_response :redirect
|
||||
|
||||
entry.reload
|
||||
# Ensure user didn't change
|
||||
assert_equal 2, entry.user_id
|
||||
assert_equal 6.0, entry.hours
|
||||
end
|
||||
|
||||
def test_get_bulk_edit
|
||||
@request.session[:user_id] = 2
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user