From f6743cc444b972f62c3c3a8911ab2f93ba0db77e Mon Sep 17 00:00:00 2001 From: Eric Eastwood Date: Fri, 19 May 2017 01:37:53 -0500 Subject: Fix system note comparison and standardize note setup Fix https://gitlab.com/gitlab-org/gitlab-ce/issues/32551 --- app/assets/javascripts/notes.js | 22 +++++++++++----------- app/views/shared/notes/_note.html.haml | 2 -- spec/features/issues/note_polling_spec.rb | 24 ++++++++++++++++++++---- 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/app/assets/javascripts/notes.js b/app/assets/javascripts/notes.js index 62a46733cc4..79293fe2d4a 100644 --- a/app/assets/javascripts/notes.js +++ b/app/assets/javascripts/notes.js @@ -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. @@ -312,10 +319,7 @@ const normalizeNewlines = function(str) { const $newNote = Notes.animateAppendNote(noteEntity.html, $notesList); - // Update datetime format on the recent note - gl.utils.localTimeAgo($newNote.find('.js-timeago'), false); - this.collapseLongCommitList(); - this.taskList.init(); + this.setupNewNote($newNote); this.refresh(); return this.updateNotesCount(1); } @@ -341,9 +345,7 @@ const normalizeNewlines = function(str) { } else { const $updatedNote = Notes.animateUpdateNote(noteEntity.html, $note); - - // Update datetime format on the recent note - gl.utils.localTimeAgo($updatedNote.find('.js-timeago'), false); + this.setupNewNote($updatedNote); } } }; @@ -665,10 +667,8 @@ const normalizeNewlines = function(str) { if (this.updatedNotesTrackingMap[noteId]) { const $newNote = $(this.updatedNotesTrackingMap[noteId].html); $note.replaceWith($newNote); + this.setupNewNote($newNote); this.updatedNotesTrackingMap[noteId] = null; - - // Update datetime format on the recent note - gl.utils.localTimeAgo($newNote.find('.js-timeago'), false); } else { $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 const sanitizedNoteEntityText = normalizeNewlines(noteEntity.note.trim()); const currentNoteText = normalizeNewlines( - $note.find('.original-note-content').text().trim() + $note.find('.original-note-content').first().text().trim() ); return sanitizedNoteEntityText !== currentNoteText; }; diff --git a/app/views/shared/notes/_note.html.haml b/app/views/shared/notes/_note.html.haml index 53d0e837aa0..a7bf610b9c7 100644 --- a/app/views/shared/notes/_note.html.haml +++ b/app/views/shared/notes/_note.html.haml @@ -29,8 +29,6 @@ - if note.system %span.system-note-message = note.redacted_note_html - .original-note-content.hidden - = note.note %a{ href: "##{dom_id(note)}" } = time_ago_with_tooltip(note.created_at, placement: 'bottom', html_class: 'note-created-ago') - unless note.system? diff --git a/spec/features/issues/note_polling_spec.rb b/spec/features/issues/note_polling_spec.rb index da81fa4e367..80f57906506 100644 --- a/spec/features/issues/note_polling_spec.rb +++ b/spec/features/issues/note_polling_spec.rb @@ -31,12 +31,12 @@ feature 'Issue notes polling', :feature, :js 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} .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) 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 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 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) 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 -- cgit v1.2.1