Retrospring/spec/controllers/moderation/reports_controller_spec.rb

122 lines
3.4 KiB
Ruby

# frozen_string_literal: true
require "rails_helper"
describe Moderation::ReportsController, type: :controller do
let(:user) { FactoryBot.create :user, roles: ["moderator"] }
describe "#index" do
shared_examples_for "sets the expected ivars" do
let(:expected_assigns) { {} }
it "sets the expected ivars" do
subject
expected_assigns.each do |name, value|
expect(assigns[name]).to eq(value)
end
end
end
context "template rendering" do
let(:other_user) { FactoryBot.create :user }
let(:report) { Report.create(user:, target_id: other_user.id, type: "Reports::User") }
subject { get :index }
before do
report
sign_in user
end
it "renders the moderation/reports/index template" do
subject
expect(response).to render_template("moderation/reports/index")
end
include_examples "sets the expected ivars" do
let(:expected_assigns) do
{
reports: [report],
reports_last_id: report.id,
}
end
end
end
context "filtering for target users" do
let(:other_user) { FactoryBot.create :user }
let(:question) { FactoryBot.create :question }
let(:report) { Report.create(user:, target_id: other_user.id, target_user_id: other_user.id, type: "Reports::User") }
let(:report2) { Report.create(user:, target_id: question.id, target_user_id: nil, type: "Reports::Question") }
subject { get :index, params: { target_user: other_user.screen_name } }
before do
report
report2
sign_in user
end
include_examples "sets the expected ivars" do
let(:expected_assigns) do
{
reports: [report],
reports_last_id: report.id,
}
end
end
end
context "filtering for users" do
let(:report_user) { FactoryBot.create :user }
let(:other_user) { FactoryBot.create :user }
let(:question) { FactoryBot.create :question }
let(:report) { Report.create(user:, target_id: other_user.id, target_user_id: other_user.id, type: "Reports::User") }
let(:report2) { Report.create(user: report_user, target_id: question.id, target_user_id: nil, type: "Reports::Question") }
subject { get :index, params: { user: report_user.screen_name } }
before do
report
report2
sign_in user
end
include_examples "sets the expected ivars" do
let(:expected_assigns) do
{
reports: [report2],
reports_last_id: report2.id,
}
end
end
end
context "filtering for type" do
let(:report_user) { FactoryBot.create :user }
let(:other_user) { FactoryBot.create :user }
let(:question) { FactoryBot.create :question }
let(:report) { Report.create(user:, target_id: other_user.id, target_user_id: other_user.id, type: "Reports::User") }
let(:report2) { Report.create(user: report_user, target_id: question.id, target_user_id: nil, type: "Reports::Question") }
subject { get :index, params: { type: "question" } }
before do
report
report2
sign_in user
end
include_examples "sets the expected ivars" do
let(:expected_assigns) do
{
reports: [report2],
reports_last_id: report2.id,
}
end
end
end
end
end