Files
sure/test/models/binance_item/spot_importer_test.rb
Louis 455c74dcfa Add Binance support, heavily inspired by the Coinbase one (#1317)
* feat: add Binance support (Items, Accounts, Importers, Processor, and Sync)

* refactor: deduplicate 'stablecoins' constant and push stale_rate filter to SQL

---------

Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
2026-04-07 14:43:17 +02:00

54 lines
1.7 KiB
Ruby

# frozen_string_literal: true
require "test_helper"
class BinanceItem::SpotImporterTest < ActiveSupport::TestCase
setup do
@provider = mock
@family = families(:dylan_family)
@item = BinanceItem.create!(family: @family, name: "B", api_key: "k", api_secret: "s")
end
test "returns normalized assets with source=spot" do
@provider.stubs(:get_spot_account).returns({
"balances" => [
{ "asset" => "BTC", "free" => "1.5", "locked" => "0.5" },
{ "asset" => "ETH", "free" => "10.0", "locked" => "0.0" },
{ "asset" => "SHIB", "free" => "0.0", "locked" => "0.0" }
]
})
result = BinanceItem::SpotImporter.new(@item, provider: @provider).import
assert_equal "spot", result[:source]
assert_equal 2, result[:assets].size # SHIB filtered out (zero balance)
btc = result[:assets].find { |a| a[:symbol] == "BTC" }
assert_equal "1.5", btc[:free]
assert_equal "0.5", btc[:locked]
assert_equal "2.0", btc[:total]
end
test "returns empty assets on API error" do
@provider.stubs(:get_spot_account).raises(Provider::Binance::AuthenticationError, "Invalid key")
result = BinanceItem::SpotImporter.new(@item, provider: @provider).import
assert_equal "spot", result[:source]
assert_equal [], result[:assets]
assert_nil result[:raw]
end
test "filters out zero-balance assets" do
@provider.stubs(:get_spot_account).returns({
"balances" => [
{ "asset" => "BTC", "free" => "0.0", "locked" => "0.0" },
{ "asset" => "ETH", "free" => "0.0", "locked" => "0.0" }
]
})
result = BinanceItem::SpotImporter.new(@item, provider: @provider).import
assert_equal [], result[:assets]
end
end