mirror of
https://github.com/we-promise/sure.git
synced 2026-07-27 12:12:13 +00:00
CoinbaseAccount::Processor uses the compact class form, so its lexical nesting is only [CoinbaseAccount::Processor]. The bare `HoldingsProcessor` reference in process_holdings resolved against that nesting and raised `uninitialized constant CoinbaseAccount::Processor::HoldingsProcessor` instead of finding CoinbaseAccount::HoldingsProcessor. The error was swallowed by the rescue around process_holdings, so every Coinbase sync logged the failure and skipped the holdings step while the balance path still completed. Holdings and value never refreshed. Qualify the reference to CoinbaseAccount::HoldingsProcessor so it resolves absolutely, matching every sibling processor (Binance, Kraken, Snaptrade, Questrade, Indexa). Fixes #2412 Co-authored-by: agentloop <agentloop@localhost>
53 lines
1.7 KiB
Ruby
53 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "test_helper"
|
|
|
|
class CoinbaseAccount::ProcessorTest < ActiveSupport::TestCase
|
|
setup do
|
|
@family = families(:dylan_family)
|
|
@family.update!(currency: "USD")
|
|
@item = CoinbaseItem.create!(
|
|
family: @family,
|
|
name: "Coinbase",
|
|
api_key: "k",
|
|
api_secret: "s"
|
|
)
|
|
@coinbase_account = @item.coinbase_accounts.create!(
|
|
name: "Bitcoin Wallet",
|
|
account_id: "cb_btc_123",
|
|
currency: "BTC",
|
|
current_balance: 0.5,
|
|
raw_payload: { "native_balance" => { "amount" => "25000", "currency" => "USD" } }
|
|
)
|
|
@account = Account.create!(
|
|
family: @family,
|
|
name: "Coinbase BTC",
|
|
balance: 0,
|
|
currency: "USD",
|
|
accountable: Crypto.create!(subtype: "exchange")
|
|
)
|
|
AccountProvider.create!(account: @account, provider: @coinbase_account)
|
|
@coinbase_account.reload
|
|
end
|
|
|
|
# Regression for issue #2412: the bare `HoldingsProcessor` reference resolved
|
|
# as CoinbaseAccount::Processor::HoldingsProcessor and raised an uninitialized
|
|
# constant error that was swallowed, so holdings never refreshed.
|
|
test "process invokes CoinbaseAccount::HoldingsProcessor" do
|
|
CoinbaseAccount::HoldingsProcessor.any_instance.expects(:process).once
|
|
|
|
CoinbaseAccount::Processor.new(@coinbase_account).process
|
|
end
|
|
|
|
test "updates linked crypto account balance from native_balance" do
|
|
CoinbaseAccount::HoldingsProcessor.any_instance.stubs(:process).returns(nil)
|
|
|
|
CoinbaseAccount::Processor.new(@coinbase_account).process
|
|
|
|
@account.reload
|
|
assert_equal 25_000.to_d, @account.balance
|
|
assert_equal 0.to_d, @account.cash_balance
|
|
assert_equal "USD", @account.currency
|
|
end
|
|
end
|