From 4cc175f8685b8dc3a223fa8418cbcc63e0d199dc Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Mon, 12 Jun 2017 16:45:38 +0000 Subject: Update _more_actions_dropdown.html.haml to only show 'Edit comment' when user is allowed to edit the note and only show 'Report as abuse' when the note doesn't belong to current_user --- app/views/projects/notes/_more_actions_dropdown.html.haml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/app/views/projects/notes/_more_actions_dropdown.html.haml b/app/views/projects/notes/_more_actions_dropdown.html.haml index e0d45054854..0998f6843d3 100644 --- a/app/views/projects/notes/_more_actions_dropdown.html.haml +++ b/app/views/projects/notes/_more_actions_dropdown.html.haml @@ -2,12 +2,14 @@ = button_tag title: 'More actions', class: 'note-action-button more-actions-toggle has-tooltip btn btn-transparent', data: { toggle: 'dropdown', container: 'body' } do = icon('ellipsis-v', class: 'icon') %ul.dropdown-menu.more-actions-dropdown.dropdown-open-left - %li - = button_tag 'Edit comment', class: 'js-note-edit btn btn-transparent' - %li.divider + - if note_editable %li - = link_to new_abuse_report_path(user_id: note.author.id, ref_url: noteable_note_url(note)) do - Report as abuse + = button_tag 'Edit comment', class: 'js-note-edit btn btn-transparent' + %li.divider + - if current_user != note.author + %li + = link_to new_abuse_report_path(user_id: note.author.id, ref_url: noteable_note_url(note)) do + Report as abuse - if note_editable %li = link_to note_url(note), method: :delete, data: { confirm: 'Are you sure you want to delete this comment?' }, remote: true, class: 'js-note-delete' do -- cgit v1.2.1 From 0feb16682481c5470e16bb04f1abc429b337f135 Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Mon, 12 Jun 2017 18:10:05 +0000 Subject: Correct 'report as abuse' nesting in _more_actions_dropdown.html.haml --- app/views/projects/notes/_more_actions_dropdown.html.haml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/views/projects/notes/_more_actions_dropdown.html.haml b/app/views/projects/notes/_more_actions_dropdown.html.haml index 0998f6843d3..2851071d2e3 100644 --- a/app/views/projects/notes/_more_actions_dropdown.html.haml +++ b/app/views/projects/notes/_more_actions_dropdown.html.haml @@ -6,10 +6,10 @@ %li = button_tag 'Edit comment', class: 'js-note-edit btn btn-transparent' %li.divider - - if current_user != note.author - %li - = link_to new_abuse_report_path(user_id: note.author.id, ref_url: noteable_note_url(note)) do - Report as abuse + - if current_user != note.author + %li + = link_to new_abuse_report_path(user_id: note.author.id, ref_url: noteable_note_url(note)) do + Report as abuse - if note_editable %li = link_to note_url(note), method: :delete, data: { confirm: 'Are you sure you want to delete this comment?' }, remote: true, class: 'js-note-delete' do -- cgit v1.2.1 From 20dcf5f83f9ac2583a2d2607fb8c8761906ec268 Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Wed, 14 Jun 2017 16:19:21 +0100 Subject: [ci skip] Correct rendering more actions dropdown when there are no actions and correct the more actions dropdown divider conditional --- app/views/projects/notes/_more_actions_dropdown.html.haml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/views/projects/notes/_more_actions_dropdown.html.haml b/app/views/projects/notes/_more_actions_dropdown.html.haml index 2851071d2e3..a14e4a61d56 100644 --- a/app/views/projects/notes/_more_actions_dropdown.html.haml +++ b/app/views/projects/notes/_more_actions_dropdown.html.haml @@ -1,3 +1,7 @@ +- is_current_user = current_user == note.author + +- return unless note_editable || !is_current_user + .dropdown.more-actions = button_tag title: 'More actions', class: 'note-action-button more-actions-toggle has-tooltip btn btn-transparent', data: { toggle: 'dropdown', container: 'body' } do = icon('ellipsis-v', class: 'icon') @@ -5,8 +9,8 @@ - if note_editable %li = button_tag 'Edit comment', class: 'js-note-edit btn btn-transparent' - %li.divider - - if current_user != note.author + %li.divider + - unless is_current_user %li = link_to new_abuse_report_path(user_id: note.author.id, ref_url: noteable_note_url(note)) do Report as abuse -- cgit v1.2.1 From 2ef19a24a6dcba2bc3b3d5d66658d27b4ef10e43 Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Wed, 14 Jun 2017 17:12:22 +0100 Subject: Add view spec for more_actions_dropdown render branches --- .../notes/_more_actions_dropdown.html.haml | 35 ++++++----- .../notes/_more_actions_dropdown.html.haml_spec.rb | 70 ++++++++++++++++++++++ 2 files changed, 87 insertions(+), 18 deletions(-) create mode 100644 spec/views/projects/notes/_more_actions_dropdown.html.haml_spec.rb diff --git a/app/views/projects/notes/_more_actions_dropdown.html.haml b/app/views/projects/notes/_more_actions_dropdown.html.haml index a14e4a61d56..75a4687e1e3 100644 --- a/app/views/projects/notes/_more_actions_dropdown.html.haml +++ b/app/views/projects/notes/_more_actions_dropdown.html.haml @@ -1,20 +1,19 @@ - is_current_user = current_user == note.author -- return unless note_editable || !is_current_user - -.dropdown.more-actions - = button_tag title: 'More actions', class: 'note-action-button more-actions-toggle has-tooltip btn btn-transparent', data: { toggle: 'dropdown', container: 'body' } do - = icon('ellipsis-v', class: 'icon') - %ul.dropdown-menu.more-actions-dropdown.dropdown-open-left - - if note_editable - %li - = button_tag 'Edit comment', class: 'js-note-edit btn btn-transparent' - %li.divider - - unless is_current_user - %li - = link_to new_abuse_report_path(user_id: note.author.id, ref_url: noteable_note_url(note)) do - Report as abuse - - if note_editable - %li - = link_to note_url(note), method: :delete, data: { confirm: 'Are you sure you want to delete this comment?' }, remote: true, class: 'js-note-delete' do - %span.text-danger Delete comment +- if note_editable || !is_current_user + .dropdown.more-actions + = button_tag title: 'More actions', class: 'note-action-button more-actions-toggle has-tooltip btn btn-transparent', data: { toggle: 'dropdown', container: 'body' } do + = icon('ellipsis-v', class: 'icon') + %ul.dropdown-menu.more-actions-dropdown.dropdown-open-left + - if note_editable + %li + = button_tag 'Edit comment', class: 'js-note-edit btn btn-transparent' + %li.divider + - unless is_current_user + %li + = link_to new_abuse_report_path(user_id: note.author.id, ref_url: noteable_note_url(note)) do + Report as abuse + - if note_editable + %li + = link_to note_url(note), method: :delete, data: { confirm: 'Are you sure you want to delete this comment?' }, remote: true, class: 'js-note-delete' do + %span.text-danger Delete comment diff --git a/spec/views/projects/notes/_more_actions_dropdown.html.haml_spec.rb b/spec/views/projects/notes/_more_actions_dropdown.html.haml_spec.rb new file mode 100644 index 00000000000..7a17cf58231 --- /dev/null +++ b/spec/views/projects/notes/_more_actions_dropdown.html.haml_spec.rb @@ -0,0 +1,70 @@ +require 'spec_helper' + +describe 'projects/notes/_more_actions_dropdown', :view do + let(:author_user) { create(:user) } + let(:not_author_user) { create(:user) } + + let(:project) { create(:empty_project) } + let(:issue) { create(:issue, project: project) } + let!(:note) { create(:note_on_issue, author: author_user, noteable: issue, project: project) } + + before do + allow(view).to receive(:note).and_return(note) + assign(:project, project) + end + + context 'not editable and not current users comment' do + before do + allow(view).to receive(:note_editable).and_return(false) + allow(view).to receive(:current_user).and_return(not_author_user) + + render + end + + it 'shows Report as abuse button' do + expect(rendered).to have_link('Report as abuse') + end + end + + context 'not editable and current users comment' do + before do + allow(view).to receive(:note_editable).and_return(false) + allow(view).to receive(:current_user).and_return(author_user) + + render + end + + it 'does not show the More actions button' do + expect(rendered).not_to have_selector('.dropdown.more-actions') + end + end + + context 'editable and not current users comment' do + before do + allow(view).to receive(:note_editable).and_return(true) + allow(view).to receive(:current_user).and_return(not_author_user) + + render + end + + it 'shows Report as abuse, Edit and Delete buttons' do + expect(rendered).to have_link('Report as abuse') + expect(rendered).to have_button('Edit comment') + expect(rendered).to have_link('Delete comment') + end + end + + context 'editable and current users comment' do + before do + allow(view).to receive(:note_editable).and_return(true) + allow(view).to receive(:current_user).and_return(author_user) + + render + end + + it 'shows Edit and Delete buttons' do + expect(rendered).to have_button('Edit comment') + expect(rendered).to have_link('Delete comment') + end + end +end -- cgit v1.2.1 From 0bfe78d71628af28d3d7d8f743afcf6ed2447a9a Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Thu, 15 Jun 2017 12:44:47 +0100 Subject: Pass more_actions_dropdown vie spec locals to render call instead of stubbing them --- .../notes/_more_actions_dropdown.html.haml_spec.rb | 59 ++++++---------------- 1 file changed, 15 insertions(+), 44 deletions(-) diff --git a/spec/views/projects/notes/_more_actions_dropdown.html.haml_spec.rb b/spec/views/projects/notes/_more_actions_dropdown.html.haml_spec.rb index 7a17cf58231..e56c0f6be03 100644 --- a/spec/views/projects/notes/_more_actions_dropdown.html.haml_spec.rb +++ b/spec/views/projects/notes/_more_actions_dropdown.html.haml_spec.rb @@ -9,62 +9,33 @@ describe 'projects/notes/_more_actions_dropdown', :view do let!(:note) { create(:note_on_issue, author: author_user, noteable: issue, project: project) } before do - allow(view).to receive(:note).and_return(note) assign(:project, project) end - context 'not editable and not current users comment' do - before do - allow(view).to receive(:note_editable).and_return(false) - allow(view).to receive(:current_user).and_return(not_author_user) + it 'shows Report as abuse button if not editable and not current users comment' do + render 'projects/notes/more_actions_dropdown', current_user: not_author_user, note_editable: false, note: note - render - end - - it 'shows Report as abuse button' do - expect(rendered).to have_link('Report as abuse') - end + expect(rendered).to have_link('Report as abuse') end - context 'not editable and current users comment' do - before do - allow(view).to receive(:note_editable).and_return(false) - allow(view).to receive(:current_user).and_return(author_user) - - render - end + it 'does not show the More actions button if not editable and current users comment' do + render 'projects/notes/more_actions_dropdown', current_user: author_user, note_editable: false, note: note - it 'does not show the More actions button' do - expect(rendered).not_to have_selector('.dropdown.more-actions') - end + expect(rendered).not_to have_selector('.dropdown.more-actions') end - context 'editable and not current users comment' do - before do - allow(view).to receive(:note_editable).and_return(true) - allow(view).to receive(:current_user).and_return(not_author_user) + it 'shows Report as abuse, Edit and Delete buttons if editable and not current users comment' do + render 'projects/notes/more_actions_dropdown', current_user: not_author_user, note_editable: true, note: note - render - end - - it 'shows Report as abuse, Edit and Delete buttons' do - expect(rendered).to have_link('Report as abuse') - expect(rendered).to have_button('Edit comment') - expect(rendered).to have_link('Delete comment') - end + expect(rendered).to have_link('Report as abuse') + expect(rendered).to have_button('Edit comment') + expect(rendered).to have_link('Delete comment') end - context 'editable and current users comment' do - before do - allow(view).to receive(:note_editable).and_return(true) - allow(view).to receive(:current_user).and_return(author_user) - - render - end + it 'shows Edit and Delete buttons if editable and current users comment' do + render 'projects/notes/more_actions_dropdown', current_user: author_user, note_editable: true, note: note - it 'shows Edit and Delete buttons' do - expect(rendered).to have_button('Edit comment') - expect(rendered).to have_link('Delete comment') - end + expect(rendered).to have_button('Edit comment') + expect(rendered).to have_link('Delete comment') end end -- cgit v1.2.1 From f50a8065313b9cdc414aff157fcbfbdbfccd5a70 Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Fri, 16 Jun 2017 13:57:03 +0100 Subject: Fixed reportable_note_shared_example for the reportable_note/snippets_spec --- spec/features/reportable_note/snippets_spec.rb | 5 ++- .../features/reportable_note_shared_examples.rb | 47 ++++++++++++++++------ 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/spec/features/reportable_note/snippets_spec.rb b/spec/features/reportable_note/snippets_spec.rb index 3f1e0cf9097..94cadaa8feb 100644 --- a/spec/features/reportable_note/snippets_spec.rb +++ b/spec/features/reportable_note/snippets_spec.rb @@ -22,12 +22,13 @@ describe 'Reportable note on snippets', :feature, :js do describe 'on personal snippet' do let(:snippet) { create(:personal_snippet, :public, author: user) } - let!(:note) { create(:note_on_personal_snippet, noteable: snippet, author: user) } + let!(:note) { create(:note_on_personal_snippet, noteable: snippet) } + let!(:owners_note) { create(:note_on_personal_snippet, noteable: snippet, author: user) } before do visit snippet_path(snippet) end - it_behaves_like 'reportable note' + it_behaves_like 'reportable note', true end end diff --git a/spec/support/features/reportable_note_shared_examples.rb b/spec/support/features/reportable_note_shared_examples.rb index 0d80c95e826..560935704f7 100644 --- a/spec/support/features/reportable_note_shared_examples.rb +++ b/spec/support/features/reportable_note_shared_examples.rb @@ -1,6 +1,6 @@ require 'spec_helper' -shared_examples 'reportable note' do +shared_examples 'reportable note' do |is_a_personal_snippet| include NotesHelper let(:comment) { find("##{ActionView::RecordIdentifier.dom_id(note)}") } @@ -11,26 +11,47 @@ shared_examples 'reportable note' do expect(comment).to have_selector(more_actions_selector) end - it 'dropdown has Edit, Report and Delete links' do - dropdown = comment.find(more_actions_selector) - - dropdown.click - dropdown.find('.dropdown-menu li', match: :first) - - expect(dropdown).to have_button('Edit comment') - expect(dropdown).to have_link('Report as abuse', href: abuse_report_path) - expect(dropdown).to have_link('Delete comment', href: note_url(note, project)) + if is_a_personal_snippet + it 'dropdown has Report link on other users comment' do + dropdown = comment.find(more_actions_selector) + open_dropdown(dropdown) + + expect(dropdown).to have_link('Report as abuse', href: abuse_report_path) + end + + it 'dropdown has Edit and Delete links on the owners comment' do + find('#notes-list .note', match: :first) + other_comment = all('#notes-list .note').last + + dropdown = other_comment.find(more_actions_selector) + open_dropdown(dropdown) + + expect(dropdown).to have_button('Edit comment') + expect(dropdown).to have_link('Delete comment', href: note_url(owners_note, project)) + end + else + it 'dropdown has Edit, Report and Delete links' do + dropdown = comment.find(more_actions_selector) + open_dropdown(dropdown) + + expect(dropdown).to have_button('Edit comment') + expect(dropdown).to have_link('Report as abuse', href: abuse_report_path) + expect(dropdown).to have_link('Delete comment', href: note_url(note, project)) + end end it 'Report button links to a report page' do dropdown = comment.find(more_actions_selector) - - dropdown.click - dropdown.find('.dropdown-menu li', match: :first) + open_dropdown(dropdown) dropdown.click_link('Report as abuse') expect(find('#user_name')['value']).to match(note.author.username) expect(find('#abuse_report_message')['value']).to match(noteable_note_url(note)) end + + def open_dropdown(dropdown) + dropdown.click + dropdown.find('.dropdown-menu li', match: :first) + end end -- cgit v1.2.1 From 1f9fb9e45738995ab8935d2e71ca7df73c3fe23c Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Tue, 20 Jun 2017 09:03:04 +0100 Subject: Remove PersonalSnippet case for reportable_note specs --- spec/features/reportable_note/snippets_spec.rb | 12 -------- .../features/reportable_note_shared_examples.rb | 36 +++++----------------- 2 files changed, 8 insertions(+), 40 deletions(-) diff --git a/spec/features/reportable_note/snippets_spec.rb b/spec/features/reportable_note/snippets_spec.rb index 94cadaa8feb..f761371323f 100644 --- a/spec/features/reportable_note/snippets_spec.rb +++ b/spec/features/reportable_note/snippets_spec.rb @@ -19,16 +19,4 @@ describe 'Reportable note on snippets', :feature, :js do it_behaves_like 'reportable note' end - - describe 'on personal snippet' do - let(:snippet) { create(:personal_snippet, :public, author: user) } - let!(:note) { create(:note_on_personal_snippet, noteable: snippet) } - let!(:owners_note) { create(:note_on_personal_snippet, noteable: snippet, author: user) } - - before do - visit snippet_path(snippet) - end - - it_behaves_like 'reportable note', true - end end diff --git a/spec/support/features/reportable_note_shared_examples.rb b/spec/support/features/reportable_note_shared_examples.rb index 560935704f7..27e079c01dd 100644 --- a/spec/support/features/reportable_note_shared_examples.rb +++ b/spec/support/features/reportable_note_shared_examples.rb @@ -1,6 +1,6 @@ require 'spec_helper' -shared_examples 'reportable note' do |is_a_personal_snippet| +shared_examples 'reportable note' do include NotesHelper let(:comment) { find("##{ActionView::RecordIdentifier.dom_id(note)}") } @@ -11,33 +11,13 @@ shared_examples 'reportable note' do |is_a_personal_snippet| expect(comment).to have_selector(more_actions_selector) end - if is_a_personal_snippet - it 'dropdown has Report link on other users comment' do - dropdown = comment.find(more_actions_selector) - open_dropdown(dropdown) - - expect(dropdown).to have_link('Report as abuse', href: abuse_report_path) - end - - it 'dropdown has Edit and Delete links on the owners comment' do - find('#notes-list .note', match: :first) - other_comment = all('#notes-list .note').last - - dropdown = other_comment.find(more_actions_selector) - open_dropdown(dropdown) - - expect(dropdown).to have_button('Edit comment') - expect(dropdown).to have_link('Delete comment', href: note_url(owners_note, project)) - end - else - it 'dropdown has Edit, Report and Delete links' do - dropdown = comment.find(more_actions_selector) - open_dropdown(dropdown) - - expect(dropdown).to have_button('Edit comment') - expect(dropdown).to have_link('Report as abuse', href: abuse_report_path) - expect(dropdown).to have_link('Delete comment', href: note_url(note, project)) - end + it 'dropdown has Edit, Report and Delete links' do + dropdown = comment.find(more_actions_selector) + open_dropdown(dropdown) + + expect(dropdown).to have_button('Edit comment') + expect(dropdown).to have_link('Report as abuse', href: abuse_report_path) + expect(dropdown).to have_link('Delete comment', href: note_url(note, project)) end it 'Report button links to a report page' do -- cgit v1.2.1