From d9a31b7158b094baf339a454d3782317c1aa0053 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Mon, 17 Aug 2015 13:39:58 +0200 Subject: [PATCH] adds specs for moderation [#136] --- spec/factories.rb | 8 +++ spec/features/admin/comments_spec.rb | 28 +++++++++ spec/features/admin/debates_spec.rb | 23 ++++++++ spec/features/comments_spec.rb | 2 +- spec/features/moderation/comments_spec.rb | 72 +++++++++++++++++++++++ spec/features/moderation/debates_spec.rb | 24 ++++++++ 6 files changed, 156 insertions(+), 1 deletion(-) create mode 100644 spec/features/admin/comments_spec.rb create mode 100644 spec/features/admin/debates_spec.rb create mode 100644 spec/features/moderation/comments_spec.rb create mode 100644 spec/features/moderation/debates_spec.rb diff --git a/spec/factories.rb b/spec/factories.rb index 18e3e39de..3a06c4701 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -13,6 +13,10 @@ FactoryGirl.define do description 'Debate description' terms_of_service '1' association :author, factory: :user + + trait :hidden do + hidden_at Time.now + end end factory :vote do @@ -25,6 +29,10 @@ FactoryGirl.define do association :commentable, factory: :debate user body 'Comment body' + + trait :hidden do + hidden_at Time.now + end end factory :administrator do diff --git a/spec/features/admin/comments_spec.rb b/spec/features/admin/comments_spec.rb new file mode 100644 index 000000000..6e4a0d53d --- /dev/null +++ b/spec/features/admin/comments_spec.rb @@ -0,0 +1,28 @@ +require 'rails_helper' + +feature 'Admin comments' do + + scenario 'Restore', :js do + citizen = create(:user) + 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 diff --git a/spec/features/admin/debates_spec.rb b/spec/features/admin/debates_spec.rb new file mode 100644 index 000000000..50859816e --- /dev/null +++ b/spec/features/admin/debates_spec.rb @@ -0,0 +1,23 @@ +require 'rails_helper' + +feature 'Admin debates' do + + scenario 'Restore', :js do + citizen = create(:user) + admin = create(:administrator) + + debate = create(:debate, :hidden) + + login_as(admin.user) + visit admin_debate_path(debate) + + click_link 'Restore' + + expect(page).to have_content 'The debate has been restored' + + login_as(citizen) + visit debates_path + + expect(page).to have_css('.debate', count: 1) + end +end diff --git a/spec/features/comments_spec.rb b/spec/features/comments_spec.rb index 27a7ac1cd..b1f311be5 100644 --- a/spec/features/comments_spec.rb +++ b/spec/features/comments_spec.rb @@ -77,7 +77,7 @@ feature 'Comments' do click_button 'Publish reply' end - within("#comment-#{comment.id}") do + within "#comment_#{comment.id}" do expect(page).to have_content 'It will be done next week.' end diff --git a/spec/features/moderation/comments_spec.rb b/spec/features/moderation/comments_spec.rb new file mode 100644 index 000000000..099946d82 --- /dev/null +++ b/spec/features/moderation/comments_spec.rb @@ -0,0 +1,72 @@ +require 'rails_helper' + +feature 'Moderate Comments' do + + scenario 'Hide', :js do + citizen = create(:user) + moderator = create(:moderator) + + debate = create(:debate) + comment = create(:comment, commentable: debate, body: 'SPAM') + + 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 + + scenario 'Children visible', :js do + citizen = create(:user) + moderator = create(:moderator) + + debate = create(:debate) + comment = create(:comment, commentable: debate, body: 'SPAM') + reply = create(:comment, commentable: debate, body: 'Acceptable reply', parent_id: comment.id) + + login_as(moderator.user) + visit debate_path(debate) + + within("#comment_#{comment.id}") do + first(:link, "Hide").click + expect(page).to have_css('.comment .faded') + 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 + citizen = create(:user) + moderator = create(:moderator) + + debate = create(:debate) + comment = create(:comment, commentable: debate) + + login_as(moderator.user) + visit debate_path(debate) + + expect(page).to have_css("#moderator-comment-actions") + + login_as(citizen) + visit debate_path(debate) + + expect(page).to_not have_css("#moderator-comment-actions") + end + +end \ No newline at end of file diff --git a/spec/features/moderation/debates_spec.rb b/spec/features/moderation/debates_spec.rb new file mode 100644 index 000000000..388044a72 --- /dev/null +++ b/spec/features/moderation/debates_spec.rb @@ -0,0 +1,24 @@ +require 'rails_helper' + +feature 'Moderate debates' do + + scenario 'Hide', :js do + citizen = create(:user) + moderator = create(:moderator) + + debate = create(:debate) + + login_as(moderator.user) + visit debate_path(debate) + + within("#debate_#{debate.id}") do + click_link 'Hide' + end + + login_as(citizen) + visit debates_path + + expect(page).to have_css('.debate', count: 0) + end + +end \ No newline at end of file