hass.tibber_prices/tests
WouterGithb db5d172fb8
fix(services): preserve service call data through coordinator data fetch (#151)
* fix(services): preserve service call data through coordinator data fetch

In `_handle_find_block` and `_handle_find_hours`, the local `data`
variable holding the resolved service call data was rebound to the
coordinator data dict returned by `get_entry_and_data()`. As a result,
the subsequent calls to `validate_search_params(data)`,
`apply_must_finish_by(data, ...)` and `resolve_search_range(...)` read
search-range parameters from coordinator data instead of from the
service call, silently ignoring:

- must_finish_by
- search_scope
- search_start, search_end
- search_start_time, search_end_time
- search_start_day_offset, search_end_day_offset
- search_start_offset_minutes, search_end_offset_minutes
- include_current_interval

The functions fell back to the default range ("now → end of tomorrow")
for every call that depended on these parameters.

Rename the third return value of `get_entry_and_data()` to
`coordinator_data` so the service call `data` survives, restoring
deadline and search-scope semantics. `find_cheapest_schedule.py`
already uses `data_dict` for the same purpose and was not affected.

Verified locally against v0.31.0: a call with
`must_finish_by: 2026-06-01T20:00:00+02:00` now correctly produces
`search_end: 2026-06-01T20:00:00+02:00` (was end-of-tomorrow before).

* refactor(services): update data handling in find_cheapest_schedule service

Refactor the data retrieval process to use coordinator data instead of entry data for improved clarity and consistency.

Impact: Enhances maintainability of the service code without altering user-facing functionality.

---------

Co-authored-by: “WouterK” <kwaken.geringd0w@icloud.com”git config --global user.name “WouterK”git config --global user.email kwaken.geringd0w@icloud.com”>
Co-authored-by: Julian Pawlowski <jpawlowski@users.noreply.github.com>
2026-06-01 12:45:10 +02:00
..
services fix(services): preserve service call data through coordinator data fetch (#151) 2026-06-01 12:45:10 +02:00
__init__.py test: add pytest framework and midnight-crossing tests 2025-11-21 23:47:01 +00:00
test_avg_none_fallback.py fix(services): use injected now in resolve_search_range day offset 2026-04-14 19:33:24 +00:00
test_best_price_e2e.py fix(services): use injected now in resolve_search_range day offset 2026-04-14 19:33:24 +00:00
test_binary_sensor_period_attributes.py fix(periods): stabilize best and peak period outputs 2026-04-25 22:46:38 +00:00
test_config_validators.py refactor(config): use negative values for Best Price min_distance 2025-11-22 04:44:57 +00:00
test_coordinator_shutdown.py fix(services): use injected now in resolve_search_range day offset 2026-04-14 19:33:24 +00:00
test_interval_pool_memory_leak.py fix(interval_pool): rebuild index after dead interval cleanup without empty groups 2026-04-17 12:00:37 +00:00
test_interval_pool_optimization.py chore(testing): add optional Pyright checks for tests 2026-04-25 22:46:43 +00:00
test_level_filtering.py fix(periods): keep negative best-price windows strictly local 2026-04-25 20:00:04 +00:00
test_lifecycle_state.py fix(sensors): ensure connection/tomorrow_data/lifecycle consistency 2025-11-22 04:45:57 +00:00
test_mean_median_display.py fix(services): use injected now in resolve_search_range day offset 2026-04-14 19:33:24 +00:00
test_midnight_handler.py fix(services): use injected now in resolve_search_range day offset 2026-04-14 19:33:24 +00:00
test_midnight_periods.py fix(services): use injected now in resolve_search_range day offset 2026-04-14 19:33:24 +00:00
test_midnight_turnover.py fix(services): use injected now in resolve_search_range day offset 2026-04-14 19:33:24 +00:00
test_minmax_none_fallback.py fix(services): use injected now in resolve_search_range day offset 2026-04-14 19:33:24 +00:00
test_negative_best_price_periods.py fix(periods): keep negative best-price windows strictly local 2026-04-25 20:00:04 +00:00
test_next_api_poll.py fix(services): use injected now in resolve_search_range day offset 2026-04-14 19:33:24 +00:00
test_peak_price_e2e.py refactor(periods): enhance peak period filtering and validation logic 2026-04-17 22:24:18 +00:00
test_percentage_calculations.py fix(services): use injected now in resolve_search_range day offset 2026-04-14 19:33:24 +00:00
test_period_calculation.py test(period): document period calculation testing strategy 2025-11-22 04:47:09 +00:00
test_period_overlap.py fix(periods): stabilize best and peak period outputs 2026-04-25 22:46:38 +00:00
test_period_statistics.py fix(periods): stabilize best and peak period outputs 2026-04-25 22:46:38 +00:00
test_periods_hash.py fix(periods): stabilize best and peak period outputs 2026-04-25 22:46:38 +00:00
test_price_calculations.py fix(services): use injected now in resolve_search_range day offset 2026-04-14 19:33:24 +00:00
test_price_window.py feat(services): add power-profile-weighted window selection 2026-05-03 22:16:08 +00:00
test_rating_threshold_validation.py chore(testing): add optional Pyright checks for tests 2026-04-25 22:46:43 +00:00
test_relaxation.py fix(periods): separate smoothed levels from period detection 2026-05-03 19:40:34 +00:00
test_resource_cleanup.py chore(testing): add optional Pyright checks for tests 2026-04-25 22:46:43 +00:00
test_sensor_consistency.py fix(services): use injected now in resolve_search_range day offset 2026-04-14 19:33:24 +00:00
test_sensor_timer_assignment.py refactor(repairs): simplify currency mode change notification to one-shot 2026-04-15 10:00:59 +00:00
test_time_service.py fix(services): use injected now in resolve_search_range day offset 2026-04-14 19:33:24 +00:00
test_timer_scheduling.py fix(services): use injected now in resolve_search_range day offset 2026-04-14 19:33:24 +00:00
test_tomorrow_data_refresh.py fix(periods): separate smoothed levels from period detection 2026-05-03 19:40:34 +00:00
test_user_data_validation.py fix(services): use injected now in resolve_search_range day offset 2026-04-14 19:33:24 +00:00