mirror of
https://github.com/we-promise/sure.git
synced 2026-04-18 19:44:09 +00:00
* feat(enable-banking): enhance transaction import, metadata handling, and UI * fix(enable-banking): address security, sync edge cases and PR feedback * fix(enable-banking): resolve silent failures, auth overrides, and sync logic bugs * fix(enable-banking): resolve sync logic bugs, trailing whitespaces, and apply safe_psu_headers * test(enable-banking): mock set_current_balance to return success result * fix(budget): properly filter pending transactions and classify synced loan payments * style: fix trailing whitespace detected by rubocop * refactor: address code review feedback for Enable Banking sync and reporting --------- Signed-off-by: Louis <contact@boul2gom.com> Signed-off-by: Juan José Mata <juanjo.mata@gmail.com> Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
153 lines
5.0 KiB
Ruby
153 lines
5.0 KiB
Ruby
require "test_helper"
|
|
|
|
class EnableBankingAccountTest < ActiveSupport::TestCase
|
|
setup do
|
|
@family = families(:dylan_family)
|
|
@item = EnableBankingItem.create!(
|
|
family: @family,
|
|
name: "Test EB",
|
|
country_code: "FR",
|
|
application_id: "app_id",
|
|
client_certificate: "cert"
|
|
)
|
|
@account = EnableBankingAccount.create!(
|
|
enable_banking_item: @item,
|
|
name: "Mon compte",
|
|
uid: "hash_abc123",
|
|
currency: "EUR"
|
|
)
|
|
end
|
|
|
|
# suggested_account_type / suggested_subtype mapping
|
|
test "suggests Depository checking for CACC" do
|
|
@account.update!(account_type: "CACC")
|
|
assert_equal "Depository", @account.suggested_account_type
|
|
assert_equal "checking", @account.suggested_subtype
|
|
end
|
|
|
|
test "suggests Depository savings for SVGS" do
|
|
@account.update!(account_type: "SVGS")
|
|
assert_equal "Depository", @account.suggested_account_type
|
|
assert_equal "savings", @account.suggested_subtype
|
|
end
|
|
|
|
test "suggests CreditCard for CARD" do
|
|
@account.update!(account_type: "CARD")
|
|
assert_equal "CreditCard", @account.suggested_account_type
|
|
assert_equal "credit_card", @account.suggested_subtype
|
|
end
|
|
|
|
test "suggests Loan for LOAN" do
|
|
@account.update!(account_type: "LOAN")
|
|
assert_equal "Loan", @account.suggested_account_type
|
|
assert_nil @account.suggested_subtype
|
|
end
|
|
|
|
test "suggests Loan mortgage for MORT" do
|
|
@account.update!(account_type: "MORT")
|
|
assert_equal "Loan", @account.suggested_account_type
|
|
assert_equal "mortgage", @account.suggested_subtype
|
|
end
|
|
|
|
test "returns nil for OTHR" do
|
|
@account.update!(account_type: "OTHR")
|
|
assert_nil @account.suggested_account_type
|
|
assert_nil @account.suggested_subtype
|
|
end
|
|
|
|
test "suggests Depository savings for MOMA and ONDP" do
|
|
@account.update!(account_type: "MOMA")
|
|
assert_equal "Depository", @account.suggested_account_type
|
|
assert_equal "savings", @account.suggested_subtype
|
|
|
|
@account.update!(account_type: "ONDP")
|
|
assert_equal "Depository", @account.suggested_account_type
|
|
assert_equal "savings", @account.suggested_subtype
|
|
end
|
|
|
|
test "suggests Depository checking for NREX, TAXE, and TRAS" do
|
|
@account.update!(account_type: "NREX")
|
|
assert_equal "Depository", @account.suggested_account_type
|
|
assert_equal "checking", @account.suggested_subtype
|
|
|
|
@account.update!(account_type: "TAXE")
|
|
assert_equal "Depository", @account.suggested_account_type
|
|
assert_equal "checking", @account.suggested_subtype
|
|
|
|
@account.update!(account_type: "TRAS")
|
|
assert_equal "Depository", @account.suggested_account_type
|
|
assert_equal "checking", @account.suggested_subtype
|
|
end
|
|
|
|
test "returns nil when account_type is blank" do
|
|
@account.update!(account_type: nil)
|
|
assert_nil @account.suggested_account_type
|
|
assert_nil @account.suggested_subtype
|
|
end
|
|
|
|
test "is case insensitive for account type mapping" do
|
|
@account.update!(account_type: "svgs")
|
|
assert_equal "Depository", @account.suggested_account_type
|
|
assert_equal "savings", @account.suggested_subtype
|
|
end
|
|
|
|
# upsert_enable_banking_snapshot! stores new fields
|
|
test "stores product from snapshot" do
|
|
@account.upsert_enable_banking_snapshot!({
|
|
uid: "hash_abc123",
|
|
identification_hash: "hash_abc123",
|
|
currency: "EUR",
|
|
cash_account_type: "SVGS",
|
|
product: "Livret A"
|
|
})
|
|
assert_equal "Livret A", @account.reload.product
|
|
end
|
|
|
|
test "stores identification_hashes from snapshot" do
|
|
@account.upsert_enable_banking_snapshot!({
|
|
uid: "uid_uuid_123",
|
|
identification_hash: "hash_abc123",
|
|
identification_hashes: [ "hash_abc123", "hash_old456" ],
|
|
currency: "EUR",
|
|
cash_account_type: "CACC"
|
|
})
|
|
reloaded_account = @account.reload
|
|
assert_includes reloaded_account.identification_hashes, "hash_abc123"
|
|
assert_includes reloaded_account.identification_hashes, "hash_old456"
|
|
end
|
|
|
|
test "stores credit_limit from snapshot" do
|
|
@account.upsert_enable_banking_snapshot!({
|
|
uid: "uid_uuid_123",
|
|
identification_hash: "hash_abc123",
|
|
currency: "EUR",
|
|
cash_account_type: "CARD",
|
|
credit_limit: { amount: "2000.00", currency: "EUR" }
|
|
})
|
|
assert_equal 2000.00, @account.reload.credit_limit.to_f
|
|
end
|
|
|
|
test "stores account_servicer bic in institution_metadata" do
|
|
@account.upsert_enable_banking_snapshot!({
|
|
uid: "uid_uuid_123",
|
|
identification_hash: "hash_abc123",
|
|
currency: "EUR",
|
|
cash_account_type: "CACC",
|
|
account_servicer: { bic_fi: "BOURFRPPXXX", name: "Boursobank" }
|
|
})
|
|
metadata = @account.reload.institution_metadata
|
|
assert_equal "BOURFRPPXXX", metadata["bic"]
|
|
assert_equal "Boursobank", metadata["servicer_name"]
|
|
end
|
|
|
|
test "stores empty identification_hashes when not in snapshot" do
|
|
@account.upsert_enable_banking_snapshot!({
|
|
uid: "uid_uuid_123",
|
|
identification_hash: "hash_abc123",
|
|
currency: "EUR",
|
|
cash_account_type: "CACC"
|
|
})
|
|
assert_equal [], @account.reload.identification_hashes
|
|
end
|
|
end
|