mirror of
https://github.com/we-promise/sure.git
synced 2026-04-19 03:54:08 +00:00
* 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>
54 lines
1.7 KiB
Ruby
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
|