"""Tests for the subscription and vacation-hold parsers. Written after a real bug: the first version matched `.account-item-multi-fields`, which is the HEADING row, so an account with a live subscription reported zero. A count of nothing looks exactly like an account with nothing. """ from __future__ import annotations import importlib import sys import types from pathlib import Path COMPONENT = Path(__file__).parent.parent / "custom_components" def _load(): if "aiohttp" not in sys.modules: stub = types.ModuleType("aiohttp") stub.ClientSession = object stub.ClientError = Exception stub.ClientTimeout = lambda *args, **kwargs: None sys.modules["aiohttp"] = stub sys.path.insert(0, str(COMPONENT)) pkg = types.ModuleType("fh_pkg") pkg.__path__ = [str(COMPONENT / "freshharvest")] sys.modules["fh_pkg"] = pkg return importlib.import_module("fh_pkg.actions") actions = _load() SUBS_HTML = """
""" def test_heading_row_is_not_a_subscription(): """The regression: the header row must not be counted, and must not hide the real one.""" subs = actions.parse_subscriptions(SUBS_HTML) assert len(subs) == 1 assert subs[0].name == "Georgia Grown Small Box" def test_subscription_fields(): sub = actions.parse_subscriptions(SUBS_HTML)[0] assert (sub.quantity, sub.frequency) == (2, "Weekly") assert sub.partner == "Various Partners" assert sub.arriving == "tomorrow" def test_no_subscriptions_is_empty_not_an_error(): assert actions.parse_subscriptions("nothing") == [] def test_vacation_hold_uses_the_sites_own_date_format(): """The page writes "Tuesday, Dec 1 - Monday, Dec 7", never ISO. The first version of this test asserted ISO dates, so it passed against a format the site does not produce while the parser reported zero holds on an account that had one. """ html = ( "
Upcoming Pauses" "
" ) holds = actions.parse_vacation_holds(html) assert len(holds) == 1 assert (holds[0].start, holds[0].end) == ("Dec 1", "Dec 7") def test_no_holds_parses_empty(): assert actions.parse_vacation_holds("
none
") == [] def test_frequency_names_map_to_site_values(): assert actions.FREQUENCIES["weekly"] == "1" # id='FrequencyID' but the POST field is popup-toggle; posting the id does nothing. assert actions.FREQUENCY_FIELD == "popup-toggle"