mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-25 16:19:40 +02:00
Fix account sync when prices missing (#1127)
This commit is contained in:
parent
525439e44d
commit
cf861ccff9
2 changed files with 62 additions and 1 deletions
|
@ -16,7 +16,7 @@ class Issue::PricesMissing < Issue
|
||||||
missing_prices.each do |ticker, dates|
|
missing_prices.each do |ticker, dates|
|
||||||
next unless issuable.owns_ticker?(ticker)
|
next unless issuable.owns_ticker?(ticker)
|
||||||
|
|
||||||
oldest_date = dates.min
|
oldest_date = dates.min.to_date
|
||||||
expected_price_count = (oldest_date..Date.current).count
|
expected_price_count = (oldest_date..Date.current).count
|
||||||
prices = Security::Price.find_prices(ticker: ticker, start_date: oldest_date)
|
prices = Security::Price.find_prices(ticker: ticker, start_date: oldest_date)
|
||||||
stale = false if prices.count < expected_price_count
|
stale = false if prices.count < expected_price_count
|
||||||
|
|
61
test/models/issue/prices_missing_test.rb
Normal file
61
test/models/issue/prices_missing_test.rb
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
require "test_helper"
|
||||||
|
|
||||||
|
class Issue::PricesMissingTest < ActiveSupport::TestCase
|
||||||
|
setup do
|
||||||
|
@issue = Issue::PricesMissing.new
|
||||||
|
@account = Account.new(id: "123abc")
|
||||||
|
@issue.issuable = @account
|
||||||
|
end
|
||||||
|
|
||||||
|
test "stale? returns false when no prices are found" do
|
||||||
|
@issue.append_missing_price("AAPL", (Date.current - 5.days).to_s)
|
||||||
|
|
||||||
|
Security::Price.expects(:find_prices).returns([])
|
||||||
|
@account.expects(:owns_ticker?).with("AAPL").returns(true)
|
||||||
|
|
||||||
|
assert_not @issue.stale?
|
||||||
|
end
|
||||||
|
|
||||||
|
test "stale? returns true when all expected prices are found" do
|
||||||
|
start_date = Date.current - 5.days
|
||||||
|
@issue.append_missing_price("AAPL", start_date.to_s)
|
||||||
|
|
||||||
|
expected_prices = (start_date..Date.current).map { |date| { date: date } }
|
||||||
|
Security::Price.expects(:find_prices).returns(expected_prices)
|
||||||
|
@account.expects(:owns_ticker?).with("AAPL").returns(true)
|
||||||
|
|
||||||
|
assert @issue.stale?
|
||||||
|
end
|
||||||
|
|
||||||
|
test "stale? returns false when some prices are missing" do
|
||||||
|
start_date = Date.current - 5.days
|
||||||
|
@issue.append_missing_price("AAPL", start_date.to_s)
|
||||||
|
|
||||||
|
incomplete_prices = (start_date..Date.current - 2.days).map { |date| { date: date } }
|
||||||
|
Security::Price.expects(:find_prices).returns(incomplete_prices)
|
||||||
|
@account.expects(:owns_ticker?).with("AAPL").returns(true)
|
||||||
|
|
||||||
|
assert_not @issue.stale?
|
||||||
|
end
|
||||||
|
|
||||||
|
test "stale? returns true when the account doesn't own the ticker" do
|
||||||
|
@issue.append_missing_price("AAPL", (Date.current - 5.days).to_s)
|
||||||
|
|
||||||
|
@account.expects(:owns_ticker?).with("AAPL").returns(false)
|
||||||
|
|
||||||
|
assert @issue.stale?
|
||||||
|
end
|
||||||
|
|
||||||
|
test "stale? handles multiple tickers correctly" do
|
||||||
|
@issue.append_missing_price("AAPL", (Date.current - 5.days).to_s)
|
||||||
|
@issue.append_missing_price("GOOGL", (Date.current - 3.days).to_s)
|
||||||
|
|
||||||
|
@account.expects(:owns_ticker?).with("AAPL").returns(true)
|
||||||
|
@account.expects(:owns_ticker?).with("GOOGL").returns(true)
|
||||||
|
|
||||||
|
Security::Price.expects(:find_prices).with(ticker: "AAPL", start_date: Date.current - 5.days).returns([])
|
||||||
|
Security::Price.expects(:find_prices).with(ticker: "GOOGL", start_date: Date.current - 3.days).returns([])
|
||||||
|
|
||||||
|
assert_not @issue.stale?
|
||||||
|
end
|
||||||
|
end
|
Loading…
Add table
Add a link
Reference in a new issue