discourse/plugins/automation/spec/queries/stalled_topic_finder_spec.rb
Osama Sayegh 3d4faf3272
FEATURE: Merge discourse-automation (#26432)
Automation (previously known as discourse-automation) is now a core plugin.
2024-04-03 18:20:43 +03:00

104 lines
3.7 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 "doesnt 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