Files
sure/test/models/exchange_rate_pair_test.rb
soky srm e40811b1ee Add improvements from security providers to FX providers also (#1445)
* FIX prefer provider rate always

- add debugging also

* Move logic from securities over

* FIXes

* Review fixes

* Update provided.rb

---------

Signed-off-by: soky srm <sokysrm@gmail.com>
2026-04-13 00:51:23 +02:00

79 lines
2.6 KiB
Ruby

require "test_helper"
class ExchangeRatePairTest < ActiveSupport::TestCase
test "for_pair creates a new pair if none exists" do
ExchangeRatePair.delete_all
pair = ExchangeRatePair.for_pair(from: "USD", to: "EUR")
assert_equal "USD", pair.from_currency
assert_equal "EUR", pair.to_currency
assert_nil pair.first_provider_rate_on
end
test "for_pair returns existing pair idempotently" do
ExchangeRatePair.delete_all
pair1 = ExchangeRatePair.for_pair(from: "USD", to: "EUR")
pair2 = ExchangeRatePair.for_pair(from: "USD", to: "EUR")
assert_equal pair1.id, pair2.id
end
test "for_pair auto-resets clamp when provider changes" do
ExchangeRatePair.delete_all
original_provider = Setting.exchange_rate_provider
begin
Setting.exchange_rate_provider = "twelve_data"
ExchangeRatePair.create!(
from_currency: "USD",
to_currency: "EUR",
first_provider_rate_on: 1.year.ago.to_date,
provider_name: "twelve_data"
)
Setting.exchange_rate_provider = "yahoo_finance"
refreshed = ExchangeRatePair.for_pair(from: "USD", to: "EUR")
assert_nil refreshed.first_provider_rate_on
assert_equal "yahoo_finance", refreshed.provider_name
ensure
Setting.exchange_rate_provider = original_provider
end
end
test "record_first_provider_rate_on sets date on NULL" do
ExchangeRatePair.delete_all
ExchangeRatePair.for_pair(from: "USD", to: "EUR")
ExchangeRatePair.record_first_provider_rate_on(from: "USD", to: "EUR", date: 6.months.ago.to_date)
pair = ExchangeRatePair.find_by!(from_currency: "USD", to_currency: "EUR")
assert_equal 6.months.ago.to_date, pair.first_provider_rate_on
end
test "record_first_provider_rate_on moves earlier but not forward" do
ExchangeRatePair.delete_all
original_provider = Setting.exchange_rate_provider
begin
Setting.exchange_rate_provider = "twelve_data"
ExchangeRatePair.create!(
from_currency: "USD",
to_currency: "EUR",
first_provider_rate_on: 6.months.ago.to_date,
provider_name: "twelve_data"
)
ExchangeRatePair.record_first_provider_rate_on(from: "USD", to: "EUR", date: 1.year.ago.to_date)
pair = ExchangeRatePair.find_by!(from_currency: "USD", to_currency: "EUR")
assert_equal 1.year.ago.to_date, pair.first_provider_rate_on
ExchangeRatePair.record_first_provider_rate_on(from: "USD", to: "EUR", date: 3.months.ago.to_date)
pair.reload
assert_equal 1.year.ago.to_date, pair.first_provider_rate_on
ensure
Setting.exchange_rate_provider = original_provider
end
end
end