diff --git a/app/controllers/moderation/comments_controller.rb b/app/controllers/moderation/comments_controller.rb
index c250fc460..781f6b1e7 100644
--- a/app/controllers/moderation/comments_controller.rb
+++ b/app/controllers/moderation/comments_controller.rb
@@ -1,8 +1,31 @@
class Moderation::CommentsController < Moderation::BaseController
+ before_filter :load_comments, only: :index
+
+ load_and_authorize_resource
+
+ def index
+ @comments = @comments.page(params[:page])
+ end
+
def hide
- @comment = Comment.find(params[:id])
@comment.hide
end
-end
\ No newline at end of file
+ def hide_in_moderation_screen
+ @comment.hide
+ redirect_to action: :index
+ end
+
+ def mark_as_reviewed
+ @comment.mark_as_reviewed
+ redirect_to action: :index
+ end
+
+ private
+
+ def load_comments
+ @comments = Comment.accessible_by(current_ability, :hide).where('inappropiate_flags_count > 0').includes(:commentable)
+ end
+
+end
diff --git a/app/views/moderation/comments/index.html.erb b/app/views/moderation/comments/index.html.erb
new file mode 100644
index 000000000..f89e58cc1
--- /dev/null
+++ b/app/views/moderation/comments/index.html.erb
@@ -0,0 +1,36 @@
+
<%= t('moderation.comments.index.title') %>
+
+<%= page_entries_info @comments %>
+
+
+
+ | <%= t('moderation.comments.index.flags') %> |
+ <%= t('moderation.comments.index.debate') %> |
+ <%= t('moderation.comments.index.comment') %> |
+ <%= t('moderation.comments.index.updated_at') %> |
+
+ <% @comments.each do |comment| %>
+
+ <% end %>
+
+
+<%= paginate @comments %>
+
diff --git a/spec/features/moderation/comments_spec.rb b/spec/features/moderation/comments_spec.rb
index 099946d82..ef3970b20 100644
--- a/spec/features/moderation/comments_spec.rb
+++ b/spec/features/moderation/comments_spec.rb
@@ -2,61 +2,64 @@ require 'rails_helper'
feature 'Moderate Comments' do
- scenario 'Hide', :js do
- citizen = create(:user)
- moderator = create(:moderator)
+ feature 'Hiding Comments' do
- debate = create(:debate)
- comment = create(:comment, commentable: debate, body: 'SPAM')
+ scenario 'Hide', :js do
+ citizen = create(:user)
+ moderator = create(:moderator)
- login_as(moderator.user)
- visit debate_path(debate)
+ debate = create(:debate)
+ comment = create(:comment, commentable: debate, body: 'SPAM')
- within("#comment_#{comment.id}") do
- click_link 'Hide'
- expect(page).to have_css('.comment .faded')
+ login_as(moderator.user)
+ visit debate_path(debate)
+
+ within("#comment_#{comment.id}") do
+ click_link 'Hide'
+ expect(page).to have_css('.comment .faded')
+ end
+
+ login_as(citizen)
+ visit debate_path(debate)
+
+ expect(page).to have_css('.comment', count: 1)
+ expect(page).to have_content('This comment has been deleted')
+ expect(page).to_not have_content('SPAM')
end
- login_as(citizen)
- visit debate_path(debate)
+ scenario 'Children visible', :js do
+ citizen = create(:user)
+ moderator = create(:moderator)
- expect(page).to have_css('.comment', count: 1)
- expect(page).to have_content('This comment has been deleted')
- expect(page).to_not have_content('SPAM')
- end
+ debate = create(:debate)
+ comment = create(:comment, commentable: debate, body: 'SPAM')
+ create(:comment, commentable: debate, body: 'Acceptable reply', parent_id: comment.id)
- scenario 'Children visible', :js do
- citizen = create(:user)
- moderator = create(:moderator)
+ login_as(moderator.user)
+ visit debate_path(debate)
- debate = create(:debate)
- comment = create(:comment, commentable: debate, body: 'SPAM')
- reply = create(:comment, commentable: debate, body: 'Acceptable reply', parent_id: comment.id)
+ within("#comment_#{comment.id}") do
+ first(:link, "Hide").click
+ expect(page).to have_css('.comment .faded')
+ end
- login_as(moderator.user)
- visit debate_path(debate)
+ login_as(citizen)
+ visit debate_path(debate)
- within("#comment_#{comment.id}") do
- first(:link, "Hide").click
- expect(page).to have_css('.comment .faded')
+ expect(page).to have_css('.comment', count: 2)
+ expect(page).to have_content('This comment has been deleted')
+ expect(page).to_not have_content('SPAM')
+
+ expect(page).to have_content('Acceptable reply')
end
-
- login_as(citizen)
- visit debate_path(debate)
-
- expect(page).to have_css('.comment', count: 2)
- expect(page).to have_content('This comment has been deleted')
- expect(page).to_not have_content('SPAM')
-
- expect(page).to have_content('Acceptable reply')
end
- scenario 'Moderator actions' do
+ scenario 'Moderator actions in the comment' do
citizen = create(:user)
moderator = create(:moderator)
debate = create(:debate)
- comment = create(:comment, commentable: debate)
+ create(:comment, commentable: debate)
login_as(moderator.user)
visit debate_path(debate)
@@ -69,4 +72,54 @@ feature 'Moderate Comments' do
expect(page).to_not have_css("#moderator-comment-actions")
end
-end
\ No newline at end of file
+ feature '/moderation/ menu' do
+
+ background do
+ moderator = create(:moderator)
+ login_as(moderator.user)
+
+ user = create(:user)
+ debate = create(:debate, title: 'Democracy')
+ @comment = create(:comment, commentable: debate, body: 'spammy spam')
+ InappropiateFlag.flag!(user, @comment)
+
+ visit moderation_comments_path
+ end
+
+ scenario 'Flagged comment shows the right params' do
+ within("#comment_#{@comment.id}") do
+ expect(page).to have_link('Democracy')
+ expect(page).to have_content('spammy spam')
+ expect(page).to have_content('1')
+ expect(page).to have_link('Hide')
+ expect(page).to have_content('Mark as reviewed')
+ end
+ end
+
+ scenario 'Hiding a comment' do
+ within("#comment_#{@comment.id}") do
+ click_link('Hide')
+ end
+
+ expect(current_path).to eq(moderation_comments_path)
+ expect(page).to_not have_selector("#comment_#{@comment.id}")
+
+ expect(@comment.reload).to be_hidden
+ end
+
+ scenario 'Marking a comment as reviewed' do
+ within("#comment_#{@comment.id}") do
+ click_link('Mark as reviewed')
+ end
+
+ expect(current_path).to eq(moderation_comments_path)
+
+ within("#comment_#{@comment.id}") do
+ expect(page).to have_content('Reviewed')
+ end
+
+ expect(@comment.reload).to be_reviewed
+ end
+ end
+
+end