discourse/spec/jobs/dashboard_stats_spec.rb
Roman Rizzi b7b61d4b56
FEATURE: A notification consolidation plan for keeping the latest one. (#15249)
We previously used ConsolidateNotifications with a threshold of 1 to re-use an existing notification and bump it to the top instead of creating a new one. It produces some jumpiness in the user notification list, and it relies on updating the `created_at` attribute, which is a bit hacky.

As a better alternative, we're introducing a new plan that deletes all the previous versions of the notification, then creates a new one.
2021-12-10 10:32:15 -03:00

55 lines
2.0 KiB
Ruby

# frozen_string_literal: true
require 'rails_helper'
describe ::Jobs::DashboardStats do
let(:group_message) { GroupMessage.new(Group[:admins].name, :dashboard_problems, limit_once_per: 7.days.to_i) }
def clear_recently_sent!
Discourse.redis.del(group_message.sent_recently_key)
end
after do
clear_recently_sent!
end
it 'creates group message when problems are persistent for 2 days' do
Discourse.redis.setex(AdminDashboardData.problems_started_key, 14.days.to_i, Time.zone.now.to_s)
expect { described_class.new.execute({}) }.not_to change { Topic.count }
Discourse.redis.setex(AdminDashboardData.problems_started_key, 14.days.to_i, 3.days.ago)
expect { described_class.new.execute({}) }.to change { Topic.count }.by(1)
end
it 'replaces old message' do
Discourse.redis.setex(AdminDashboardData.problems_started_key, 14.days.to_i, 3.days.ago)
expect { described_class.new.execute({}) }.to change { Topic.count }.by(1)
old_topic = Topic.last
clear_recently_sent!
new_topic = described_class.new.execute({}).topic
expect(old_topic.reload.deleted_at.present?).to eq(true)
expect(new_topic.reload.deleted_at).to be_nil
expect(new_topic.title).to eq(old_topic.title)
end
it 'duplicates message if previous one has replies' do
Discourse.redis.setex(AdminDashboardData.problems_started_key, 14.days.to_i, 3.days.ago)
expect { described_class.new.execute({}) }.to change { Topic.count }.by(1)
clear_recently_sent!
_reply_1 = Fabricate(:post, topic: Topic.last)
expect { described_class.new.execute({}) }.to change { Topic.count }.by(1)
end
it 'duplicates message if previous was 3 months ago' do
freeze_time 3.months.ago do
Discourse.redis.setex(AdminDashboardData.problems_started_key, 14.days.to_i, 3.days.ago)
expect { described_class.new.execute({}) }.to change { Topic.count }.by(1)
clear_recently_sent!
end
expect { described_class.new.execute({}) }.to change { Topic.count }.by(1)
end
end