diff --git a/spec/controllers/admin/reports_controller_spec.rb b/spec/controllers/admin/reports_controller_spec.rb deleted file mode 100644 index 4012204de1..0000000000 --- a/spec/controllers/admin/reports_controller_spec.rb +++ /dev/null @@ -1,125 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Admin::ReportsController do - render_views - - let(:user) { Fabricate(:admin_user) } - - before do - sign_in user, scope: :user - end - - describe 'GET #index' do - it 'returns http success with no filters' do - specified = Fabricate(:report, action_taken_at: nil, comment: 'First report') - other = Fabricate(:report, action_taken_at: Time.now.utc, comment: 'Second report') - - get :index - - expect(response).to have_http_status(200) - expect(response.body) - .to include(specified.comment) - .and not_include(other.comment) - end - - it 'returns http success with resolved filter' do - specified = Fabricate(:report, action_taken_at: Time.now.utc, comment: 'First report') - other = Fabricate(:report, action_taken_at: nil, comment: 'Second report') - - get :index, params: { resolved: '1' } - - expect(response).to have_http_status(200) - expect(response.body) - .to include(specified.comment) - .and not_include(other.comment) - end - end - - describe 'GET #show' do - it 'renders report' do - report = Fabricate(:report, comment: 'A big problem') - - get :show, params: { id: report } - - expect(response).to have_http_status(200) - expect(response.body) - .to include(report.comment) - end - - describe 'account moderation notes' do - let(:report) { Fabricate(:report) } - - it 'includes moderation notes' do - note1 = Fabricate(:report_note, report: report) - note2 = Fabricate(:report_note, report: report) - - get :show, params: { id: report } - - expect(response).to have_http_status(200) - - report_notes = assigns(:report_notes).to_a - - expect(report_notes.size).to be 2 - expect(report_notes).to eq [note1, note2] - end - end - end - - describe 'POST #resolve' do - it 'resolves the report' do - report = Fabricate(:report) - - put :resolve, params: { id: report } - expect(response).to redirect_to(admin_reports_path) - report.reload - expect(report.action_taken_by_account).to eq user.account - expect(report.action_taken?).to be true - expect(last_action_log.target).to eq(report) - end - end - - describe 'POST #reopen' do - it 'reopens the report' do - report = Fabricate(:report, action_taken_at: 3.days.ago) - - put :reopen, params: { id: report } - expect(response).to redirect_to(admin_report_path(report)) - report.reload - expect(report.action_taken_by_account).to be_nil - expect(report.action_taken?).to be false - expect(last_action_log.target).to eq(report) - end - end - - describe 'POST #assign_to_self' do - it 'reopens the report' do - report = Fabricate(:report) - - put :assign_to_self, params: { id: report } - expect(response).to redirect_to(admin_report_path(report)) - report.reload - expect(report.assigned_account).to eq user.account - expect(last_action_log.target).to eq(report) - end - end - - describe 'POST #unassign' do - it 'reopens the report' do - report = Fabricate(:report, assigned_account_id: Account.last.id) - - put :unassign, params: { id: report } - expect(response).to redirect_to(admin_report_path(report)) - report.reload - expect(report.assigned_account).to be_nil - expect(last_action_log.target).to eq(report) - end - end - - private - - def last_action_log - Admin::ActionLog.last - end -end diff --git a/spec/system/admin/reports_spec.rb b/spec/system/admin/reports_spec.rb new file mode 100644 index 0000000000..90845a02f7 --- /dev/null +++ b/spec/system/admin/reports_spec.rb @@ -0,0 +1,112 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Admin Reports' do + let(:user) { Fabricate(:admin_user) } + + before { sign_in(user) } + + describe 'Viewing existing reports' do + let!(:unresolved_report) { Fabricate(:report, action_taken_at: nil, comment: 'First report') } + let!(:resolved_report) { Fabricate(:report, action_taken_at: Time.now.utc, comment: 'Second report') } + let!(:report_note) { Fabricate :report_note, report: resolved_report, content: 'Note about resolved report' } + + it 'Shows basic report details' do + visit admin_reports_path + + expect(page) + .to have_content(unresolved_report.comment) + .and have_no_content(resolved_report.comment) + + click_on I18n.t('admin.reports.resolved') + expect(page) + .to have_content(resolved_report.comment) + .and have_no_content(unresolved_report.comment) + + click_on resolved_report.comment + expect(page) + .to have_title(I18n.t('admin.reports.report', id: resolved_report.id)) + .and have_content(resolved_report.comment) + .and have_content(report_note.content) + end + end + + describe 'Resolving reports' do + let!(:report) { Fabricate :report } + + it 'resolves an open report' do + visit admin_report_path(report) + within '.content__heading__actions' do + click_on I18n.t('admin.reports.mark_as_resolved') + end + + expect(page) + .to have_title(I18n.t('admin.reports.title')) + .and have_content(I18n.t('admin.reports.resolved_msg')) + + report.reload + expect(report.action_taken_by_account) + .to eq user.account + expect(report) + .to be_action_taken + expect(last_action_log.target) + .to eq(report) + end + end + + describe 'Reopening reports' do + let!(:report) { Fabricate :report, action_taken_at: 3.days.ago } + + it 'reopens a resolved report' do + visit admin_report_path(report) + within '.content__heading__actions' do + click_on I18n.t('admin.reports.mark_as_unresolved') + end + + expect(page) + .to have_title(I18n.t('admin.reports.report', id: report.id)) + + report.reload + expect(report.action_taken_by_account) + .to be_nil + expect(report) + .to_not be_action_taken + expect(last_action_log.target) + .to eq(report) + end + end + + describe 'Assigning reports' do + let!(:report) { Fabricate :report } + + it 'assigns report to user and then unassigns' do + visit admin_report_path(report) + + click_on I18n.t('admin.reports.assign_to_self') + + expect(page) + .to have_title(I18n.t('admin.reports.report', id: report.id)) + report.reload + expect(report.assigned_account) + .to eq user.account + expect(last_action_log.target) + .to eq(report) + + click_on I18n.t('admin.reports.unassign') + expect(page) + .to have_title(I18n.t('admin.reports.report', id: report.id)) + report.reload + expect(report.assigned_account) + .to be_nil + expect(last_action_log.target) + .to eq(report) + end + end + + private + + def last_action_log + Admin::ActionLog.last + end +end