otwarchive-symphonyarchive/spec/models/spam_report_spec.rb

59 lines
2.2 KiB
Ruby
Raw Permalink Normal View History

2026-03-11 22:22:11 +00:00
require "spec_helper"
describe SpamReport do
let(:author) { create(:user).default_pseud }
let!(:first_spam) { create(:work, spam: true, authors: [author]) }
let!(:second_spam) { create(:work, spam: true, authors: [author]) }
let!(:third_spam) { create(:work, spam: true, authors: [author]) }
let(:message_double) { instance_double(ActionMailer::MessageDelivery, deliver_later: true) }
before do
allow(ArchiveConfig).to receive(:SPAM_THRESHOLD).and_return(10)
create(:work, spam: false)
end
it "has a recent date after the new date" do
spam_report = SpamReport.new
expect(spam_report.new_date).to be > spam_report.recent_date
end
it "does not send email if the spam score is lower than the spam threshold" do
allow(ArchiveConfig).to receive(:SPAM_THRESHOLD).and_return(70)
expect(AdminMailer).not_to receive(:send_spam_alert)
SpamReport.run
end
it "sends email if the spam score is higher than the spam threshold" do
expect(AdminMailer).to receive(:send_spam_alert)
.with({ author.user_id => { score: 13,
work_ids: [first_spam.id, second_spam.id, third_spam.id] } })
.and_return(message_double)
SpamReport.run
end
it "increases the spam score if the work creator has used more than one IP address" do
third_spam.ip_address = "192.168.11.1"
third_spam.save
expect(AdminMailer).to receive(:send_spam_alert)
.with({ author.user_id => { score: 14,
work_ids: [first_spam.id, second_spam.id, third_spam.id] } })
.and_return(message_double)
SpamReport.run
end
it "reduces the spam score if works are posted in the recent past" do
expect(AdminMailer).to receive(:send_spam_alert)
.with({ author.user_id => { score: 13,
work_ids: [first_spam.id, second_spam.id, third_spam.id] } })
.and_return(message_double)
SpamReport.run
create(:work, spam: false, authors: [author], created_at: 3.days.ago)
expect(AdminMailer).to receive(:send_spam_alert)
.with({ author.user_id => { score: 11,
work_ids: [first_spam.id, second_spam.id, third_spam.id] } })
.and_return(message_double)
SpamReport.run
end
end