108 lines
3.4 KiB
Ruby
108 lines
3.4 KiB
Ruby
|
|
# frozen_string_literal: true
|
||
|
|
|
||
|
|
require "spec_helper"
|
||
|
|
|
||
|
|
describe Admin::SpamController do
|
||
|
|
include LoginMacros
|
||
|
|
include RedirectExpectationHelper
|
||
|
|
|
||
|
|
describe "GET #index" do
|
||
|
|
context "when logged in as user" do
|
||
|
|
it "redirects with notice" do
|
||
|
|
fake_login
|
||
|
|
get :index, params: { reviewed: false, approved: false }
|
||
|
|
|
||
|
|
it_redirects_to_with_notice(root_url, "I'm sorry, only an admin can look at that area")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
(Admin::VALID_ROLES - %w[superadmin policy_and_abuse]).each do |role|
|
||
|
|
context "when logged in as an admin with #{role} role" do
|
||
|
|
let(:admin) { create(:admin, roles: [role]) }
|
||
|
|
|
||
|
|
it "redirects with error" do
|
||
|
|
fake_login_admin(admin)
|
||
|
|
get :index, params: { reviewed: false, approved: false }
|
||
|
|
|
||
|
|
it_redirects_to_with_error(root_url, "Sorry, only an authorized admin can access the page you were trying to reach.")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
%w[policy_and_abuse superadmin].each do |role|
|
||
|
|
context "when logged in as an admin with #{role} role" do
|
||
|
|
let(:admin) { create(:admin, roles: [role]) }
|
||
|
|
|
||
|
|
it "renders index template" do
|
||
|
|
fake_login_admin(admin)
|
||
|
|
get :index, params: { reviewed: false, approved: false }
|
||
|
|
|
||
|
|
expect(response).to render_template(:index)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
context "when a ModeratedWork has no corresponding Work" do
|
||
|
|
let!(:spam_with_work) { create(:moderated_work) }
|
||
|
|
let!(:spam_missing_work) { create(:moderated_work, work_id: -1) }
|
||
|
|
|
||
|
|
before do
|
||
|
|
fake_login_admin(create(:superadmin))
|
||
|
|
end
|
||
|
|
|
||
|
|
it "only loads the existing work" do
|
||
|
|
get :index
|
||
|
|
|
||
|
|
expect(assigns(:works)).to include(spam_with_work)
|
||
|
|
expect(assigns(:works)).not_to include(spam_missing_work)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
describe "POST #bulk_update" do
|
||
|
|
let(:admin) { create(:admin) }
|
||
|
|
|
||
|
|
context "when logged in as user" do
|
||
|
|
it "redirects with notice" do
|
||
|
|
fake_login
|
||
|
|
post :bulk_update, params: { ham: true }
|
||
|
|
|
||
|
|
it_redirects_to_with_notice(root_url, "I'm sorry, only an admin can look at that area")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
(Admin::VALID_ROLES - %w[superadmin policy_and_abuse]).each do |role|
|
||
|
|
context "when logged in as an admin with #{role} role" do
|
||
|
|
let(:admin) { create(:admin, roles: [role]) }
|
||
|
|
|
||
|
|
it "redirects with error" do
|
||
|
|
fake_login_admin(admin)
|
||
|
|
post :bulk_update, params: { ham: true }
|
||
|
|
|
||
|
|
it_redirects_to_with_error(root_url, "Sorry, only an authorized admin can access the page you were trying to reach.")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
%w[policy_and_abuse superadmin].each do |role|
|
||
|
|
context "when logged in as an admin with #{role} role" do
|
||
|
|
let(:admin) { create(:admin, roles: [role]) }
|
||
|
|
|
||
|
|
it "marks moderated works as reviewed, marks works as spam, hides the works, and redirects with notice" do
|
||
|
|
FactoryBot.create_list(:moderated_work, 3)
|
||
|
|
fake_login_admin(admin)
|
||
|
|
post :bulk_update, params: { spam: ModeratedWork.all.map(&:id) }
|
||
|
|
|
||
|
|
it_redirects_to_with_notice(admin_spam_index_path, "Works were successfully updated")
|
||
|
|
ModeratedWork.all.each do |moderated_work|
|
||
|
|
moderated_work.reload
|
||
|
|
expect(moderated_work.reviewed).to eq(true)
|
||
|
|
expect(moderated_work.work.spam).to eq(true)
|
||
|
|
expect(moderated_work.work.hidden_by_admin).to eq(true)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|