Merge branch '45442-updates-updated-at-to-issue-on-time-spent' into 'master'
Resolve "Update `updated_at` on an issue when label or time spent was added" Closes #45442 See merge request gitlab-org/gitlab-ce!18757
This commit is contained in:
commit
2278140763
4 changed files with 48 additions and 9 deletions
|
@ -30,6 +30,8 @@ module TimeTrackable
|
|||
|
||||
return if @time_spent == 0
|
||||
|
||||
touch if touchable?
|
||||
|
||||
if @time_spent == :reset
|
||||
reset_spent_time
|
||||
else
|
||||
|
@ -53,6 +55,10 @@ module TimeTrackable
|
|||
|
||||
private
|
||||
|
||||
def touchable?
|
||||
valid? && persisted?
|
||||
end
|
||||
|
||||
def reset_spent_time
|
||||
timelogs.new(time_spent: total_time_spent * -1, user: @time_spent_user) # rubocop:disable Gitlab/ModuleWithInstanceVariables
|
||||
end
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Updates updated_at on issuable when setting time spent
|
||||
merge_request: 18757
|
||||
author: Jacopo Beschi @jacopo-beschi
|
||||
type: added
|
|
@ -495,6 +495,14 @@ describe Issuable do
|
|||
|
||||
expect(issue.total_time_spent).to eq(1800)
|
||||
end
|
||||
|
||||
it 'updates issues updated_at' do
|
||||
issue
|
||||
|
||||
Timecop.travel(1.minute.from_now) do
|
||||
expect { spend_time(1800) }.to change { issue.updated_at }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'substracting time' do
|
||||
|
@ -510,9 +518,13 @@ describe Issuable do
|
|||
|
||||
context 'when time to substract exceeds the total time spent' do
|
||||
it 'raise a validation error' do
|
||||
expect do
|
||||
spend_time(-3600)
|
||||
end.to raise_error(ActiveRecord::RecordInvalid)
|
||||
Timecop.travel(1.minute.from_now) do
|
||||
expect do
|
||||
expect do
|
||||
spend_time(-3600)
|
||||
end.to raise_error(ActiveRecord::RecordInvalid)
|
||||
end.not_to change { issue.updated_at }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -70,8 +70,12 @@ shared_examples 'time tracking endpoints' do |issuable_name|
|
|||
end
|
||||
|
||||
it "add spent time for #{issuable_name}" do
|
||||
post api("/projects/#{project.id}/#{issuable_collection_name}/#{issuable.iid}/add_spent_time", user),
|
||||
duration: '2h'
|
||||
Timecop.travel(1.minute.from_now) do
|
||||
expect do
|
||||
post api("/projects/#{project.id}/#{issuable_collection_name}/#{issuable.iid}/add_spent_time", user),
|
||||
duration: '2h'
|
||||
end.to change { issuable.reload.updated_at }
|
||||
end
|
||||
|
||||
expect(response).to have_gitlab_http_status(201)
|
||||
expect(json_response['human_total_time_spent']).to eq('2h')
|
||||
|
@ -79,7 +83,11 @@ shared_examples 'time tracking endpoints' do |issuable_name|
|
|||
|
||||
context 'when subtracting time' do
|
||||
it 'subtracts time of the total spent time' do
|
||||
issuable.update_attributes!(spend_time: { duration: 7200, user_id: user.id })
|
||||
Timecop.travel(1.minute.from_now) do
|
||||
expect do
|
||||
issuable.update_attributes!(spend_time: { duration: 7200, user_id: user.id })
|
||||
end.to change { issuable.reload.updated_at }
|
||||
end
|
||||
|
||||
post api("/projects/#{project.id}/#{issuable_collection_name}/#{issuable.iid}/add_spent_time", user),
|
||||
duration: '-1h'
|
||||
|
@ -93,8 +101,12 @@ shared_examples 'time tracking endpoints' do |issuable_name|
|
|||
it 'does not modify the total time spent' do
|
||||
issuable.update_attributes!(spend_time: { duration: 7200, user_id: user.id })
|
||||
|
||||
post api("/projects/#{project.id}/#{issuable_collection_name}/#{issuable.iid}/add_spent_time", user),
|
||||
duration: '-1w'
|
||||
Timecop.travel(1.minute.from_now) do
|
||||
expect do
|
||||
post api("/projects/#{project.id}/#{issuable_collection_name}/#{issuable.iid}/add_spent_time", user),
|
||||
duration: '-1w'
|
||||
end.not_to change { issuable.reload.updated_at }
|
||||
end
|
||||
|
||||
expect(response).to have_gitlab_http_status(400)
|
||||
expect(json_response['message']['time_spent'].first).to match(/exceeds the total time spent/)
|
||||
|
@ -110,7 +122,11 @@ shared_examples 'time tracking endpoints' do |issuable_name|
|
|||
end
|
||||
|
||||
it "resets spent time for #{issuable_name}" do
|
||||
post api("/projects/#{project.id}/#{issuable_collection_name}/#{issuable.iid}/reset_spent_time", user)
|
||||
Timecop.travel(1.minute.from_now) do
|
||||
expect do
|
||||
post api("/projects/#{project.id}/#{issuable_collection_name}/#{issuable.iid}/reset_spent_time", user)
|
||||
end.to change { issuable.reload.updated_at }
|
||||
end
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(json_response['total_time_spent']).to eq(0)
|
||||
|
|
Loading…
Reference in a new issue