71 lines
2.1 KiB
Ruby
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 DataExportJob" do
|
|
export = User::DataExport.create!(account: Current.account, user: users(:david))
|
|
|
|
assert_enqueued_with(job: DataExportJob, args: [ export ]) do
|
|
export.build_later
|
|
end
|
|
end
|
|
end
|