# frozen_string_literal: true
# Copyright (c) 2010-2011, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
describe AdminsController, type: :controller do
before do
@user = FactoryBot.create :user
sign_in @user, scope: :user
end
describe "#dashboard" do
context "admin not signed in" do
it "is behind redirect_unless_admin" do
get :dashboard
expect(response).to redirect_to stream_path
end
end
context "admin signed in" do
before do
Role.add_admin(@user.person)
@post = bob.post(:status_message, text: "hello", to: bob.aspects.first.id)
@post_report = alice.reports.create(
item_id: @post.id, item_type: "Post",
text: "offensive content"
)
end
it "succeeds" do
get :dashboard
expect(response).to be_successful
end
it "warns the user about unreviewed reports" do
get :dashboard
expect(response.body).to match("reports-warning")
expect(response.body).to include(I18n.t("report.unreviewed_reports", count: 1))
end
it "doesn't show a report warning if there are no unreviewed reports" do
@post_report.mark_as_reviewed
get :dashboard
expect(response.body).not_to match("reports-warning")
end
end
end
describe "#user_search" do
context "admin not signed in" do
it "is behind redirect_unless_admin" do
get :user_search
expect(response).to redirect_to stream_path
end
end
context "admin signed in" do
before do
Role.add_admin(@user.person)
end
it "succeeds and renders user_search" do
get :user_search
expect(response).to be_successful
expect(response).to render_template(:user_search)
end
it "assigns users to an empty array if nothing is searched for" do
get :user_search
expect(assigns[:users]).to eq([])
end
it "searches on username" do
get :user_search, params: {admins_controller_user_search: {username: @user.username}}
expect(assigns[:users]).to eq([@user])
end
it "searches on email" do
get :user_search, params: {admins_controller_user_search: {email: @user.email}}
expect(assigns[:users]).to eq([@user])
end
it "searches on age < 13 (COPPA)" do
under13 = FactoryBot.create(:user)
under13.profile.birthday = 10.years.ago.to_date
under13.profile.save!
over13 = FactoryBot.create(:user)
over13.profile.birthday = 20.years.ago.to_date
over13.profile.save!
get :user_search, params: {admins_controller_user_search: {under13: "1"}}
expect(assigns[:users]).to include(under13)
expect(assigns[:users]).not_to include(over13)
end
end
end
describe "#admin_inviter" do
context "admin not signed in" do
it "is behind redirect_unless_admin" do
get :admin_inviter
expect(response).to redirect_to stream_path
end
end
context "admin signed in" do
before do
Role.add_admin(@user.person)
end
it "does not die if you do it twice" do
get :admin_inviter, params: {identifier: "bob@moms.com"}
get :admin_inviter, params: {identifier: "bob@moms.com"}
expect(response).to be_redirect
end
it "invites a new user" do
expect(EmailInviter).to receive(:new).and_return(double.as_null_object)
get :admin_inviter, params: {identifier: "bob@moms.com"}
expect(response).to redirect_to user_search_path
expect(flash.notice).to include("invitation sent")
end
it "doesn't invite an existing user" do
get :admin_inviter, params: {identifier: bob.email}
expect(response).to redirect_to user_search_path
expect(flash.notice).to include("error sending invite")
end
end
end
describe "#stats" do
before do
Role.add_admin(@user.person)
end
it "succeeds and renders stats" do
get :stats
expect(response).to be_successful
expect(response).to render_template(:stats)
expect(response.body).to include(
I18n.translate(
"admins.stats.display_results", segment: "#{I18n.translate('admins.stats.daily')}"
)
)
end
it "succeeds and renders stats for different ranges" do
%w[week 2weeks month].each do |range|
get :stats, params: {range: range}
expect(response).to be_successful
expect(response).to render_template(:stats)
expect(response.body).not_to include(
I18n.translate(
"admins.stats.display_results", segment: "#{I18n.translate('admins.stats.daily')}"
)
)
expect(response.body).to include(
I18n.translate(
"admins.stats.display_results", segment: "#{I18n.translate("admins.stats.#{range}")}"
)
)
end
end
end
end