Files
OpenBB/openbb_platform/providers/fred/tests/test_query_params.py
Danglewood 869cfed125 [Release] openbb-v5.0.0 (#7741)
* merge branch develop with main

* bump desktop version

* fix the merge

* sync Cargo.lock to desktop 2.0.0

* fix cli conftest.py

---------

Co-authored-by: deeleeramone <>
2026-09-29 10:58:44 -07:00

139 lines
4.7 KiB
Python

"""Tests for the shared FRED query parameters and date normalization."""
from datetime import date
import pytest
from openbb_core.app.model.abstract.error import OpenBBError
from openbb_fred.utils.query import UseCacheQueryParams, join_dates
DATE_MODELS = (
"openbb_fred.models.high_quality_market.FredHighQualityMarketCorporateBondQueryParams",
"openbb_fred.models.non_farm_payrolls.FredNonFarmPayrollsQueryParams",
"openbb_fred.models.personal_consumption_expenditures.FredPersonalConsumptionExpendituresQueryParams",
)
def _load(path: str):
"""Return the class one dotted path names."""
from importlib import import_module
module, name = path.rsplit(".", 1)
return getattr(import_module(module), name)
class TestJoinDates:
"""Normalizing the date parameter to comma-separated ISO dates."""
def test_nothing_reads_as_nothing(self):
assert join_dates(None) is None
def test_a_date_is_written_out(self):
assert join_dates(date(2024, 3, 17)) == "2024-03-17"
def test_a_single_string_is_kept(self):
assert join_dates("2024-03-17") == "2024-03-17"
def test_a_comma_separated_string_is_kept(self):
assert join_dates("2024-03-17,2024-04-30") == "2024-03-17,2024-04-30"
def test_a_list_of_dates_is_joined(self):
assert join_dates([date(2024, 3, 17), date(2024, 4, 30)]) == (
"2024-03-17,2024-04-30"
)
def test_a_list_of_strings_is_joined(self):
assert join_dates(["2024-03-17", "2024-04-30"]) == "2024-03-17,2024-04-30"
def test_a_mixed_list_is_joined(self):
assert join_dates([date(2024, 3, 17), "2024-04-30"]) == (
"2024-03-17,2024-04-30"
)
def test_a_loosely_written_date_is_read(self):
assert join_dates("17 March 2024") == "2024-03-17"
def test_a_comma_always_separates(self):
"""A date written with a comma in it is two entries, not one."""
try:
joined = join_dates("March 17, 2024")
except OpenBBError as error:
assert "Invalid date: March 17" in str(error)
else:
assert joined is not None
assert len(joined.split(",")) == 2
def test_padding_is_ignored(self):
assert join_dates(" 2024-03-17 , 2024-04-30 ") == "2024-03-17,2024-04-30"
def test_an_empty_entry_is_dropped(self):
assert join_dates("2024-03-17,,") == "2024-03-17"
def test_nothing_but_separators_reads_as_nothing(self):
assert join_dates(",,") is None
def test_an_unreadable_date_is_reported(self):
with pytest.raises(OpenBBError, match="Invalid date: not-a-date"):
join_dates("not-a-date")
class TestUseCacheQueryParams:
"""The cache switch every FRED query carries."""
def test_the_cache_is_used_by_default(self):
assert UseCacheQueryParams().use_cache is True
def test_the_cache_can_be_refused(self):
assert UseCacheQueryParams(use_cache=False).use_cache is False
def test_every_fetcher_offers_the_switch(self):
from openbb_fred import fred_provider
without = [
name
for name, fetcher in fred_provider.fetcher_dict.items()
if "use_cache" not in fetcher.query_params_type.model_fields
]
assert without == []
def test_the_standard_parameters_still_lead(self):
from openbb_fred.models.series import FredSeriesQueryParams
fields = list(FredSeriesQueryParams.model_fields)
assert fields.index("symbol") < fields.index("use_cache")
class TestDateParameters:
"""The ``date`` parameter of the models that read a published release."""
@pytest.mark.parametrize("path", DATE_MODELS)
def test_nothing_reads_as_nothing(self, path):
assert _load(path)(date=None).date is None
@pytest.mark.parametrize("path", DATE_MODELS)
def test_a_date_becomes_a_written_date(self, path):
assert _load(path)(date=date(2024, 3, 17)).date == "2024-03-17"
@pytest.mark.parametrize("path", DATE_MODELS)
def test_a_list_is_accepted(self, path):
"""``multiple_items_allowed`` promises a list is read."""
assert _load(path)(date=[date(2024, 3, 17), date(2024, 4, 30)]).date == (
"2024-03-17,2024-04-30"
)
@pytest.mark.parametrize("path", DATE_MODELS)
def test_a_comma_separated_string_is_accepted(self, path):
assert _load(path)(date="2024-03-17,2024-04-30").date == (
"2024-03-17,2024-04-30"
)
def test_the_release_table_normalizes_through_the_standard_model(self):
from openbb_fred.models.release_table import FredReleaseTableQueryParams
query = FredReleaseTableQueryParams(release_id="50", date="2024-03-17")
assert query.date == "2024-03-17"