Ruff testing - #2
Closed
steinmn wants to merge 3 commits into
Closed
Conversation
* Add offline unit tests for the Zaptec API client api.py previously had only a single integration test that requires live login, leaving the core logic effectively uncovered offline. This adds a fake aiohttp ClientSession and exercises the pure logic and request machinery without credentials or network: - request() status handling: 200 JSON, 204 bytes, invalid JSON, error status codes, 500 GET retry-to-exhaustion vs 500 POST immediate raise, 401 -> token refresh -> retry - _request_worker retry/backoff: connection errors and timeouts retried then surfaced as RequestConnectionError / RequestTimeoutError - state_to_attrs: keydict mapping, Value/ValueAsString precedence, missing key/value skipping, excludes, duplicate-last-wins - set_attributes: ATTR_TYPES conversion, snake_case keys, conversion-failure fallback, update-in-place - is_command_valid: all resume/stop branches (incl. a characterization test for the int(None) issue flagged for the Phase 3 correctness cleanup) - stream_update routing: matching charger, unknown/missing/zero-guid ids - Zaptec mapping + poll dispatch: register/contains/qual_id, poll dispatch and unknown-object error Tests are self-contained (no live-constants fixture) so they run under SKIP_ZAPTEC_API_TEST and in CI. Lint-clean under the repo's ruff config. * Extend api.py offline tests to the command/poll/lifecycle wrappers Follows up the initial offline suite with the cheap, high-value cases, raising api.py statement coverage from ~50% to ~66%: - command(): named id, numeric id, authorize_charge alias, unknown-command error - charger settings wrappers: set_settings (valid + unknown-key), authorize_ charge, set_permanent_cable_lock, set_hmi_brightness (URL + payload) - installation current setters: set_limit_current (availableCurrent, missing-arg, partial-phase, out-of-range) and set_three_to_one_phase_switch_current (valid + out-of-range) - Charger.poll_info (happy, 403 -> charger-list fallback, non-403 re-raise) and poll_state (happy, 403 ignored) - Installation.poll_info SupportGroup logo stripping - login()/_refresh_token: token stored and sent on later requests; 400 -> AuthenticationError - small accessors/lifecycle: is_charging, model/model_prefix, Zaptec objects/installations/chargers/iter/len, async context manager Payload validation is bypassed in the poll tests (it has its own test module). build()/streaming/poll_firmware remain uncovered and are better tested alongside the Phase 2 typed-model work. --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
steinmn
force-pushed
the
ruff_version
branch
3 times, most recently
from
July 24, 2026 12:02
56d5d52 to
8d6b97d
Compare
No longer needed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.