Skip to content

Ruff testing - #2

Closed
steinmn wants to merge 3 commits into
masterfrom
ruff_version
Closed

Ruff testing#2
steinmn wants to merge 3 commits into
masterfrom
ruff_version

Conversation

@steinmn

@steinmn steinmn commented Jul 24, 2026

Copy link
Copy Markdown
Owner

No description provided.

* 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
steinmn force-pushed the ruff_version branch 3 times, most recently from 56d5d52 to 8d6b97d Compare July 24, 2026 12:02
@steinmn steinmn closed this Jul 24, 2026
@steinmn
steinmn deleted the ruff_version branch July 24, 2026 15:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants