1
0
Fork 0
mirror of https://github.com/maybe-finance/maybe.git synced 2025-07-21 22:29:38 +02:00
Maybe/test/models/exchange_rate_test.rb
Zach Gollwitzer 6dc1d22672
Market data sync refinements (#2252)
* Exchange rate syncer implementation

* Security price syncer

* Fix issues with provider API

* Add back prod schedule

* Add back price and exchange rate syncs to account syncs

* Remove unused stock_exchanges table
2025-05-16 14:17:56 -04:00

70 lines
2 KiB
Ruby

require "test_helper"
require "ostruct"
class ExchangeRateTest < ActiveSupport::TestCase
include ProviderTestHelper
setup do
@provider = mock
ExchangeRate.stubs(:provider).returns(@provider)
end
test "finds rate in DB" do
existing_rate = exchange_rates(:one)
@provider.expects(:fetch_exchange_rate).never
assert_equal existing_rate, ExchangeRate.find_or_fetch_rate(
from: existing_rate.from_currency,
to: existing_rate.to_currency,
date: existing_rate.date
)
end
test "fetches rate from provider without cache" do
ExchangeRate.delete_all
provider_response = provider_success_response(
OpenStruct.new(
from: "USD",
to: "EUR",
date: Date.current,
rate: 1.2
)
)
@provider.expects(:fetch_exchange_rate).returns(provider_response)
assert_no_difference "ExchangeRate.count" do
assert_equal 1.2, ExchangeRate.find_or_fetch_rate(from: "USD", to: "EUR", date: Date.current, cache: false).rate
end
end
test "fetches rate from provider with cache" do
ExchangeRate.delete_all
provider_response = provider_success_response(
OpenStruct.new(
from: "USD",
to: "EUR",
date: Date.current,
rate: 1.2
)
)
@provider.expects(:fetch_exchange_rate).returns(provider_response)
assert_difference "ExchangeRate.count", 1 do
assert_equal 1.2, ExchangeRate.find_or_fetch_rate(from: "USD", to: "EUR", date: Date.current, cache: true).rate
end
end
test "returns nil on provider error" do
provider_response = provider_error_response(StandardError.new("Test error"))
@provider.expects(:fetch_exchange_rate).returns(provider_response)
assert_nil ExchangeRate.find_or_fetch_rate(from: "USD", to: "EUR", date: Date.current, cache: true)
end
end