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") %>
-
- <%= t("admin.comments.index.filter") %>:
- - <%= t("admin.comments.filters.all") %>
- - <%= t("admin.comments.filters.pending") %>
- - <%= t("admin.comments.filters.archived") %>
+
+ <% @valid_filters.each do |filter| %>
+ <% if @filter == filter %>
+ - <%= t("admin.comments.index.filters.#{filter}") %>
+ <% else %>
+ - <%= link_to t("admin.comments.index.filters.#{filter}"),
+ admin_comments_path(filter: filter) %>
+ <% end %>
+ <% end %>
-
<%= 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