summaryrefslogtreecommitdiffstats
path: root/spec
diff options
context:
space:
mode:
authorMatt Jankowski <mjankowski@thoughtbot.com>2017-04-14 05:10:28 -0400
committerEugen <eugen@zeonfederated.com>2017-04-14 11:10:28 +0200
commit8b74aa42176dabf77c3b4d02c80bcc47d9d70e8e (patch)
treef39b6c185db42639a6bf43ac8cb4bc621dfc2f20 /spec
parenta6807201d2003fc0d544813ba67cfe315d829e06 (diff)
Admin reports controller improvements (#1714)
* Simplify admin/reports controller filtering for index * Rename parameter to resolved * Fix issue where reports view could not access filter_link_to * Add coverage for admin/reports controller * DRY up resolution of related reports for target account * Clean up admin/reports routes * Add Report#statuses method * DRY up current account action taken params * Rubocop styles
Diffstat (limited to 'spec')
-rw-r--r--spec/controllers/admin/reported_statuses_controller_spec.rb21
-rw-r--r--spec/controllers/admin/reports_controller_spec.rb80
-rw-r--r--spec/fabricators/report_fabricator.rb2
-rw-r--r--spec/models/report_spec.rb10
4 files changed, 108 insertions, 5 deletions
diff --git a/spec/controllers/admin/reported_statuses_controller_spec.rb b/spec/controllers/admin/reported_statuses_controller_spec.rb
new file mode 100644
index 00000000000..4d6926e1afe
--- /dev/null
+++ b/spec/controllers/admin/reported_statuses_controller_spec.rb
@@ -0,0 +1,21 @@
+require 'rails_helper'
+
+describe Admin::ReportedStatusesController do
+ let(:user) { Fabricate(:user, admin: true) }
+ before do
+ sign_in user, scope: :user
+ end
+
+ describe 'DELETE #destroy' do
+ it 'removes a status' do
+ report = Fabricate(:report)
+ status = Fabricate(:status)
+ allow(RemovalWorker).to receive(:perform_async)
+
+ delete :destroy, params: { report_id: report, id: status }
+ expect(response).to redirect_to(admin_report_path(report))
+ expect(RemovalWorker).
+ to have_received(:perform_async).with(status.id)
+ end
+ end
+end
diff --git a/spec/controllers/admin/reports_controller_spec.rb b/spec/controllers/admin/reports_controller_spec.rb
index 622ea87c1c1..ab93c6271e2 100644
--- a/spec/controllers/admin/reports_controller_spec.rb
+++ b/spec/controllers/admin/reports_controller_spec.rb
@@ -1,14 +1,86 @@
require 'rails_helper'
-RSpec.describe Admin::ReportsController, type: :controller do
+describe Admin::ReportsController do
+ let(:user) { Fabricate(:user, admin: true) }
+ before do
+ sign_in user, scope: :user
+ end
+
describe 'GET #index' do
- before do
- sign_in Fabricate(:user, admin: true), scope: :user
+ it 'returns http success with no filters' do
+ allow(Report).to receive(:unresolved).and_return(Report.all)
+ get :index
+
+ expect(response).to have_http_status(:success)
+ expect(Report).to have_received(:unresolved)
end
+ it 'returns http success with resolved filter' do
+ allow(Report).to receive(:resolved).and_return(Report.all)
+ get :index, params: { resolved: 1 }
+
+ expect(response).to have_http_status(:success)
+ expect(Report).to have_received(:resolved)
+ end
+ end
+
+ describe 'GET #show' do
it 'returns http success' do
- get :index
+ report = Fabricate(:report)
+
+ get :show, params: { id: report }
expect(response).to have_http_status(:success)
end
end
+
+ describe 'PUT #update' do
+ describe 'with an unknown outcome' do
+ it 'rejects the change' do
+ report = Fabricate(:report)
+ put :update, params: { id: report, outcome: 'unknown' }
+
+ expect(response).to have_http_status(:missing)
+ end
+ end
+
+ describe 'with an outcome of `resolve`' do
+ it 'resolves the report' do
+ report = Fabricate(:report)
+
+ put :update, params: { id: report, outcome: 'resolve' }
+ expect(response).to redirect_to(admin_report_path(report))
+ report.reload
+ expect(report.action_taken_by_account).to eq user.account
+ expect(report.action_taken).to eq true
+ end
+ end
+
+ describe 'with an outcome of `suspend`' do
+ it 'suspends the reported account' do
+ report = Fabricate(:report)
+ allow(Admin::SuspensionWorker).to receive(:perform_async)
+
+ put :update, params: { id: report, outcome: 'suspend' }
+ expect(response).to redirect_to(admin_report_path(report))
+ report.reload
+ expect(report.action_taken_by_account).to eq user.account
+ expect(report.action_taken).to eq true
+ expect(Admin::SuspensionWorker).
+ to have_received(:perform_async).with(report.target_account_id)
+ end
+ end
+
+ describe 'with an outsome of `silence`' do
+ it 'silences the reported account' do
+ report = Fabricate(:report)
+
+ put :update, params: { id: report, outcome: 'silence' }
+ expect(response).to redirect_to(admin_report_path(report))
+ report.reload
+ expect(report.action_taken_by_account).to eq user.account
+ expect(report.action_taken).to eq true
+ expect(report.target_account).to be_silenced
+ end
+ end
+ end
end
diff --git a/spec/fabricators/report_fabricator.rb b/spec/fabricators/report_fabricator.rb
index b9fa360a7ea..5bd4a63f024 100644
--- a/spec/fabricators/report_fabricator.rb
+++ b/spec/fabricators/report_fabricator.rb
@@ -1,4 +1,6 @@
Fabricator(:report) do
+ account
+ target_account { Fabricate(:account) }
comment "You nasty"
action_taken false
end
diff --git a/spec/models/report_spec.rb b/spec/models/report_spec.rb
index ade53cffa53..80b8cc55b55 100644
--- a/spec/models/report_spec.rb
+++ b/spec/models/report_spec.rb
@@ -1,5 +1,13 @@
require 'rails_helper'
-RSpec.describe Report, type: :model do
+describe Report do
+ describe 'statuses' do
+ it 'returns the statuses for the report' do
+ status = Fabricate(:status)
+ _other = Fabricate(:status)
+ report = Fabricate(:report, status_ids: [status.id])
+ expect(report.statuses).to eq [status]
+ end
+ end
end