discourse/spec/jobs/vacate_legacy_prefix_backups_spec.rb
Jarek Radosz e36377d9ab
DEV: Don't user before(:all)/after(:all) (#13389)
Leaking state and non-obvious order (before :all runs *before* RailsHelper.test_setup) are not worth it.
A replacement PR for #13370. Fixes some flaky specs, e.g.
```
bin/rspec './spec/components/freedom_patches/translate_accelerator_spec.rb[1:3]' './spec/jobs/clean_up_user_export_topics_spec.rb[1:1]' --tag ~type:multisite --seed 35994
```

Also included:
* DEV: No need for locale reset (we do it anyway in rails_helper in `test_setup`)
2021-06-15 17:25:06 +02:00

53 lines
1.5 KiB
Ruby

# frozen_string_literal: true
require "s3_helper"
require "rails_helper"
describe Jobs::VacateLegacyPrefixBackups, type: :multisite do
let(:bucket_name) { "backupbucket" }
before do
@s3_client = Aws::S3::Client.new(stub_responses: true)
@s3_options = { client: @s3_client }
@objects = []
create_backups
@s3_client.stub_responses(:list_objects_v2, -> (context) do
{ contents: objects_with_prefix(context) }
end)
setup_s3
SiteSetting.s3_backup_bucket = bucket_name
SiteSetting.backup_location = BackupLocationSiteSetting::S3
end
it "copies the backups from legacy path to new path" do
@objects.each do |object|
legacy_key = object[:key]
legacy_object = @s3_client.get_object(bucket: bucket_name, key: legacy_key)
@s3_client.expects(:copy_object).with({
copy_source: File.join(bucket_name, legacy_key),
bucket: bucket_name,
key: legacy_key.sub(/^backups\//, "")
})
@s3_client.expects(:delete_object).with(bucket: bucket_name, key: legacy_key).returns(legacy_object)
end
described_class.new.execute_onceoff(s3_options: @s3_options)
end
def objects_with_prefix(context)
prefix = context.params[:prefix]
@objects.select { |obj| obj[:key].start_with?(prefix) }
end
def create_backups
@objects.clear
@objects << { key: "backups/default/b.tar.gz", size: 17, last_modified: Time.parse("2018-09-13T15:10:00Z") }
@objects << { key: "backups/default/filename.tar.gz", size: 17, last_modified: Time.parse("2019-10-18T17:20:00Z") }
end
end