mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-19 05:09:38 +02:00
101 lines
3 KiB
Ruby
101 lines
3 KiB
Ruby
require "test_helper"
|
|
|
|
class UsersControllerTest < ActionDispatch::IntegrationTest
|
|
setup do
|
|
sign_in @user = users(:family_admin)
|
|
end
|
|
|
|
test "can supply custom redirect after update" do
|
|
patch user_url(@user), params: { user: { redirect_to: "home" } }
|
|
assert_redirected_to root_url
|
|
end
|
|
|
|
test "can update user profile" do
|
|
patch user_url(@user), params: {
|
|
user: {
|
|
first_name: "John",
|
|
last_name: "Doe",
|
|
onboarded_at: Time.current,
|
|
profile_image: file_fixture_upload("profile_image.png", "image/png", :binary),
|
|
family_attributes: {
|
|
name: "New Family Name",
|
|
country: "US",
|
|
date_format: "%m/%d/%Y",
|
|
currency: "USD",
|
|
locale: "en"
|
|
}
|
|
}
|
|
}
|
|
|
|
assert_redirected_to settings_profile_url
|
|
assert_equal "Your profile has been updated.", flash[:notice]
|
|
end
|
|
|
|
test "admin can reset family data" do
|
|
account = accounts(:investment)
|
|
category = categories(:income)
|
|
tag = tags(:one)
|
|
merchant = merchants(:netflix)
|
|
import = imports(:transaction)
|
|
budget = budgets(:one)
|
|
plaid_item = plaid_items(:one)
|
|
|
|
Provider::Plaid.any_instance.expects(:remove_item).with(plaid_item.access_token).once
|
|
|
|
perform_enqueued_jobs(only: FamilyResetJob) do
|
|
delete reset_user_url(@user)
|
|
end
|
|
|
|
assert_redirected_to settings_profile_url
|
|
assert_equal I18n.t("users.reset.success"), flash[:notice]
|
|
|
|
assert_not Account.exists?(account.id)
|
|
assert_not Category.exists?(category.id)
|
|
assert_not Tag.exists?(tag.id)
|
|
assert_not Merchant.exists?(merchant.id)
|
|
assert_not Import.exists?(import.id)
|
|
assert_not Budget.exists?(budget.id)
|
|
assert_not PlaidItem.exists?(plaid_item.id)
|
|
end
|
|
|
|
test "non-admin cannot reset family data" do
|
|
sign_in @member = users(:family_member)
|
|
|
|
delete reset_user_url(@member)
|
|
|
|
assert_redirected_to settings_profile_url
|
|
assert_equal I18n.t("users.reset.unauthorized"), flash[:alert]
|
|
assert_no_enqueued_jobs only: FamilyResetJob
|
|
end
|
|
|
|
test "member can deactivate their account" do
|
|
sign_in @member = users(:family_member)
|
|
delete user_url(@member)
|
|
|
|
assert_redirected_to root_url
|
|
|
|
assert_not User.find(@member.id).active?
|
|
assert_enqueued_with(job: UserPurgeJob, args: [ @member ])
|
|
end
|
|
|
|
test "admin prevented from deactivating when other users are present" do
|
|
sign_in @admin = users(:family_admin)
|
|
delete user_url(users(:family_member))
|
|
|
|
assert_redirected_to settings_profile_url
|
|
assert_equal "Admin cannot delete account while other users are present. Please delete all members first.", flash[:alert]
|
|
assert_no_enqueued_jobs only: UserPurgeJob
|
|
assert User.find(@admin.id).active?
|
|
end
|
|
|
|
test "admin can deactivate their account when they are the last user in the family" do
|
|
sign_in @admin = users(:family_admin)
|
|
users(:family_member).destroy
|
|
|
|
delete user_url(@admin)
|
|
|
|
assert_redirected_to root_url
|
|
assert_not User.find(@admin.id).active?
|
|
assert_enqueued_with(job: UserPurgeJob, args: [ @admin ])
|
|
end
|
|
end
|