diff --git a/app/controllers/admin/comments_controller.rb b/app/controllers/admin/comments_controller.rb index 49dbc2889..40f9b31dc 100644 --- a/app/controllers/admin/comments_controller.rb +++ b/app/controllers/admin/comments_controller.rb @@ -1,13 +1,35 @@ class Admin::CommentsController < Admin::BaseController + before_filter :set_valid_filters, only: :index + before_filter :parse_filter, only: :index + + before_filter :load_comment, only: [:confirm_hide, :restore] def index - @comments = Comment.only_hidden.page(params[:page]) + @comments = Comment.only_hidden.send(@filter).page(params[:page]) + end + + def confirm_hide + @comment.confirm_hide + redirect_to request.query_parameters.merge(action: :index) end def restore - @comment = Comment.with_hidden.find(params[:id]) @comment.restore - redirect_to admin_comments_path, notice: t('admin.comments.restore.success') + redirect_to request.query_parameters.merge(action: :index) end -end \ No newline at end of file + private + def load_comment + @comment = Comment.with_hidden.find(params[:id]) + end + + def set_valid_filters + @valid_filters = %w{all with_confirmed_hide} + end + + def parse_filter + @filter = params[:filter] + @filter = 'all' unless @valid_filters.include?(@filter) + end + +end diff --git a/app/models/comment.rb b/app/models/comment.rb index 58888719f..fa5f72164 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -1,7 +1,7 @@ class Comment < ActiveRecord::Base - include ActsAsParanoidAliases acts_as_nested_set scope: [:commentable_id, :commentable_type], counter_cache: :children_count acts_as_paranoid column: :hidden_at + include ActsAsParanoidAliases acts_as_votable attr_accessor :as_moderator, :as_administrator diff --git a/app/views/admin/comments/index.html.erb b/app/views/admin/comments/index.html.erb index 87b25680d..941e1e9ed 100644 --- a/app/views/admin/comments/index.html.erb +++ b/app/views/admin/comments/index.html.erb @@ -1,13 +1,17 @@

<%= t("admin.comments.index.title") %>

- -

<%= page_entries_info @comments %>

@@ -17,17 +21,19 @@
<%= comment.body %> - - <%= link_to t("admin.comments.index.show_debate"), "#" %> - + <%= link_to comment.commentable.title, comment.commentable %>
- - <%= link_to t("admin.actions.archive"), "#", class: "button radius tiny warning" %> - - <%= link_to t("admin.actions.restore"), restore_admin_comment_path(comment), - method: :put, data: { confirm: t("admin.actions.confirm") }, - class: "button radius tiny success" %> + <%= link_to t("admin.actions.restore"), + restore_admin_comment_path(comment, request.query_parameters), + method: :put, + data: { confirm: t("admin.actions.confirm") }, + class: "button radius tiny success right" %> + + <%= link_to t("admin.actions.confirm_hide"), + confirm_hide_admin_comment_path(comment, request.query_parameters), + method: :put, + class: "button radius tiny warning right" %>
diff --git a/spec/features/admin/comments_spec.rb b/spec/features/admin/comments_spec.rb index 6e4a0d53d..92d010cac 100644 --- a/spec/features/admin/comments_spec.rb +++ b/spec/features/admin/comments_spec.rb @@ -2,27 +2,71 @@ require 'rails_helper' feature 'Admin comments' do - scenario 'Restore', :js do - citizen = create(:user) + background do admin = create(:administrator) - - debate = create(:debate) - comment = create(:comment, :hidden, commentable: debate, body: 'Not really SPAM') - login_as(admin.user) - visit admin_comments_path - - within("#comment_#{comment.id}") do - first(:link, "Restore").click - end - - expect(page).to have_content 'The comment has been restored' - - login_as(citizen) - visit debate_path(debate) - - expect(page).to have_css('.comment', count: 1) - expect(page).to have_content('Not really SPAM') end -end \ No newline at end of file + scenario 'Restore', :js do + comment = create(:comment, :hidden, body: 'Not really SPAM') + visit admin_comments_path + + click_link 'Restore' + + expect(page).to_not have_content(comment.body) + + expect(comment.reload).to_not be_hidden + end + + scenario 'Confirm hide' do + comment = create(:comment, :hidden, body: 'SPAM') + visit admin_comments_path + + click_link 'Confirm' + + expect(page).to have_content(comment.body) + expect(page).to have_content('Confirmed') + + expect(comment.reload).to be_confirmed_hide + end + + scenario "Current filter is properly highlighted" do + visit admin_comments_path + expect(page).to_not have_link('All') + expect(page).to have_link('Confirmed') + + visit admin_comments_path(filter: 'all') + expect(page).to_not have_link('All') + expect(page).to have_link('Confirmed') + + visit admin_comments_path(filter: 'with_confirmed_hide') + expect(page).to have_link('All') + expect(page).to_not have_link('Confirmed') + end + + scenario "Filtering comments" do + create(:comment, :hidden, body: "Unconfirmed comment") + create(:comment, :hidden, :with_confirmed_hide, body: "Confirmed comment") + + visit admin_comments_path(filter: 'all') + expect(page).to have_content('Unconfirmed comment') + expect(page).to have_content('Confirmed comment') + + visit admin_comments_path(filter: 'with_confirmed_hide') + expect(page).to_not have_content('Unconfirmed comment') + expect(page).to have_content('Confirmed comment') + end + + scenario "Action links remember the pagination setting and the filter" do + per_page = Kaminari.config.default_per_page + (per_page + 2).times { create(:comment, :hidden, :with_confirmed_hide) } + + visit admin_comments_path(filter: 'with_confirmed_hide', page: 2) + + click_on('Restore', match: :first, exact: true) + + expect(current_url).to include('filter=with_confirmed_hide') + expect(current_url).to include('page=2') + end + +end