2021-02-04 08:27:34 +08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2022-07-28 10:27:38 +08:00
|
|
|
RSpec.describe Jobs::CleanDismissedTopicUsers do
|
2021-02-04 08:27:34 +08:00
|
|
|
fab!(:user) { Fabricate(:user, created_at: 1.days.ago, previous_visit_at: 1.days.ago) }
|
|
|
|
fab!(:topic) { Fabricate(:topic, created_at: 5.hours.ago) }
|
|
|
|
fab!(:dismissed_topic_user) { Fabricate(:dismissed_topic_user, user: user, topic: topic) }
|
|
|
|
|
2022-07-27 18:21:10 +08:00
|
|
|
describe '#delete_overdue_dismissals!' do
|
2021-02-04 08:27:34 +08:00
|
|
|
it 'does not delete when new_topic_duration_minutes is set to always' do
|
|
|
|
user.user_option.update(new_topic_duration_minutes: User::NewTopicDuration::ALWAYS)
|
|
|
|
expect { described_class.new.execute({}) }.not_to change { DismissedTopicUser.count }
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'deletes when new_topic_duration_minutes is set to since last visit' do
|
|
|
|
user.user_option.update(new_topic_duration_minutes: User::NewTopicDuration::LAST_VISIT)
|
|
|
|
expect { described_class.new.execute({}) }.not_to change { DismissedTopicUser.count }
|
|
|
|
|
|
|
|
user.update!(previous_visit_at: 1.hours.ago)
|
|
|
|
expect { described_class.new.execute({}) }.to change { DismissedTopicUser.count }.by(-1)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'deletes when new_topic_duration_minutes is set to created in the last day' do
|
|
|
|
user.user_option.update(new_topic_duration_minutes: 1440)
|
|
|
|
expect { described_class.new.execute({}) }.not_to change { DismissedTopicUser.count }
|
|
|
|
|
|
|
|
topic.update!(created_at: 2.days.ago)
|
|
|
|
expect { described_class.new.execute({}) }.to change { DismissedTopicUser.count }.by(-1)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2022-07-27 18:21:10 +08:00
|
|
|
describe '#delete_over_the_limit_dismissals!' do
|
2021-02-04 08:27:34 +08:00
|
|
|
fab!(:user2) { Fabricate(:user, created_at: 1.days.ago, previous_visit_at: 1.days.ago) }
|
|
|
|
fab!(:topic2) { Fabricate(:topic, created_at: 6.hours.ago) }
|
|
|
|
fab!(:topic3) { Fabricate(:topic, created_at: 2.hours.ago) }
|
|
|
|
fab!(:dismissed_topic_user2) { Fabricate(:dismissed_topic_user, user: user, topic: topic2) }
|
|
|
|
fab!(:dismissed_topic_user3) { Fabricate(:dismissed_topic_user, user: user, topic: topic3) }
|
|
|
|
fab!(:dismissed_topic_user4) { Fabricate(:dismissed_topic_user, user: user2, topic: topic) }
|
|
|
|
|
|
|
|
before do
|
|
|
|
user.user_option.update(new_topic_duration_minutes: User::NewTopicDuration::ALWAYS)
|
|
|
|
user2.user_option.update(new_topic_duration_minutes: User::NewTopicDuration::ALWAYS)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'deletes over the limit dismissals' do
|
|
|
|
described_class.new.execute({})
|
|
|
|
expect(dismissed_topic_user.reload).to be_present
|
|
|
|
expect(dismissed_topic_user2.reload).to be_present
|
|
|
|
expect(dismissed_topic_user3.reload).to be_present
|
|
|
|
expect(dismissed_topic_user4.reload).to be_present
|
|
|
|
|
|
|
|
SiteSetting.max_new_topics = 2
|
|
|
|
described_class.new.execute({})
|
|
|
|
expect(dismissed_topic_user.reload).to be_present
|
|
|
|
expect { dismissed_topic_user2.reload }.to raise_error(ActiveRecord::RecordNotFound)
|
|
|
|
expect(dismissed_topic_user3.reload).to be_present
|
|
|
|
expect(dismissed_topic_user4.reload).to be_present
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|