mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FEATURE: navigate to first post and auto bump category settings
### navigate_to_first_post_after_read setting for categories When enabled on categories logged on users will return to OP after reading the entire category. (useful for documentation categories) ### num_auto_bump_daily Set a number of topics that will automatically bump daily on a category. - Every 15 minutes we will check if any category has this setting - Categories with the setting are shuffled - We exclude pinned, closed, category description and archived topics - Maximum of 1 topic for the list of categories is bumped till limit reached per category - We always try to bump oldest first - Limit is elastic using a RateLimiter that ensures that we only bump N per day Also some minor organisation on category settings Froze strings on category.rb
This commit is contained in:
@@ -684,4 +684,44 @@ describe Category do
|
||||
it { expect(category.reload.require_reply_approval?).to eq(true) }
|
||||
end
|
||||
end
|
||||
|
||||
describe 'auto bump' do
|
||||
before do
|
||||
RateLimiter.enable
|
||||
end
|
||||
|
||||
after do
|
||||
RateLimiter.disable
|
||||
end
|
||||
|
||||
it 'should correctly automatically bump topics' do
|
||||
freeze_time 1.second.ago
|
||||
category = Fabricate(:category)
|
||||
category.clear_auto_bump_cache!
|
||||
|
||||
_post1 = create_post(category: category)
|
||||
_post2 = create_post(category: category)
|
||||
_post3 = create_post(category: category)
|
||||
|
||||
time = 1.month.from_now
|
||||
freeze_time time
|
||||
|
||||
expect(category.auto_bump_topic!).to eq(false)
|
||||
expect(Topic.where(bumped_at: time).count).to eq(0)
|
||||
|
||||
category.num_auto_bump_daily = 2
|
||||
category.save!
|
||||
|
||||
expect(category.auto_bump_topic!).to eq(true)
|
||||
expect(Topic.where(bumped_at: time).count).to eq(1)
|
||||
|
||||
expect(category.auto_bump_topic!).to eq(true)
|
||||
expect(Topic.where(bumped_at: time).count).to eq(2)
|
||||
|
||||
expect(category.auto_bump_topic!).to eq(false)
|
||||
expect(Topic.where(bumped_at: time).count).to eq(2)
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -297,24 +297,31 @@ describe CategoriesController do
|
||||
expect(UserHistory.count).to eq(5) # 2 + 3 (bootstrap mode)
|
||||
end
|
||||
|
||||
it 'updates per-category approval settings correctly' do
|
||||
it 'updates per-category settings correctly' do
|
||||
category.custom_fields[Category::REQUIRE_TOPIC_APPROVAL] = false
|
||||
category.custom_fields[Category::REQUIRE_REPLY_APPROVAL] = false
|
||||
category.custom_fields[Category::NUM_AUTO_BUMP_DAILY] = 0
|
||||
|
||||
category.navigate_to_first_post_after_read = false
|
||||
category.save!
|
||||
|
||||
put "/categories/#{category.id}.json", params: {
|
||||
name: category.name,
|
||||
color: category.color,
|
||||
text_color: category.text_color,
|
||||
navigate_to_first_post_after_read: true,
|
||||
custom_fields: {
|
||||
require_reply_approval: true,
|
||||
require_topic_approval: true,
|
||||
num_auto_bump_daily: 10
|
||||
}
|
||||
}
|
||||
|
||||
category.reload
|
||||
expect(category.require_topic_approval?).to eq(true)
|
||||
expect(category.require_reply_approval?).to eq(true)
|
||||
expect(category.num_auto_bump_daily).to eq(10)
|
||||
expect(category.navigate_to_first_post_after_read).to eq(true)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user