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
}
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_path] = user_path(issuable.last_edited_by)
end
......
......@@ -241,7 +241,7 @@ module IssuablesHelper
return {} unless issuable.edited?
{
updatedAt: issuable.updated_at.to_time.iso8601,
updatedAt: issuable.last_edited_at.to_time.iso8601,
updatedBy: {
name: issuable.last_edited_by.name,
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
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
let(:project) { create(:project_empty_repo, :public) }
let(:assignee) { create(:assignee) }
......@@ -589,25 +636,6 @@ describe Projects::IssuesController do
project_id: project,
id: id
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 'GET #edit' do
......
......@@ -125,10 +125,10 @@ describe IssuablesHelper do
describe '#updated_at_by' do
let(:user) { create(:user) }
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
{
updatedAt: edited_issuable.updated_at.to_time.iso8601,
updatedAt: edited_issuable.last_edited_at.to_time.iso8601,
updatedBy: {
name: user.name,
path: user_path(user)
......@@ -142,7 +142,7 @@ describe IssuablesHelper do
context 'when updated by a deleted user' 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: {
name: User.ghost.name,
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