discourse/spec/jobs/ignored_users_summary_spec.rb
Daniel Waterworth e219588142 DEV: Prefabrication (test optimization) (#7414)
* Introduced fab!, a helper that creates database state for a group

It's almost identical to let_it_be, except:

 1. It creates a new object for each test by default,
 2. You can disable it using PREFABRICATION=0
2019-05-07 13:12:20 +10:00

79 lines
2.2 KiB
Ruby

# frozen_string_literal: true
require 'rails_helper'
require_dependency 'jobs/scheduled/ignored_users_summary'
describe Jobs::IgnoredUsersSummary do
before do
SiteSetting.ignored_users_count_message_threshold = 1
SiteSetting.ignored_users_message_gap_days = 365
end
subject { Jobs::IgnoredUsersSummary.new.execute({}) }
context "with no ignored users" do
it "does nothing" do
subject
expect { subject }.to_not change { Post.count }
end
end
context "when some ignored users exist" do
fab!(:tarek) { Fabricate(:user, username: "tarek") }
fab!(:matt) { Fabricate(:user, username: "matt") }
fab!(:john) { Fabricate(:user, username: "john") }
before do
Fabricate(:ignored_user, user: tarek, ignored_user: matt)
Fabricate(:ignored_user, user_id: tarek.id, ignored_user_id: john.id)
end
context "when no system message exists for the ignored users" do
context "when threshold is not hit" do
before do
SiteSetting.ignored_users_count_message_threshold = 5
end
it "does nothing" do
subject
expect { subject }.to_not change { Post.count }
end
end
context "when threshold is hit" do
it "creates a system message" do
subject
posts = Post.joins(:topic).where(topics: {
archetype: Archetype.private_message,
subtype: TopicSubtype.system_message
})
expect(posts.count).to eq(2)
expect(posts.find { |post| post.raw.include?(matt.username) }).to be_present
expect(posts.find { |post| post.raw.include?(john.username) }).to be_present
end
end
end
context "when a system message already exists for the ignored users" do
context "when threshold is not hit" do
before do
SiteSetting.ignored_users_count_message_threshold = 5
end
it "does nothing" do
subject
expect { subject }.to_not change { Post.count }
end
end
context "when threshold is hit" do
it "does nothing" do
subject
expect { subject }.to_not change { Post.count }
end
end
end
end
end