mirror of
https://github.com/discourse/discourse.git
synced 2024-12-03 00:03:56 +08:00
e2c415457c
Discourse automatically sends a private message after backup or restore finished. The private message used to contain the log inline even when it was very long. A very long log can create issues because the length of the post will be over the maximum allowed length of a post. When that happens, Discourse will try to create an upload with the logs. If that fails, it will trim the log and inline it.
75 lines
2.4 KiB
Ruby
75 lines
2.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
describe BackupRestore::Backuper 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 '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
|
|
|
|
describe '#notify_user' do
|
|
before do
|
|
freeze_time Time.zone.parse('2010-01-01 12:00')
|
|
end
|
|
|
|
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 change { Upload.count }.by(0)
|
|
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 = silence_stdout { 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 do |i|
|
|
backuper.send(:log, "Line #{i}")
|
|
end
|
|
|
|
expect { backuper.send(:notify_user) }
|
|
.to change { Topic.private_messages.count }.by(1)
|
|
.and change { Upload.count }.by(0)
|
|
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
|
|
end
|