Commit 4b6b8ecc authored by Jan Provaznik's avatar Jan Provaznik

Return last edited time instead of update time

For issuable models we keep two timestamps:
updated_at which is updated whenever any model attribute is changed,
last_edited_at which is changed when only title or description is
changed.

In UI bellow description we display who and when updated the item. But
last_edited_by (used for 'who') is mistakenly combined with updated_at
(when), last_edited_at should be used instead.

Closes #41247
parent a4eb71dc
...@@ -45,7 +45,7 @@ module IssuableActions ...@@ -45,7 +45,7 @@ module IssuableActions
} }
if issuable.edited? if issuable.edited?
response[:updated_at] = issuable.updated_at response[:updated_at] = issuable.last_edited_at.to_time.iso8601
response[:updated_by_name] = issuable.last_edited_by.name response[:updated_by_name] = issuable.last_edited_by.name
response[:updated_by_path] = user_path(issuable.last_edited_by) response[:updated_by_path] = user_path(issuable.last_edited_by)
end end
......
...@@ -241,7 +241,7 @@ module IssuablesHelper ...@@ -241,7 +241,7 @@ module IssuablesHelper
return {} unless issuable.edited? return {} unless issuable.edited?
{ {
updatedAt: issuable.updated_at.to_time.iso8601, updatedAt: issuable.last_edited_at.to_time.iso8601,
updatedBy: { updatedBy: {
name: issuable.last_edited_by.name, name: issuable.last_edited_by.name,
path: user_path(issuable.last_edited_by) path: user_path(issuable.last_edited_by)
......
---
title: For issues display time of last edit of title or description instead of time
of any attribute change
merge_request:
author:
type: fixed
...@@ -301,6 +301,53 @@ describe Projects::IssuesController do ...@@ -301,6 +301,53 @@ describe Projects::IssuesController do
end end
end end
describe 'GET #realtime_changes' do
def go(id:)
get :realtime_changes,
namespace_id: project.namespace.to_param,
project_id: project,
id: id
end
context 'when an issue was edited' do
before do
project.add_developer(user)
issue.update!(last_edited_by: user, last_edited_at: issue.created_at + 1.minute)
sign_in(user)
end
it 'returns last edited time' do
go(id: issue.iid)
data = JSON.parse(response.body)
expect(data).to include('updated_at')
expect(data['updated_at']).to eq(issue.last_edited_at.to_time.iso8601)
end
end
context 'when an issue was edited by a deleted user' do
let(:deleted_user) { create(:user) }
before do
project.add_developer(user)
issue.update!(last_edited_by: deleted_user, last_edited_at: Time.now)
deleted_user.destroy
sign_in(user)
end
it 'returns 200' do
go(id: issue.iid)
expect(response).to have_gitlab_http_status(200)
end
end
end
describe 'Confidential Issues' do describe 'Confidential Issues' do
let(:project) { create(:project_empty_repo, :public) } let(:project) { create(:project_empty_repo, :public) }
let(:assignee) { create(:assignee) } let(:assignee) { create(:assignee) }
...@@ -589,25 +636,6 @@ describe Projects::IssuesController do ...@@ -589,25 +636,6 @@ describe Projects::IssuesController do
project_id: project, project_id: project,
id: id id: id
end end
context 'when an issue was edited by a deleted user' do
let(:deleted_user) { create(:user) }
before do
project.add_developer(user)
issue.update!(last_edited_by: deleted_user, last_edited_at: Time.now)
deleted_user.destroy
sign_in(user)
end
it 'returns 200' do
go(id: issue.iid)
expect(response).to have_gitlab_http_status(200)
end
end
end end
describe 'GET #edit' do describe 'GET #edit' do
......
...@@ -125,10 +125,10 @@ describe IssuablesHelper do ...@@ -125,10 +125,10 @@ describe IssuablesHelper do
describe '#updated_at_by' do describe '#updated_at_by' do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:unedited_issuable) { create(:issue) } let(:unedited_issuable) { create(:issue) }
let(:edited_issuable) { create(:issue, last_edited_by: user, created_at: 3.days.ago, updated_at: 2.days.ago, last_edited_at: 2.days.ago) } let(:edited_issuable) { create(:issue, last_edited_by: user, created_at: 3.days.ago, updated_at: 1.day.ago, last_edited_at: 2.days.ago) }
let(:edited_updated_at_by) do let(:edited_updated_at_by) do
{ {
updatedAt: edited_issuable.updated_at.to_time.iso8601, updatedAt: edited_issuable.last_edited_at.to_time.iso8601,
updatedBy: { updatedBy: {
name: user.name, name: user.name,
path: user_path(user) path: user_path(user)
...@@ -142,7 +142,7 @@ describe IssuablesHelper do ...@@ -142,7 +142,7 @@ describe IssuablesHelper do
context 'when updated by a deleted user' do context 'when updated by a deleted user' do
let(:edited_updated_at_by) do let(:edited_updated_at_by) do
{ {
updatedAt: edited_issuable.updated_at.to_time.iso8601, updatedAt: edited_issuable.last_edited_at.to_time.iso8601,
updatedBy: { updatedBy: {
name: User.ghost.name, name: User.ghost.name,
path: user_path(User.ghost) path: user_path(User.ghost)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment