2025-03-07 17:35:55 -05:00
|
|
|
require "test_helper"
|
|
|
|
|
2025-05-17 16:37:16 -04:00
|
|
|
class Holding::MaterializerTest < ActiveSupport::TestCase
|
2025-04-14 11:40:34 -04:00
|
|
|
include EntriesTestHelper
|
2025-03-07 17:35:55 -05:00
|
|
|
|
|
|
|
setup do
|
|
|
|
@family = families(:empty)
|
|
|
|
@account = @family.accounts.create!(name: "Test", balance: 20000, cash_balance: 20000, currency: "USD", accountable: Investment.new)
|
|
|
|
@aapl = securities(:aapl)
|
|
|
|
end
|
|
|
|
|
|
|
|
test "syncs holdings" do
|
|
|
|
create_trade(@aapl, account: @account, qty: 1, price: 200, date: Date.current)
|
|
|
|
|
|
|
|
# Should have yesterday's and today's holdings
|
|
|
|
assert_difference "@account.holdings.count", 2 do
|
2025-05-17 16:37:16 -04:00
|
|
|
Holding::Materializer.new(@account, strategy: :forward).materialize_holdings
|
2025-03-07 17:35:55 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test "purges stale holdings for unlinked accounts" do
|
|
|
|
# Since the account has no entries, there should be no holdings
|
2025-04-14 11:40:34 -04:00
|
|
|
Holding.create!(account: @account, security: @aapl, qty: 1, price: 100, amount: 100, currency: "USD", date: Date.current)
|
2025-03-07 17:35:55 -05:00
|
|
|
|
2025-04-14 11:40:34 -04:00
|
|
|
assert_difference "Holding.count", -1 do
|
2025-05-17 16:37:16 -04:00
|
|
|
Holding::Materializer.new(@account, strategy: :forward).materialize_holdings
|
2025-03-07 17:35:55 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|