discourse/spec/lib/backup_restore/backup_file_handler_spec.rb
Bianca Nenciu 11bf7ad539
FIX: Handle restore URLs ending with query params (#33384)
Moving parsing the URL to the constructor ensures that is_archive is
correctly initialized. This allows .sql.gz backups to be restored.
2025-07-07 18:43:31 +03:00

69 lines
2.1 KiB
Ruby

# frozen_string_literal: true
require_relative "shared_context_for_backup_restore"
RSpec.describe BackupRestore::BackupFileHandler do
include_context "with shared backup restore context"
it "works with current backup file format" do
expect_decompress_and_clean_up_to_work(
backup_filename: "backup_since_v1.6.tar.gz",
require_metadata_file: false,
require_uploads: true,
)
end
it "works with URLs" do
expect_decompress_and_clean_up_to_work(
backup_filename: "backup_since_v1.6.tar.gz",
url: "https://example.com/backups/backup_since_v1.6.tar.gz?",
require_metadata_file: false,
require_uploads: true,
)
end
it "works with SQL only backup file" do
expect_decompress_and_clean_up_to_work(
backup_filename: "sql_only_backup.sql.gz",
expected_dump_filename: "sql_only_backup.sql",
require_metadata_file: false,
require_uploads: false,
)
end
it "works with backup file which uses wrong upload path" do
expect_decompress_and_clean_up_to_work(
backup_filename: "backup_with_wrong_upload_path.tar.gz",
require_metadata_file: false,
require_uploads: true,
expected_upload_paths: %w[
uploads/default/original/1X/both.txt
uploads/default/original/1X/only-uploads.txt
uploads/default/original/1X/only-var.txt
],
) do |upload_path|
content = File.read(upload_path).chomp
case File.basename(upload_path)
when "both.txt", "only-var.txt"
expect(content).to eq("var")
when "only-uploads.txt"
expect(content).to eq("uploads")
end
end
end
it "allows overriding the backup store" do
SiteSetting.s3_backup_bucket = "s3-backup-bucket"
SiteSetting.s3_access_key_id = "s3-access-key-id"
SiteSetting.s3_secret_access_key = "s3-secret-access-key"
SiteSetting.backup_location = BackupLocationSiteSetting::S3
expect_decompress_and_clean_up_to_work(
backup_filename: "backup_since_v1.6.tar.gz",
require_metadata_file: false,
require_uploads: true,
location: BackupLocationSiteSetting::LOCAL,
)
end
end