Files
sure/test/models/enable_banking_account_test.rb
Louis e96fb0c23f feat(enable-banking): enhance transaction import, metadata handling, and UI (#1406)
* 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>
2026-04-10 23:19:48 +02:00

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