discourse/plugins/chat/spec/jobs/delete_old_chat_messages_sp...

137 lines
4.1 KiB
Ruby

# frozen_string_literal: true
require "rails_helper"
describe Jobs::DeleteOldChatMessages do
base_date = DateTime.parse("2020-12-01 00:00 UTC")
fab!(:public_channel) { Fabricate(:category_channel) }
fab!(:public_days_old_0) do
Fabricate(:chat_message, chat_channel: public_channel, message: "hi", created_at: base_date)
end
fab!(:public_days_old_10) do
Fabricate(
:chat_message,
chat_channel: public_channel,
message: "hi",
created_at: base_date - 10.days - 1.second,
)
end
fab!(:public_days_old_20) do
Fabricate(
:chat_message,
chat_channel: public_channel,
message: "hi",
created_at: base_date - 20.days - 1.second,
)
end
fab!(:public_days_old_30) do
Fabricate(
:chat_message,
chat_channel: public_channel,
message: "hi",
created_at: base_date - 30.days - 1.second,
)
end
fab!(:public_trashed_days_old_30) do
Fabricate(
:chat_message,
chat_channel: public_channel,
message: "hi",
created_at: base_date - 30.days - 1.second,
)
end
fab!(:dm_channel) { Fabricate(:direct_message_channel, users: [Fabricate(:user)]) }
fab!(:dm_days_old_0) do
Fabricate(:chat_message, chat_channel: dm_channel, message: "hi", created_at: base_date)
end
fab!(:dm_days_old_10) do
Fabricate(
:chat_message,
chat_channel: dm_channel,
message: "hi",
created_at: base_date - 10.days - 1.second,
)
end
fab!(:dm_days_old_20) do
Fabricate(
:chat_message,
chat_channel: dm_channel,
message: "hi",
created_at: base_date - 20.days - 1.second,
)
end
fab!(:dm_days_old_30) do
Fabricate(
:chat_message,
chat_channel: dm_channel,
message: "hi",
created_at: base_date - 30.days - 1.second,
)
end
fab!(:dm_trashed_days_old_30) do
Fabricate(
:chat_message,
chat_channel: dm_channel,
message: "hi",
created_at: base_date - 30.days - 1.second,
)
end
before { freeze_time(base_date) }
it "doesn't delete messages when settings are 0" do
SiteSetting.chat_channel_retention_days = 0
SiteSetting.chat_dm_retention_days = 0
expect { described_class.new.execute }.not_to change { ChatMessage.count }
end
describe "public channels" do
it "deletes public messages correctly" do
SiteSetting.chat_channel_retention_days = 20
described_class.new.execute
expect(public_days_old_0.deleted_at).to be_nil
expect(public_days_old_10.deleted_at).to be_nil
expect { public_days_old_20 }.to raise_exception(ActiveRecord::RecordNotFound)
expect { public_days_old_30 }.to raise_exception(ActiveRecord::RecordNotFound)
end
it "deletes trashed messages correctly" do
SiteSetting.chat_channel_retention_days = 20
public_trashed_days_old_30.trash!
described_class.new.execute
expect { public_trashed_days_old_30.reload }.to raise_exception(ActiveRecord::RecordNotFound)
end
it "does nothing when no messages fall in the time range" do
SiteSetting.chat_channel_retention_days = 800
expect { described_class.new.execute }.not_to change { ChatMessage.in_public_channel.count }
end
end
describe "dm channels" do
it "deletes public messages correctly" do
SiteSetting.chat_dm_retention_days = 20
described_class.new.execute
expect(dm_days_old_0.deleted_at).to be_nil
expect(dm_days_old_10.deleted_at).to be_nil
expect { dm_days_old_20 }.to raise_exception(ActiveRecord::RecordNotFound)
expect { dm_days_old_30 }.to raise_exception(ActiveRecord::RecordNotFound)
end
it "deletes trashed messages correctly" do
SiteSetting.chat_dm_retention_days = 20
dm_trashed_days_old_30.trash!
described_class.new.execute
expect { dm_trashed_days_old_30.reload }.to raise_exception(ActiveRecord::RecordNotFound)
end
it "does nothing when no messages fall in the time range" do
SiteSetting.chat_dm_retention_days = 800
expect { described_class.new.execute }.not_to change { ChatMessage.in_dm_channel.count }
end
end
end