mirror of
https://github.com/discourse/discourse.git
synced 2024-12-26 00:16:03 +08:00
104 lines
3.7 KiB
Ruby
104 lines
3.7 KiB
Ruby
|
# frozen_string_literal: true
|
|||
|
|
|||
|
require_relative "../discourse_automation_helper"
|
|||
|
|
|||
|
describe StalledTopicFinder do
|
|||
|
fab!(:user) { Fabricate(:user, refresh_auto_groups: true) }
|
|||
|
|
|||
|
before do
|
|||
|
SiteSetting.discourse_automation_enabled = true
|
|||
|
SiteSetting.tagging_enabled = true
|
|||
|
freeze_time
|
|||
|
end
|
|||
|
|
|||
|
describe "default" do
|
|||
|
# topic with only stalled OP
|
|||
|
fab!(:topic_1) { create_topic(user: user) }
|
|||
|
# topic with recent replies
|
|||
|
fab!(:topic_2) { create_topic(user: user) }
|
|||
|
# topic with stalled replies
|
|||
|
fab!(:topic_3) { create_topic(user: user) }
|
|||
|
# topic with only recent OP
|
|||
|
fab!(:topic_4) { create_topic(user: user, created_at: 3.hours.from_now) }
|
|||
|
|
|||
|
it "returns only stalled topics with replies" do
|
|||
|
create_post(topic: topic_1, user: user)
|
|||
|
create_post(topic: topic_2, user: user, created_at: 3.hours.from_now)
|
|||
|
create_post(topic: topic_2, user: user, created_at: 3.hours.from_now)
|
|||
|
create_post(topic: topic_3, user: user)
|
|||
|
create_post(topic: topic_3, user: user)
|
|||
|
|
|||
|
expect(described_class.call(2.hours.from_now).map(&:id)).to contain_exactly(
|
|||
|
topic_1.id,
|
|||
|
topic_3.id,
|
|||
|
)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
describe "filter by tags" do
|
|||
|
fab!(:tag_1) { Fabricate(:tag) }
|
|||
|
# tagged topic with replies
|
|||
|
fab!(:topic_1) { create_topic(tags: [tag_1.name], user: user) }
|
|||
|
# untagged topic with replies
|
|||
|
fab!(:topic_2) { create_topic(user: user) }
|
|||
|
# tagged topic with no replies
|
|||
|
fab!(:topic_3) { create_topic(user: user, tags: [tag_1.name]) }
|
|||
|
# tagged topic with recent replies
|
|||
|
fab!(:topic_4) { create_topic(user: user, tags: [tag_1.name]) }
|
|||
|
|
|||
|
it "returns only stalled topics with replies using the tag" do
|
|||
|
create_post(topic: topic_1, user: user)
|
|||
|
create_post(topic: topic_1, user: user)
|
|||
|
create_post(topic: topic_2, user: user)
|
|||
|
create_post(topic: topic_2, user: user)
|
|||
|
create_post(topic: topic_4, user: user, created_at: 3.hours.from_now)
|
|||
|
create_post(topic: topic_4, user: user, created_at: 3.hours.from_now)
|
|||
|
|
|||
|
expect(
|
|||
|
described_class.call(2.hours.from_now, tags: [tag_1.name]).map(&:id),
|
|||
|
).to contain_exactly(topic_1.id)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
describe "filter by categories" do
|
|||
|
fab!(:category_1) { Fabricate(:category) }
|
|||
|
|
|||
|
# topic with stalled replies and category
|
|||
|
fab!(:topic_1) { create_topic(user: user, category: category_1) }
|
|||
|
# topic with stalled replies and no category
|
|||
|
fab!(:topic_2) { create_topic(user: user) }
|
|||
|
# topic with recent replies and category
|
|||
|
fab!(:topic_3) { create_topic(user: user, category: category_1) }
|
|||
|
|
|||
|
it "returns only topics with the category" do
|
|||
|
create_post(topic: topic_1, user: user)
|
|||
|
create_post(topic: topic_1, user: user)
|
|||
|
create_post(topic: topic_2, user: user)
|
|||
|
create_post(topic: topic_2, user: user)
|
|||
|
create_post(topic: topic_3, user: user, created_at: 3.hours.from_now)
|
|||
|
create_post(topic: topic_3, user: user, created_at: 3.hours.from_now)
|
|||
|
|
|||
|
expect(
|
|||
|
described_class.call(2.hours.from_now, categories: [category_1.id]).map(&:id),
|
|||
|
).to contain_exactly(topic_1.id)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
describe "filter recent topic owner replies" do
|
|||
|
fab!(:another_user) { Fabricate(:user) }
|
|||
|
# replies from topic owner
|
|||
|
fab!(:topic_1) { create_topic(user: user) }
|
|||
|
# replies from not topic owner
|
|||
|
fab!(:topic_2) { create_topic(user: user) }
|
|||
|
|
|||
|
it "doesn’t consider replies from other users" do
|
|||
|
create_post(topic: topic_1, user: user)
|
|||
|
create_post(topic: topic_1, user: user, created_at: 3.hours.from_now)
|
|||
|
create_post(topic: topic_2, user: user)
|
|||
|
create_post(topic: topic_2, user: another_user, created_at: 3.hours.from_now)
|
|||
|
|
|||
|
expect(described_class.call(2.hours.from_now).map(&:id)).to contain_exactly(topic_2.id)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|