Fix system note comparison and standardize note setup
Fix https://gitlab.com/gitlab-org/gitlab-ce/issues/32551
This commit is contained in:
parent
e4eec19156
commit
682cfbb4dc
4 changed files with 32 additions and 17 deletions
|
@ -287,6 +287,13 @@ const normalizeNewlines = function(str) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Notes.prototype.setupNewNote = function($note) {
|
||||||
|
// Update datetime format on the recent note
|
||||||
|
gl.utils.localTimeAgo($note.find('.js-timeago'), false);
|
||||||
|
this.collapseLongCommitList();
|
||||||
|
this.taskList.init();
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Render note in main comments area.
|
Render note in main comments area.
|
||||||
|
|
||||||
|
@ -312,10 +319,7 @@ const normalizeNewlines = function(str) {
|
||||||
|
|
||||||
const $newNote = Notes.animateAppendNote(noteEntity.html, $notesList);
|
const $newNote = Notes.animateAppendNote(noteEntity.html, $notesList);
|
||||||
|
|
||||||
// Update datetime format on the recent note
|
this.setupNewNote($newNote);
|
||||||
gl.utils.localTimeAgo($newNote.find('.js-timeago'), false);
|
|
||||||
this.collapseLongCommitList();
|
|
||||||
this.taskList.init();
|
|
||||||
this.refresh();
|
this.refresh();
|
||||||
return this.updateNotesCount(1);
|
return this.updateNotesCount(1);
|
||||||
}
|
}
|
||||||
|
@ -341,9 +345,7 @@ const normalizeNewlines = function(str) {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const $updatedNote = Notes.animateUpdateNote(noteEntity.html, $note);
|
const $updatedNote = Notes.animateUpdateNote(noteEntity.html, $note);
|
||||||
|
this.setupNewNote($updatedNote);
|
||||||
// Update datetime format on the recent note
|
|
||||||
gl.utils.localTimeAgo($updatedNote.find('.js-timeago'), false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -665,10 +667,8 @@ const normalizeNewlines = function(str) {
|
||||||
if (this.updatedNotesTrackingMap[noteId]) {
|
if (this.updatedNotesTrackingMap[noteId]) {
|
||||||
const $newNote = $(this.updatedNotesTrackingMap[noteId].html);
|
const $newNote = $(this.updatedNotesTrackingMap[noteId].html);
|
||||||
$note.replaceWith($newNote);
|
$note.replaceWith($newNote);
|
||||||
|
this.setupNewNote($newNote);
|
||||||
this.updatedNotesTrackingMap[noteId] = null;
|
this.updatedNotesTrackingMap[noteId] = null;
|
||||||
|
|
||||||
// Update datetime format on the recent note
|
|
||||||
gl.utils.localTimeAgo($newNote.find('.js-timeago'), false);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$note.find('.js-finish-edit-warning').hide();
|
$note.find('.js-finish-edit-warning').hide();
|
||||||
|
@ -1144,7 +1144,7 @@ const normalizeNewlines = function(str) {
|
||||||
// There can be CRLF vs LF mismatches if we don't sanitize and compare the same way
|
// There can be CRLF vs LF mismatches if we don't sanitize and compare the same way
|
||||||
const sanitizedNoteEntityText = normalizeNewlines(noteEntity.note.trim());
|
const sanitizedNoteEntityText = normalizeNewlines(noteEntity.note.trim());
|
||||||
const currentNoteText = normalizeNewlines(
|
const currentNoteText = normalizeNewlines(
|
||||||
$note.find('.original-note-content').text().trim()
|
$note.find('.original-note-content').first().text().trim()
|
||||||
);
|
);
|
||||||
return sanitizedNoteEntityText !== currentNoteText;
|
return sanitizedNoteEntityText !== currentNoteText;
|
||||||
};
|
};
|
||||||
|
|
|
@ -29,8 +29,6 @@
|
||||||
- if note.system
|
- if note.system
|
||||||
%span.system-note-message
|
%span.system-note-message
|
||||||
= note.redacted_note_html
|
= note.redacted_note_html
|
||||||
.original-note-content.hidden
|
|
||||||
= note.note
|
|
||||||
%a{ href: "##{dom_id(note)}" }
|
%a{ href: "##{dom_id(note)}" }
|
||||||
= time_ago_with_tooltip(note.created_at, placement: 'bottom', html_class: 'note-created-ago')
|
= time_ago_with_tooltip(note.created_at, placement: 'bottom', html_class: 'note-created-ago')
|
||||||
- unless note.system?
|
- unless note.system?
|
||||||
|
|
|
@ -31,12 +31,12 @@ feature 'Issue notes polling', :feature, :js do
|
||||||
|
|
||||||
it 'has .original-note-content to compare against' do
|
it 'has .original-note-content to compare against' do
|
||||||
expect(page).to have_selector("#note_#{existing_note.id}", text: note_text)
|
expect(page).to have_selector("#note_#{existing_note.id}", text: note_text)
|
||||||
expect(page).to have_selector("#note_#{existing_note.id} .original-note-content", visible: false)
|
expect(page).to have_selector("#note_#{existing_note.id} .original-note-content", count: 1, visible: false)
|
||||||
|
|
||||||
update_note(existing_note, updated_text)
|
update_note(existing_note, updated_text)
|
||||||
|
|
||||||
expect(page).to have_selector("#note_#{existing_note.id}", text: updated_text)
|
expect(page).to have_selector("#note_#{existing_note.id}", text: updated_text)
|
||||||
expect(page).to have_selector("#note_#{existing_note.id} .original-note-content", visible: false)
|
expect(page).to have_selector("#note_#{existing_note.id} .original-note-content", count: 1, visible: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'displays the updated content' do
|
it 'displays the updated content' do
|
||||||
|
@ -98,12 +98,28 @@ feature 'Issue notes polling', :feature, :js do
|
||||||
|
|
||||||
it 'has .original-note-content to compare against' do
|
it 'has .original-note-content to compare against' do
|
||||||
expect(page).to have_selector("#note_#{existing_note.id}", text: note_text)
|
expect(page).to have_selector("#note_#{existing_note.id}", text: note_text)
|
||||||
expect(page).to have_selector("#note_#{existing_note.id} .original-note-content", visible: false)
|
expect(page).to have_selector("#note_#{existing_note.id} .original-note-content", count: 1, visible: false)
|
||||||
|
|
||||||
update_note(existing_note, updated_text)
|
update_note(existing_note, updated_text)
|
||||||
|
|
||||||
expect(page).to have_selector("#note_#{existing_note.id}", text: updated_text)
|
expect(page).to have_selector("#note_#{existing_note.id}", text: updated_text)
|
||||||
expect(page).to have_selector("#note_#{existing_note.id} .original-note-content", visible: false)
|
expect(page).to have_selector("#note_#{existing_note.id} .original-note-content", count: 1, visible: false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'system notes' do
|
||||||
|
let(:user) { create(:user) }
|
||||||
|
let(:note_text) { "Some system note" }
|
||||||
|
let!(:system_note) { create(:system_note, noteable: issue, project: project, author: user, note: note_text) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
login_as(user)
|
||||||
|
visit namespace_project_issue_path(project.namespace, project, issue)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'has .original-note-content to compare against' do
|
||||||
|
expect(page).to have_selector("#note_#{system_note.id}", text: note_text)
|
||||||
|
expect(page).to have_selector("#note_#{system_note.id} .original-note-content", count: 1, visible: false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -139,6 +139,7 @@ import '~/notes';
|
||||||
]);
|
]);
|
||||||
|
|
||||||
notes = jasmine.createSpyObj('notes', [
|
notes = jasmine.createSpyObj('notes', [
|
||||||
|
'setupNewNote',
|
||||||
'refresh',
|
'refresh',
|
||||||
'collapseLongCommitList',
|
'collapseLongCommitList',
|
||||||
'updateNotesCount',
|
'updateNotesCount',
|
||||||
|
|
Loading…
Reference in a new issue