mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-24 23:59:40 +02:00
Data provider simplification, tests, and documentation (#1997)
* Ignore env.test from source control * Simplification of providers interface * Synth tests * Update money to use new find rates method * Remove unused issues code * Additional issue feature removals * Update price data fetching and tests * Update documentation for providers * Security test fixes * Fix self host test * Update synth usage data access * Remove AI pr schema changes
This commit is contained in:
parent
dd75cadebc
commit
f65b93a352
95 changed files with 2014 additions and 1638 deletions
|
@ -3,20 +3,34 @@ require "test_helper"
|
|||
module ExchangeRateProviderInterfaceTest
|
||||
extend ActiveSupport::Testing::Declarative
|
||||
|
||||
test "exchange rate provider interface" do
|
||||
assert_respond_to @subject, :healthy?
|
||||
assert_respond_to @subject, :fetch_exchange_rate
|
||||
assert_respond_to @subject, :fetch_exchange_rates
|
||||
end
|
||||
test "fetches single exchange rate" do
|
||||
VCR.use_cassette("#{vcr_key_prefix}/exchange_rate") do
|
||||
response = @subject.fetch_exchange_rate(
|
||||
from: "USD",
|
||||
to: "GBP",
|
||||
date: Date.parse("01.01.2024")
|
||||
)
|
||||
|
||||
test "exchange rate provider response contract" do
|
||||
VCR.use_cassette "synth/exchange_rate" do
|
||||
response = @subject.fetch_exchange_rate from: "USD", to: "MXN", date: Date.iso8601("2024-08-01")
|
||||
rate = response.data.rate
|
||||
|
||||
assert_respond_to response, :rate
|
||||
assert_respond_to response, :success?
|
||||
assert_respond_to response, :error
|
||||
assert_respond_to response, :raw_response
|
||||
assert_kind_of ExchangeRate, rate
|
||||
assert_equal "USD", rate.from_currency
|
||||
assert_equal "GBP", rate.to_currency
|
||||
end
|
||||
end
|
||||
|
||||
test "fetches paginated exchange_rate historical data" do
|
||||
VCR.use_cassette("#{vcr_key_prefix}/exchange_rates") do
|
||||
response = @subject.fetch_exchange_rates(
|
||||
from: "USD", to: "GBP", start_date: Date.parse("01.01.2024"), end_date: Date.parse("31.07.2024")
|
||||
)
|
||||
|
||||
assert 213, response.data.rates.count # 213 days between 01.01.2024 and 31.07.2024
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def vcr_key_prefix
|
||||
@subject.class.name.demodulize.underscore
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,26 +0,0 @@
|
|||
require "test_helper"
|
||||
|
||||
module SecurityPriceProviderInterfaceTest
|
||||
extend ActiveSupport::Testing::Declarative
|
||||
|
||||
test "security price provider interface" do
|
||||
assert_respond_to @subject, :healthy?
|
||||
assert_respond_to @subject, :fetch_security_prices
|
||||
end
|
||||
|
||||
test "security price provider response contract" do
|
||||
VCR.use_cassette "synth/security_prices" do
|
||||
response = @subject.fetch_security_prices(
|
||||
ticker: "AAPL",
|
||||
mic_code: "XNAS",
|
||||
start_date: Date.iso8601("2024-01-01"),
|
||||
end_date: Date.iso8601("2024-08-01")
|
||||
)
|
||||
|
||||
assert_respond_to response, :prices
|
||||
assert_respond_to response, :success?
|
||||
assert_respond_to response, :error
|
||||
assert_respond_to response, :raw_response
|
||||
end
|
||||
end
|
||||
end
|
62
test/interfaces/security_provider_interface_test.rb
Normal file
62
test/interfaces/security_provider_interface_test.rb
Normal file
|
@ -0,0 +1,62 @@
|
|||
require "test_helper"
|
||||
|
||||
module SecurityProviderInterfaceTest
|
||||
extend ActiveSupport::Testing::Declarative
|
||||
|
||||
test "fetches security price" do
|
||||
aapl = securities(:aapl)
|
||||
|
||||
VCR.use_cassette("#{vcr_key_prefix}/security_price") do
|
||||
response = @subject.fetch_security_price(aapl, date: Date.iso8601("2024-08-01"))
|
||||
assert response.success?
|
||||
assert response.data.price.present?
|
||||
end
|
||||
end
|
||||
|
||||
test "fetches paginated securities prices" do
|
||||
aapl = securities(:aapl)
|
||||
|
||||
VCR.use_cassette("#{vcr_key_prefix}/security_prices") do
|
||||
response = @subject.fetch_security_prices(
|
||||
aapl,
|
||||
start_date: Date.iso8601("2024-01-01"),
|
||||
end_date: Date.iso8601("2024-08-01")
|
||||
)
|
||||
|
||||
assert response.success?
|
||||
assert 213, response.data.prices.count
|
||||
end
|
||||
end
|
||||
|
||||
test "searches securities" do
|
||||
VCR.use_cassette("#{vcr_key_prefix}/security_search") do
|
||||
response = @subject.search_securities("AAPL", country_code: "US")
|
||||
securities = response.data.securities
|
||||
|
||||
assert securities.any?
|
||||
security = securities.first
|
||||
assert_kind_of Security, security
|
||||
assert_equal "AAPL", security.ticker
|
||||
end
|
||||
end
|
||||
|
||||
test "fetches security info" do
|
||||
aapl = securities(:aapl)
|
||||
|
||||
VCR.use_cassette("#{vcr_key_prefix}/security_info") do
|
||||
response = @subject.fetch_security_info(aapl)
|
||||
info = response.data
|
||||
|
||||
assert_equal "AAPL", info.ticker
|
||||
assert_equal "Apple Inc.", info.name
|
||||
assert info.logo_url.present?
|
||||
assert_equal "common stock", info.kind
|
||||
assert info.description.present?
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def vcr_key_prefix
|
||||
@subject.class.name.demodulize.underscore
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue