1
0
Fork 0
mirror of https://github.com/maybe-finance/maybe.git synced 2025-07-18 20:59:39 +02:00
Maybe/test/models/trade_import_test.rb
Zach Gollwitzer e4ee06c9f6
Security resolver and health checker (#2281)
* Setup health check

* Security health checker cron

* Use resolver throughout codebase

* Use resolver for trade builder

* Add security health checks to schedule

* Handle no provider

* Lint fixes
2025-05-22 12:43:24 -04:00

65 lines
1.9 KiB
Ruby

require "test_helper"
require "ostruct"
class TradeImportTest < ActiveSupport::TestCase
include ActiveJob::TestHelper, ImportInterfaceTest
setup do
@subject = @import = imports(:trade)
@provider = mock
Security.stubs(:provider).returns(@provider)
end
test "imports trades and accounts" do
aapl_resolver = mock
googl_resolver = mock
Security::Resolver.expects(:new)
.with("AAPL", exchange_operating_mic: nil)
.returns(aapl_resolver)
.once
Security::Resolver.expects(:new)
.with("GOOGL", exchange_operating_mic: "XNAS")
.returns(googl_resolver)
.once
aapl = securities(:aapl)
googl = Security.create!(ticker: "GOOGL", exchange_operating_mic: "XNAS")
aapl_resolver.stubs(:resolve).returns(aapl)
googl_resolver.stubs(:resolve).returns(googl)
import = <<~CSV
date,ticker,qty,price,currency,account,name,exchange_operating_mic
01/01/2024,AAPL,10,150.00,USD,TestAccount1,Apple Purchase,
01/02/2024,GOOGL,5,2500.00,USD,TestAccount1,Google Purchase,XNAS
CSV
@import.update!(
account: accounts(:depository),
raw_file_str: import,
date_col_label: "date",
ticker_col_label: "ticker",
qty_col_label: "qty",
price_col_label: "price",
exchange_operating_mic_col_label: "exchange_operating_mic",
date_format: "%m/%d/%Y",
signage_convention: "inflows_positive"
)
@import.generate_rows_from_csv
@import.mappings.create! key: "TestAccount1", create_when_empty: true, type: "Import::AccountMapping"
@import.reload
assert_difference -> { Entry.count } => 2,
-> { Trade.count } => 2,
-> { Account.count } => 1 do
@import.publish
end
assert_equal "complete", @import.status
end
end