1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
|
# 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 = FactoryGirl.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
u_13 = FactoryGirl.create(:user)
u_13.profile.birthday = 10.years.ago.to_date
u_13.profile.save!
o_13 = FactoryGirl.create(:user)
o_13.profile.birthday = 20.years.ago.to_date
o_13.profile.save!
get :user_search, params: {admins_controller_user_search: {under13: "1"}}
expect(assigns[:users]).to include(u_13)
expect(assigns[:users]).not_to include(o_13)
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: "<strong>#{I18n.translate('admins.stats.daily')}</strong>"
)
)
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: "<strong>#{I18n.translate('admins.stats.daily')}</strong>"
)
)
expect(response.body).to include(
I18n.translate(
"admins.stats.display_results", segment: "<strong>#{I18n.translate("admins.stats.#{range}")}</strong>"
)
)
end
end
end
end
|