Files
fizzy/test/models/account/export_test.rb
T
Stanko K.R. 992f15066b Replace RubyZip with ZipKit
ZipKit can read and write files directly from S3 which makes both imports and exports way more efficient in terms of disk usage.
2026-02-02 12:36:48 +01:00

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