58 lines
2.2 KiB
Ruby
58 lines
2.2 KiB
Ruby
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
|