]> source.dussan.org Git - redmine.git/commitdiff
When updating an issue, allow adding time entry on an issue that was visible for...
authorMarius Balteanu <marius.balteanu@zitec.com>
Mon, 26 Jul 2021 20:20:41 +0000 (20:20 +0000)
committerMarius Balteanu <marius.balteanu@zitec.com>
Mon, 26 Jul 2021 20:20:41 +0000 (20:20 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@21081 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/time_entry.rb
test/functional/issues_controller_test.rb

index cb852e2180874955015a6acb4797dc72c6c1ab53..b5926c6129107a00d01a1ba11f66be0f8a79ae31 100644 (file)
@@ -119,6 +119,13 @@ class TimeEntry < ActiveRecord::Base
             self.project_id = issue.project_id
           end
           @invalid_issue_id = nil
+        elsif user.allowed_to?(:log_time, issue.project) && issue.assigned_to_id_changed? && issue.previous_assignee == User.current
+          current_assignee = issue.assigned_to
+          issue.assigned_to = issue.previous_assignee
+          unless issue.visible?(user)
+            @invalid_issue_id = issue_id
+          end
+          issue.assigned_to = current_assignee
         else
           @invalid_issue_id = issue_id
         end
index b8e185a2882b0c7470c0cb97db73daebc0e55d71..b2ca3ed0c7c8d726ed34cd9d964ddf8d8b850000 100644 (file)
@@ -6510,6 +6510,29 @@ class IssuesControllerTest < Redmine::ControllerTest
     assert_select 'input[name=?][value=?]', 'time_entry[comments]', 'this is my comment'
   end
 
+  def test_put_with_spent_time_when_assigned_to_of_private_issue_is_update_at_the_same_time
+    @request.session[:user_id] = 3
+    Role.find(2).update! :issues_visibility => 'own'
+    private_issue = Issue.find(3)
+
+    assert_difference('TimeEntry.count', 1) do
+      put(
+        :update,
+        params: {
+          id: private_issue.id,
+          issue: { assigned_to_id: nil },
+          time_entry: {
+            comments: "add spent time", activity_id: TimeEntryActivity.first.id, hours: 1
+          }
+        }
+      )
+    end
+    assert_select '#errorExplanation', {text: /Log time is invalid/, count: 0}
+    assert_select '#errorExplanation', {text: /Issue is invalid/, count: 0}
+    assert_redirected_to action: 'show', id: private_issue.id
+    assert_not private_issue.reload.visible?
+  end
+
   def test_put_update_should_allow_fixed_version_to_be_set_to_a_subproject
     issue = Issue.find(2)
     @request.session[:user_id] = 2