# 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