Files
sure/test/models/ibkr_item_importer_test.rb
Gian-Reto Tarnutzer ce5d7dd736 Add Interactive Brokers Provider (#1722)
* Display multi-currency holdings correctly

* Implement IBKR provider

* Fix: Use historical exchange rate for historical prices

* Add brokerage exchange rate for trades

* Sync historical balances from IBKR

* Add logos in activity history

* Fix privacy mode blur in account view

* Improve IBKR XML Flex report parser errors
2026-05-12 23:45:19 +02:00

43 lines
1.5 KiB
Ruby

require "test_helper"
class IbkrItemImporterTest < ActiveSupport::TestCase
setup do
@family = families(:empty)
@ibkr_item = @family.ibkr_items.create!(
name: "Interactive Brokers",
query_id: "QUERY123",
token: "TOKEN123"
)
end
test "imports accounts from parsed flex statement" do
provider = mock("ibkr_provider")
provider.expects(:download_statement).returns(file_fixture("ibkr/flex_statement.xml").read)
assert_difference "IbkrAccount.count", 2 do
result = IbkrItem::Importer.new(@ibkr_item, ibkr_provider: provider).import
assert_equal true, result[:success]
assert_equal 2, result[:accounts_imported]
end
primary_account = @ibkr_item.ibkr_accounts.find_by!(ibkr_account_id: "U1234567")
assert_equal "CHF", primary_account.currency
assert_equal BigDecimal("3351.0"), primary_account.current_balance
assert_equal 2, primary_account.raw_equity_summary_payload.size
assert_equal 1, primary_account.raw_holdings_payload.size
assert_equal 2, primary_account.raw_activities_payload["trades"].size
assert_equal 2, primary_account.raw_activities_payload["cash_transactions"].size
end
test "raises parse error for malformed flex statement xml" do
provider = mock("ibkr_provider")
provider.expects(:download_statement).returns("<FlexQueryResponse><FlexStatement>")
error = assert_raises(IbkrItem::ReportParser::ParseError) do
IbkrItem::Importer.new(@ibkr_item, ibkr_provider: provider).import
end
assert_match "Invalid IBKR Flex XML", error.message
end
end