Files
fizzy/test/models/user/data_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

71 lines
2.1 KiB
Ruby

require "test_helper"
class User::DataExportTest < ActiveSupport::TestCase
test "build generates zip with card JSON files" do
export = User::DataExport.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 sets status to processing then completed" do
export = User::DataExport.create!(account: Current.account, user: users(:david))
export.build
assert export.completed?
assert_not_nil export.completed_at
end
test "build sends email when completed" do
export = User::DataExport.create!(account: Current.account, user: users(:david))
assert_enqueued_jobs 1, only: ActionMailer::MailDeliveryJob do
export.build
end
end
test "build includes only accessible cards for user" do
user = users(:david)
export = User::DataExport.create!(account: Current.account, user: user)
export.build
assert export.completed?
assert export.file.attached?
Tempfile.create([ "test", ".zip" ]) do |temp|
temp.binmode
export.file.download { |chunk| temp.write(chunk) }
temp.rewind
reader = ZipKit::FileReader.read_zip_structure(io: temp)
json_files = reader.select { |e| e.filename.end_with?(".json") }
assert json_files.any?, "Zip should contain at least one JSON file"
extractor = json_files.first.extractor_from(temp)
json_content = JSON.parse(extractor.extract)
assert json_content.key?("number")
assert json_content.key?("title")
assert json_content.key?("board")
assert json_content.key?("creator")
assert json_content["creator"].key?("id")
assert json_content["creator"].key?("name")
assert json_content["creator"].key?("email")
assert json_content.key?("description")
assert json_content.key?("comments")
end
end
test "build_later enqueues ExportDataJob" do
export = User::DataExport.create!(account: Current.account, user: users(:david))
assert_enqueued_with(job: ExportDataJob, args: [ export ]) do
export.build_later
end
end
end