Add "data export" feature
- Adds a button in Account Settings where you can request a ZIP export of your Fizzy data - Export files are created in the background. When ready, a link to download them is sent to the requester. - Exports expire after 24 hours. And are limited to 10 per day.
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
require "test_helper"
|
||||
|
||||
class Account::ExportsControllerTest < ActionDispatch::IntegrationTest
|
||||
setup do
|
||||
sign_in_as :david
|
||||
end
|
||||
|
||||
test "create creates an export record and enqueues job" do
|
||||
assert_difference -> { Account::Export.count }, 1 do
|
||||
assert_enqueued_with(job: ExportAccountDataJob) do
|
||||
post account_exports_path
|
||||
end
|
||||
end
|
||||
|
||||
assert_redirected_to account_settings_path
|
||||
assert_equal "Export started. You'll receive an email when it's ready.", flash[:notice]
|
||||
end
|
||||
|
||||
test "create associates export with current user" do
|
||||
post account_exports_path
|
||||
|
||||
export = Account::Export.last
|
||||
assert_equal users(:david), export.user
|
||||
assert_equal Current.account, export.account
|
||||
assert export.pending?
|
||||
end
|
||||
|
||||
test "create rejects request when current export limit is reached" do
|
||||
Account::ExportsController::CURRENT_EXPORT_LIMIT.times do
|
||||
Account::Export.create!(account: Current.account, user: users(:david))
|
||||
end
|
||||
|
||||
assert_no_difference -> { Account::Export.count } do
|
||||
post account_exports_path
|
||||
end
|
||||
|
||||
assert_response :too_many_requests
|
||||
end
|
||||
|
||||
test "create allows request when exports are older than one day" do
|
||||
Account::ExportsController::CURRENT_EXPORT_LIMIT.times do
|
||||
Account::Export.create!(account: Current.account, user: users(:david), created_at: 2.days.ago)
|
||||
end
|
||||
|
||||
assert_difference -> { Account::Export.count }, 1 do
|
||||
post account_exports_path
|
||||
end
|
||||
|
||||
assert_redirected_to account_settings_path
|
||||
end
|
||||
|
||||
test "show displays completed export with download link" do
|
||||
export = Account::Export.create!(account: Current.account, user: users(:david))
|
||||
export.build
|
||||
|
||||
get account_export_path(export)
|
||||
|
||||
assert_response :success
|
||||
assert_select "a#download-link"
|
||||
end
|
||||
|
||||
test "show displays a warning if the export is missing" do
|
||||
get account_export_path("not-really-an-export")
|
||||
|
||||
assert_response :success
|
||||
assert_select "h2", "Download Expired"
|
||||
end
|
||||
|
||||
test "show does not allow access to another user's export" do
|
||||
export = Account::Export.create!(account: Current.account, user: users(:kevin))
|
||||
export.build
|
||||
|
||||
get account_export_path(export)
|
||||
|
||||
assert_response :success
|
||||
assert_select "h2", "Download Expired"
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user