992f15066b
ZipKit can read and write files directly from S3 which makes both imports and exports way more efficient in terms of disk usage.
63 lines
2.0 KiB
Ruby
63 lines
2.0 KiB
Ruby
require "test_helper"
|
|
|
|
class Account::ExportTest < ActiveSupport::TestCase
|
|
test "build_later enqueues ExportDataJob" do
|
|
export = Account::Export.create!(account: Current.account, user: users(:david))
|
|
|
|
assert_enqueued_with(job: ExportDataJob, args: [ export ]) do
|
|
export.build_later
|
|
end
|
|
end
|
|
|
|
test "build sets status to failed on error" do
|
|
export = Account::Export.create!(account: Current.account, user: users(:david))
|
|
ZipFile.stubs(:create_for).raises(StandardError.new("Test error"))
|
|
|
|
assert_raises(StandardError) do
|
|
export.build
|
|
end
|
|
|
|
assert export.failed?
|
|
end
|
|
|
|
test "cleanup deletes exports completed more than 24 hours ago" do
|
|
old_export = Account::Export.create!(account: Current.account, user: users(:david), status: :completed, completed_at: 25.hours.ago)
|
|
recent_export = Account::Export.create!(account: Current.account, user: users(:david), status: :completed, completed_at: 23.hours.ago)
|
|
pending_export = Account::Export.create!(account: Current.account, user: users(:david), status: :pending)
|
|
|
|
Export.cleanup
|
|
|
|
assert_not Export.exists?(old_export.id)
|
|
assert Export.exists?(recent_export.id)
|
|
assert Export.exists?(pending_export.id)
|
|
end
|
|
|
|
test "build generates zip with account data" do
|
|
export = Account::Export.create!(account: Current.account, user: users(:david))
|
|
|
|
export.build
|
|
|
|
assert export.completed?
|
|
assert export.file.attached?
|
|
assert_equal "application/zip", export.file.content_type
|
|
end
|
|
|
|
test "build includes blob files in zip" do
|
|
blob = ActiveStorage::Blob.create_and_upload!(
|
|
io: file_fixture("moon.jpg").open,
|
|
filename: "moon.jpg",
|
|
content_type: "image/jpeg"
|
|
)
|
|
export = Account::Export.create!(account: Current.account, user: users(:david))
|
|
|
|
export.build
|
|
|
|
assert export.completed?
|
|
export.file.open do |file|
|
|
reader = ZipKit::FileReader.read_zip_structure(io: file)
|
|
entry = reader.find { |e| e.filename == "storage/#{blob.key}" }
|
|
assert entry, "Expected blob file in zip"
|
|
end
|
|
end
|
|
end
|