mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 09:29:39 +08:00

This corrects an issue where very long titles on website would cause the backup not to save cause filename was too long
100 lines
3.2 KiB
Ruby
100 lines
3.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.describe BackupRestore::Backuper do
|
|
describe "#get_parameterized_title" do
|
|
it "returns a non-empty parameterized title when site title contains unicode" do
|
|
SiteSetting.title = "Ɣ"
|
|
backuper = BackupRestore::Backuper.new(Discourse.system_user.id)
|
|
|
|
expect(backuper.send(:get_parameterized_title)).to eq("discourse")
|
|
end
|
|
|
|
it "truncates the title to 64 chars" do
|
|
SiteSetting.title = "This is th title of a very long site that is going to be truncated"
|
|
backuper = BackupRestore::Backuper.new(Discourse.system_user.id)
|
|
|
|
expect(backuper.send(:get_parameterized_title).length).to eq(64)
|
|
end
|
|
|
|
it "returns a valid parameterized site title" do
|
|
SiteSetting.title = "Coding Horror"
|
|
backuper = BackupRestore::Backuper.new(Discourse.system_user.id)
|
|
|
|
expect(backuper.send(:get_parameterized_title)).to eq("coding-horror")
|
|
end
|
|
end
|
|
|
|
describe "#notify_user" do
|
|
before { freeze_time Time.zone.parse("2010-01-01 12:00") }
|
|
|
|
it "includes logs if short" do
|
|
SiteSetting.max_export_file_size_kb = 1
|
|
SiteSetting.export_authorized_extensions = "tar.gz"
|
|
|
|
silence_stdout do
|
|
backuper = BackupRestore::Backuper.new(Discourse.system_user.id)
|
|
|
|
expect { backuper.send(:notify_user) }.to change { Topic.private_messages.count }.by(
|
|
1,
|
|
).and not_change { Upload.count }
|
|
end
|
|
|
|
expect(Topic.last.first_post.raw).to include(
|
|
"```text\n[2010-01-01 12:00:00] Notifying 'system' of the end of the backup...\n```",
|
|
)
|
|
end
|
|
|
|
it "include upload if log is long" do
|
|
SiteSetting.max_post_length = 250
|
|
|
|
silence_stdout do
|
|
backuper = BackupRestore::Backuper.new(Discourse.system_user.id)
|
|
|
|
expect { backuper.send(:notify_user) }.to change { Topic.private_messages.count }.by(
|
|
1,
|
|
).and change { Upload.where(original_filename: "log.txt.zip").count }.by(1)
|
|
end
|
|
|
|
expect(Topic.last.first_post.raw).to include("[log.txt.zip|attachment]")
|
|
end
|
|
|
|
it "includes trimmed logs if log is long and upload cannot be saved" do
|
|
SiteSetting.max_post_length = 348
|
|
SiteSetting.max_export_file_size_kb = 1
|
|
SiteSetting.export_authorized_extensions = "tar.gz"
|
|
|
|
silence_stdout do
|
|
backuper = BackupRestore::Backuper.new(Discourse.system_user.id)
|
|
|
|
1.upto(10).each { |i| backuper.send(:log, "Line #{i}") }
|
|
|
|
expect { backuper.send(:notify_user) }.to change { Topic.private_messages.count }.by(
|
|
1,
|
|
).and not_change { Upload.count }
|
|
end
|
|
|
|
expect(Topic.last.first_post.raw).to include(
|
|
"```text\n...\n[2010-01-01 12:00:00] Line 10\n[2010-01-01 12:00:00] Notifying 'system' of the end of the backup...\n```",
|
|
)
|
|
end
|
|
end
|
|
|
|
describe "#run" do
|
|
subject(:run) { backup.run }
|
|
|
|
let(:backup) { described_class.new(user.id) }
|
|
let(:user) { Discourse.system_user }
|
|
let(:store) { backup.store }
|
|
|
|
before { backup.stubs(:success).returns(success) }
|
|
|
|
context "when the result is successful" do
|
|
let(:success) { true }
|
|
it "refreshes disk stats" do
|
|
store.expects(:reset_cache).at_least_once
|
|
run
|
|
end
|
|
end
|
|
end
|
|
end
|